我有以下脚本在本地运行良好:
<?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服务器上运行时,出现以下错误:
警告:rename(.,.) [function.rename]:在第 10 行的 C:''inetpub''vhosts''domain.com''httpdocs''rename.php 中被拒绝权限
知道我该如何解决这个问题吗?
干杯
注意:
我正在使用IIS7和Windows服务器。
几件事:
在 Windows 中,转到要重命名文件的目录,右键单击,然后查看文件夹和其中文件的权限。无论进程运行什么,Web 服务器都需要具有修改这些文件或在目录中创建新文件的权限。
其次,更微妙的是 - 我认为根本原因是错误。在PHP手册中,有一条注释建议重命名会将文件放在当前工作目录中,除非您在"to"参数中指定了完整的目录路径。因此,如果您尝试将"c:''instance/system/application/images/dir/testimages/banana pic.jpg"重命名为banana_pic.jpg,则当前代码会将其写入当前工作目录 - 可能是php.exe的位置 - 这将失败。
我会尝试指定您希望在其中放置重命名文件的文件夹,看看它是否有效......
设置文件权限 要重命名为 777。
在文件管理器中,例如filezilla,右键单击文件并设置权限。
或者只是谷歌:设置服务器上文件的权限。
你也可以通过PHP尝试:http://php.net/manual/en/function.chmod.php
为了重命名或chmod文件,您需要具有访问权限才能执行此操作。这意味着该文件应该由网络服务器进程拥有,或者应该带有适当的模组,允许任何人更改它(如 777)
注意:此注释不适用于 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);
}
?>