2013-07-20 7 views
0

내가 디렉토리와이 스크립트와 그 내용을 모두 제거하는 것을 시도하고있다 ...은밀한 디렉토리 제거가 작동하지 않습니까?

<?php 
$app = $_POST['app']; 

if (isset($_POST['app'])) { 
    $dir = "../apps/" . $app . "/"; 

function rrmdir($dir) { 
    if (is_dir($dir)) { 
     $objects = scandir($dir); 
     foreach ($objects as $object) { 
      if ($object != "." && $object != "..") { 
       if (filetype($dir."/".$object) == "dir") rrmdir($dir."/".$object); else unlink($dir."/".$object); 
      } 
     } 
     reset($objects); 
     rmdir($dir); 
    } 
} 
} 
?> 

은 $ 포스트는 잘 작동하고 스크립트가 오류를 반환하지 않습니다하지만 그냥 디렉토리를 삭제하지. 폴더 권한과 관련이있을 수 있습니까? PHP 확장을 활성화해야합니까?

- EDIT-- 링크 된 복제물은 내가 원하는 것을하지 않으며 코드를 변경하는 방법을 모른다. 나는 클라이언트 측에서 디렉토리를 삭제하므로 __DIR__이/test/app와 같은 경로를 유지하므로이 \ test \ app와 같아야합니다. 코드는 폴더를 제거하지 않지만 작동하지 않습니다. 모든 내용을 제거하십시오. 나는 그것이 FilesystemIterator::SKIP_DOTS 라인과 관련이 있다고 믿습니다. 사용자가 응용 프로그램을 다시 설치하면 중복 폴더 때문에 작업하지 않을 수 있기 때문에 폴더를 제거하는 코드가 필요합니다.

근무 코드 :

<?php 
$app = $_POST['app']; 

if (isset($_POST['app'])) { 
$dir ="../apps/" . $app; 

$di = new RecursiveDirectoryIterator($dir, FilesystemIterator::SKIP_DOTS); 
$ri = new RecursiveIteratorIterator($di, RecursiveIteratorIterator::CHILD_FIRST); 
foreach ($ri as $file) { 
    $file->isDir() ? rmdir($file) : unlink($file); 
} 
rmdir($dir); 
} 
?> 
+1

실제로 연결된 속임수에서 수락 된 답변을 사용하고 싶습니다. 사용하기가 훨씬 쉽습니다. 그 외에도 경로가 실제로 '../apps/'폴더 아래에 있는지 확인하고자합니다. 현재 악의적 인 사용자는 디렉토리 탐색 공격을 사용하여 '../apps/../'가 될 경로로 '..'을 전달할 수 있습니다. – Gordon

+0

안녕 @ 고든은 답장을 보내 주셔서 감사합니다. '__DIR__'이 디렉토리 경로 앞에 무엇을 의미하는지 설명해 주시겠습니까? 나는 방금 그 코드를 사용했고 내 디렉토리는 여전히 삭제되지 않고있다. – ChristopherStrydom

+0

내 질문은 복제 된 것으로 믿을 수 없다. @Gordon은 내 업데이트 된 질문을 볼 수 있겠는가? – ChristopherStrydom

답변

1

link @Gordon가에 나를 보내신 나에게 답변을 얻을 수있었습니다.

이것은 제 작업 코드입니다.

<?php 
$app = $_POST['app']; 

if (isset($_POST['app'])) { 
$dir ="../apps/" . $app; 

$di = new RecursiveDirectoryIterator($dir, FilesystemIterator::SKIP_DOTS); 
$ri = new RecursiveIteratorIterator($di, RecursiveIteratorIterator::CHILD_FIRST); 
foreach ($ri as $file) { 
    $file->isDir() ? rmdir($file) : unlink($file); 
} 
rmdir($dir); 
} 
?>