我有以下脚本在本地工作正常:
<?php
//Report all errors
error_reporting(E_ALL);
if ($handle = opendir('instance/system/application/images/dir/testimages/')){
while (false !== ($fileName = readdir($handle))){
$newName = str_replace(" ", "_", $fileName);
rename($fileName, $newName);
}
echo "All files have been renamed";
closedir($handle);
}
?>
但是,当在Web服务器上运行时,我收到以下错误:
警告:重命名(。,.)[function.rename]:第10行的C:\ inetpub \ vhosts \ domain.com \ httpdocs \ rename.php中的权限被拒绝
知道如何解决这个问题吗?
干杯
注意:
我正在使用IIS7和Windows服务器。
答案 0 :(得分:1)
一些事情:
在Windows中,转到要重命名文件的目录,右键单击,然后查看文件夹和文件中的文件的权限。无论进程运行什么,Web服务器都需要具有修改这些文件的权限,或者在目录中创建新文件。
其次,更巧妙 - 我认为根本原因是一个错误。在PHP manual中,有一条注释表明重命名会将文件放在当前工作目录中,除非您在“to”参数中指定完整的目录路径。 因此,如果您尝试将“c:\ instance / system / application / images / dir / testimages / banana pic.jpg”重命名为banana_pic.jpg,您当前的代码会将其写入当前工作目录 - 可能是php.exe - 那会失败。
我尝试指定要放置重命名文件的文件夹,看看是否有效...
答案 1 :(得分:0)
注意:此注释不适用于Windows服务器。当我发表评论时,我没有意识到这一点。这适用于linux,而不适用于windows。
您无权编辑图像,因此需要chmod()文件:
chmod()函数更改了文件的权限,因此您可以重命名该文件。 “777”意味着任何人都可以(毫秒)更改,读取和执行文件。然后你把它写回“644”,这样任何人都可以阅读,但只有你可以改变文件。第二步是为了安全。您不希望服务器上的文件可由所有人编辑和执行。
<?php
//Report all errors
error_reporting(E_ALL);
if ($handle = opendir('instance/system/application/images/dir/testimages/')){
while (false !== ($fileName = readdir($handle))){
$newName = str_replace(" ", "_", $fileName);
chmod($fileName, 777);
rename($fileName, $newName);
chmod($newName, 644);
}
echo "All files have been renamed";
closedir($handle);
}
?>
答案 2 :(得分:0)
设置文件权限您要重命名为777 在文件管理器中,比如filezilla,右键单击文件并设置权限 或者只是谷歌:设置服务器上文件的权限 您也可以尝试使用PHP:http://php.net/manual/en/function.chmod.php
答案 3 :(得分:0)
要重命名或chmod文件,您需要具有访问权限的权限。这意味着该文件应该由Web服务器进程拥有,或者应该具有允许任何人更改的适当mod(如777)