我只想将临时文件移动到指定的文件夹。这是我的代码。
$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/
感谢任何帮助。谢谢!
答案 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脚本的结果
希望这会有所帮助