Web 服务器上的文件重命名失败


File rename failing on web server

我有以下脚本在本地运行良好:

    <?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);
}
?>