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

时间:2012-08-09 12:19:02

标签: php permissions

我有以下脚本在本地工作正常:

    <?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服务器。

4 个答案:

答案 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)