물론, 당신은 unlink()
및 rmdir()
를 사용해야 할 것, 그리고 rmdir()
그들에있는 파일과 디렉토리에 작동하지 않기 때문에 당신은 재귀 적 디렉토리 제거 기능을 필요 했어. 또한 모든 사람을 삭제하는 것을 막기 위해 삭제 스크립트가 정말로 안전하도록하고 싶을 수도 있습니다. 재귀 함수에 대한이 같은
뭔가 :
function Remove_Dir($dir)
{
$error = array();
if(is_dir($dir))
{
$files = scandir($dir); //scandir() returns an array of all files/directories in the directory
foreach($files as $file)
{
$fullpath = $dir . "/" . $file;
if($file == '..' || $file == '.')
{
continue; //Skip if ".." or "."
}
elseif(is_dir($fullpath))
{
Remove_Dir($fullpath); //recursively remove nested directories if directory
}
elseif(is_file($fullpath))
{
unlink($fullpath); //Delete file otherwise
}
else
{
$error[] = 'Error on ' . $fullpath . '. Not Directory or File.' //Should be impossible error, because everything in a directory should be a file or directory, or . or .., and thus should be covered.
}
}
$files = scandir($dir); //Check directory again
if(count($files) > 2) //if $files contains more than . and ..
{
Remove_Dir($dir);
}
else
{
rmdir($dir); //Remove directory once all files/directories are removed from within it.
}
if(count($error) != 0)
{return $error;}
else
{return true;}
}
}
그럼 그냥 파일이나 디렉토리를 통과해야 아마 확인, 그것을위한 urlencode()
또는 무언가를 필요로, 스크립트에 GET 또는 뭔가를 삭제할 파일을 삭제하려고 할 때 권한이있는 사용자이고 파일 인 경우 unlink()
이고 디렉토리이면 Remove_Dir()
입니다.
디렉토리/파일을 제거하기 전에 스크립트의 디렉토리/파일에 전체 경로를 추가해야합니다.
보안을 위해 사용자가 원하는 것은 먼저 삭제가 예정된 장소에서 일어나고 있는지 확인하기 위해 누군가 ?dir=/
또는 그 밖의 다른 작업을 수행 할 수 없으며 루트에서 전체 파일 시스템을 삭제하려고 시도 할 수 있습니다. 아마도 $dir = '/home/user/public_html/directories/' . $_GET['dir'];
과 같은 입력에 적절한 경로를 추가함으로써 우회 될 수 있습니다. 물론 경로에서 모든 것을 잠재적으로 삭제할 수 있습니다. 즉, 사용자가 해당 경로의 권한을 가지고 있는지 확인해야합니다.
경우에 대비하여 파일의 정기적 인 백업을 유지해야합니다.
** 그러나 코드에서 사용자가 해당 파일을 삭제할 수 있음을 확인하는 것을 잊지 마십시오 ** – ThiefMaster
코드에이 함수를 추가 할 위치를 알려주시겠습니까? (나는 PHP에 대해 매우 익숙하지 않다.) – Jopper