PHP:move_uploaded_file不起作用

时间:2018-02-19 02:06:24

标签: php file file-io io

我只想将临时文件移动到指定的文件夹。这是我的代码。

        $uploads_dir = $_SERVER['DOCUMENT_ROOT'].'/upload';
        $name = basename($_FILES["csv"]["name"]);
        $tmp_name = $_FILES["csv"]["tmp_name"];
        chmod("{$uploads_dir}/{$name}", 0755);

        if (!move_uploaded_file($tmp_name, "{$uploads_dir}/{$name}")):
            array_push($fileErrArr, "fail to move uploaded file");
        endif;

这是来自httpd日志的错误消息。它甚至没有提到"许可"东西。

[error] [client XXX] PHP警告:move_uploaded_file(/var/www/html/upload/XXX.csv):无法打开流:\ xe8 \ xa8 \ xb1 \ xe5 \ x8f \ xaf \ xe3 \ x81第115行/var/www/html/XXX/action.php中的\ x8c \ xe3 \ x81 \ x82 \ xe3 \ x82 \ x8a \ xe3 \ x81 \ xbe \ xe3 \ x81 \ x9b \ xe3 \ x82 \ x93,referer :https://XXX/

[error] [client XXX] PHP警告:move_uploaded_file():无法移动' / tmp / php40tPEO' to' /var/www/html/upload/XXX.csv'在第115行的/var/www/html/XXX/action.php中,引用者:https://XXX/

感谢任何帮助。谢谢!

2 个答案:

答案 0 :(得分:1)

我认为您可以使用此<?php echo exec('whoami'); ?>来检查您的PHP脚本运行器。

然后使用ls -l检查目标方向是谁。

确保跑步者和主人是一样的。

例如:php runner可能是www-data,目标文件夹所有者可能是admin。使用:

chown www-data /var/www/xxx/upload
chmod 755 /var/www/xxx/upload

它可能有用。

答案 1 :(得分:0)

你好,我最近遇到的每个人都是我,我也是一个初学者,在短短3个小时内就解决了这个问题,这对我有帮助。我使用Linux AMI EC2实例。

问题可能全与文件夹的“可写性”有关(对不起,我对术语不太熟悉,请耐心等待),也许只允许根目录使用

首先在实时服务中制作一个脚本,并包含以下代码以了解名称 将执行php的move_uploaded_file命令的客户端

<?php
echo exec('whoami');    
?>

然后结果是给我“ apache”作为客户的用户 在寻找文件夹之后,目的地检查它是否可以被客户端写入。 使用

ls -lh / var / www / folder /

然后您会看到 根和www就可以了 更改为

chown -R apache:apache /文件夹目标

请始终注意,用户是whoami php脚本的结果

希望这会有所帮助