Mik*_*ike 3 php permissions permission-denied
我有一个简单的脚本来创建和删除文件夹,但是当我尝试删除文件夹时,它会出现错误.
代码:
<?php
if ($_POST['hidden']) {
$key = "../g_test/uploads";
$new_folder = $_POST['nazevS'];
$new_dir_path = $key."/".$new_folder;
$dir = mkdir($new_dir_path);
if($dir)
chmod ($new_dir_path, 0777);
}
if ($_POST['hiddenSS']) {
$key = "../g_test/uploads";
$new_folder = $_POST['nazevS'];
rmdir($key."/".$new_folder);
}
?>
Run Code Online (Sandbox Code Playgroud)
错误消息:
Warning: rmdir(../g_test/uploads/) [function.rmdir]: Permission denied in /home/free/howto.cz/m/mousemys/root/www/g_test/upload.php on line 51
Run Code Online (Sandbox Code Playgroud)
有谁知道如何删除文件夹(希望有里面的一切)?此外,如果您看到任何其他改进,代码可以,请随时告诉我.:-)
谢谢,迈克.
一般来说,Unix/Linux上的PHP脚本以用户"nobody"运行,这意味着他们需要"所有"权限,因此它是目录的权限问题.此外,要删除Linux/Unix中的文件或目录,您需要在父目录上具有写权限.那可能是你的问题.
如果您创建的文件或目录有问题,请使用chmod()它们来设置正确的权限.
它也可能不是空的.
此外,值得一提的是
$new_folder = $_POST['nazevS'];
$new_dir_path = $key."/".$new_folder;
Run Code Online (Sandbox Code Playgroud)
是真正从安全角度来看不好.消除那种输入.
出于这个答案的目的,我将存在允许将目录中的任何和所有上载放在一边的安全风险.我知道这不安全,但我觉得这个问题超出了原始问题的范围.
正如大家所说,这可能是一个许可问题.但是,因为您已在代码中创建了目录(最有可能在删除时作为同一用户运行).它怀疑是这样的.
要删除目录,您需要确保:
你有适当的权限(正如大家指出的那样).
删除前必须关闭所有目录句柄.
(保持句柄处于打开状态会导致权限被拒绝)
该目录必须为空.rmdir()只删除目录,而不是删除里面的文件.所以如果里面还有东西,它就无法完成它的工作.
要修复2号,它非常简单.如果你使用这样的东西:
$hd = opendir($mydir);
Run Code Online (Sandbox Code Playgroud)
删除前关闭句柄:
closedir($hd);
Run Code Online (Sandbox Code Playgroud)
对于3号,您想要做的是称为递归删除.您可以使用以下函数来实现此目的:
function force_rmdir($path) {
if (!file_exists($path)) return false;
if (is_file($path) || is_link($path)) {
return unlink($path);
}
if (is_dir($path)) {
$path = rtrim($path, DIR_SEPARATOR) . DIR_SEPARATOR;
$result = true;
$dir = new DirectoryIterator($path);
foreach ($dir as $file) {
if (!$file->isDot()) {
$result &= force_rmdir($path . $file->getFilename(), false, $sizeErased);
}
}
$result &= rmdir($path);
return $result;
}
}
Run Code Online (Sandbox Code Playgroud)