1

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

    <?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]: Permission denied in C:\inetpub\vhosts\domain.com\httpdocs\rename.php on line 10

知道如何解决这个问题吗?

干杯

笔记:

我正在使用 IIS7 和 Windows 服务器。

4

4 回答 4

1

几件事:

在 Windows 中,转到要重命名文件的目录,右键单击,然后查看文件夹和其中文件的权限。无论进程正在运行,Web 服务器都需要具有修改这些文件或在目录中创建新文件的权限。

其次,更微妙的是——我认为根本原因是一个错误。在PHP 手册中,有一条注释建议重命名会将文件放在当前工作目录中,除非您在“to”参数中指定完整目录路径。因此,如果您尝试将“c:\instance/system/application/images/dir/testimages/banana pic.jpg”重命名为banana_pic.jpg,您当前的代码会将其写入当前工作目录——可能是php.exe - 这将失败。

我会尝试指定要放置重命名文件的文件夹,看看是否可行...

于 2012-08-09T13:07:00.530 回答
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);
}
?>
于 2012-08-09T12:22:33.610 回答
0

设置要重命名为 777 的文件的权限。
在文件管理器中,例如 filezilla,右键单击文件并设置权限。
或者只是谷歌:设置服务器上文件的权限。
您也可以通过 PHP 尝试:http: //php.net/manual/en/function.chmod.php

于 2012-08-09T12:23:04.367 回答
0

为了重命名或 chmod 文件,您需要有权执行此操作。这意味着该文件应该由网络服务器进程拥有,或者应该具有允许任何人更改它的适当模块(如 777)

于 2012-08-09T12:32:28.477 回答