我有一个简单的脚本来创建和删除一个文件夹,但当我尝试删除一个文件夹时,它会弹出和错误。
代码:
<?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);
}
?>错误消息:
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有没有人知道怎么删除这个文件夹(最好是把里面的所有东西都删除)?此外,如果您看到任何其他改进,代码可以有,请随时告诉我。:-)
谢谢,迈克。
发布于 2009-08-01 17:13:10
一般来说,在Unix/Linux上的PHP脚本是以用户的身份运行的,这意味着他们需要“所有”权限,所以这是目录的权限问题。此外,要删除Linux/Unix中的文件或目录,您需要拥有对父目录的写权限。这可能是你的问题所在。
如果您创建的文件或目录有问题,请对它们使用chmod()来设置正确的权限。
此外,它可能不是空的。
另外,值得一提的是
$new_folder = $_POST['nazevS'];
$new_dir_path = $key."/".$new_folder;从安全的角度来看,真的是不好的吗?对输入进行清理。
发布于 2009-08-01 18:34:12
出于这个回答的目的,我将把允许目录中的任何和所有上传的安全风险放在一边。我知道这不安全,但我觉得这个问题超出了原始问题的范围。
正如每个人都说的,这可能是一个许可问题。但由于您已经在代码中创建了该目录(删除后,该目录很可能是以同一用户身份运行)。这是值得怀疑的。
要删除目录,您需要确保:
(保持句柄打开可能会导致拒绝权限和错误)
rmdir()只删除目录,而不删除目录中的文件。所以如果里面还有东西,它就不能工作了。要解决第二个问题,它非常简单。如果您使用的是这样的东西:
$hd = opendir($mydir);在删除前关闭您的句柄:
closedir($hd);对于第三个,你要做的就是递归删除。您可以使用以下函数来实现此目的:
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;
}
}发布于 2009-08-01 17:15:00
The服务器需要您尝试删除的文件夹的写访问权限。您可以通过以下方式提供它:
chgrp -R www-data g_test/uploads
chmod g+w g_test/uploads其中www-data是运行www服务器的用户(可能是apache或其他变体,具体取决于您的操作系统和服务器安装)。在此之后,您可以运行rmdir (如果目录不为空,则运行rm -r )。
此外,请记住,赋予web服务器写入目录的能力会存在安全问题。在某些情况下,这可能允许恶意用户运行任意代码(即接管您的计算机)或修改您的网站(即服务器间谍软件)。
出于这些原因,您应该仅授予满足以下条件的目录写入权限:
by 的服务器的目录之外
在生产机器上的这个设置中,您可以为只有Apache可以写入的这种类型的文件设置一个单独的目录。如果您必须将文件部署到此目录,请使用sudo或根帐户执行此操作,以限制具有访问权限的帐户。
有关我所指的更完整的描述,请查看Apache文档中的security tips部分。
https://stackoverflow.com/questions/1217022
复制相似问题