В рамках проекта у меня есть возможность создавать каталоги и файлы, а также редактировать эти файлы. Но теперь я добавляю функцию удаления для удаления каталогов и всего содержимого внутри. Я провел некоторое исследование и нашел ответ переполнения стека с 2009 года, который имел два варианта. Мне любопытно, какой из них лучше, и были ли какие-либо обновления безопасности этих двух (просто убедитесь, что я использую безопасный метод). Ниже приведена копия и вставка ответа.PHP: Удалить каталог и содержимое - самый безопасный, самый надежный метод
Эта функция позволит удалить любую папку (до тех пор, как он доступен для записи), и это файлы и подкаталоги.
function Delete($path)
{
if (is_dir($path) === true)
{
$files = array_diff(scandir($path), array('.', '..'));
foreach ($files as $file)
{
Delete(realpath($path) . '/' . $file);
}
return rmdir($path);
}
else if (is_file($path) === true)
{
return unlink($path);
}
return false;
}
Или без рекурсии с помощью RecursiveDirectoryIterator:
function Delete($path)
{
if (is_dir($path) === true)
{
$files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path), RecursiveIteratorIterator::CHILD_FIRST);
foreach ($files as $file)
{
if (in_array($file->getBasename(), array('.', '..')) !== true)
{
if ($file->isDir() === true)
{
rmdir($file->getPathName());
}
else if (($file->isFile() === true) || ($file->isLink() === true))
{
unlink($file->getPathname());
}
}
}
return rmdir($path);
}
else if ((is_file($path) === true) || (is_link($path) === true))
{
return unlink($path);
}
return false;
}
Я не вижу, что вы имеют значение * secure *. Оба могут нанести ущерб, если вы не знаете, что делаете. –
как в уязвимостях в коде, так и в известных небезопасных методах. Я знаю, что есть определенные вещи, которые не рекомендуются из-за известных уязвимостей, и просто хотели убедиться, что они не содержат никаких. – kdjernigan
^так что вы спрашиваете - это обзор кода? если да, то это может быть OT – reikyoushin