【发布时间】:2017-09-29 00:28:50
【问题描述】:
我正在尝试将使用 PHP 上传的文件移动到不同的文件夹,但不知何故这不起作用,导致:
move_uploaded_file(upload/tmp/phpxEGMLG): failed to open stream: Permission denied
所以,显然我对upload/tmp(实际上是/var/www/html/upload/tmp)没有适当的权限。
我已经为/var/www/html/upload/tmp 设置了777 和所有者root:root 的权限,以确保绝对不会有问题。
但这并没有解决它...
我尝试过的其他事情:
- 将所有者设置为
apache:apache - 将源文件权限更改为
777和所有者root(默认情况下,所有者设置为apache) - 检查 PHP 设置(几乎是默认设置,
/var/www/html和/tmp在open_basedir内部,upload_tmp_dir未设置)+ 日志 - 检查 Apache 设置 + 日志
- 在同一个文件夹中移动文件 --> 可行!
- 将其移至其他文件夹 --> 不起作用
- 将所有父目录设置为
777和所有者root或apache
我创建了一个测试脚本:
<?php
echo 'TESTING FILE MOVE' . '<br><br>';
echo getcwd() . '<br>';
echo get_current_user() . '<br>';
error_reporting(E_ALL);
file_put_contents('/tmp/tst.txt', 'this is a test');
chdir('/var/www/html/upload/tmp');
echo getcwd() . '<br><br>';
rename('/tmp/tst.txt', 'tst-2.txt');
print_r(error_get_last());
它给出如下输出:
测试文件移动
/var/www/html
根
/var/www/html/upload/tmp数组([类型] => 2 [消息] => 重命名(/tmp/tst.txt,tst-2.txt): 权限被拒绝 [file] => /var/www/html/test.php [line] => 13 )
这告诉我脚本在哪个用户下运行并且我在正确的目录中。它还省略了move_uploaded_file 使用的额外检查,专注于文件的移动。
关于我的设置的一些信息:
- CentOS 7
- PHP 7.1
- PHP-FPM
- Apache 2.4.6
它为 PHP-FPM 使用单独的临时目录,例如 /tmp/systemd-private-xxxx-php71-php-fpm.service-yyyy/tmp/。也许有一些原因它不能将文件移到这个目录之外?虽然我找不到任何东西......
我希望有人可以为我提供线索,了解可能发生的事情!
【问题讨论】:
标签: php apache centos7 php-7.1 fpm