我正在尝试将使用 PHP 上传的文件移动到另一个文件夹,但不知何故这不起作用,导致:
move_uploaded_file(upload/tmp/phpxEGMLG): failed to open stream: Permission denied
所以,显然我没有适当的权限upload/tmp
(实际上是/var/www/html/upload/tmp
)。
我已经设置了权限777
和所有者root:root
,/var/www/html/upload/tmp
以绝对确定不会有问题。
但这并没有解决它...
我尝试过的其他事情:
- 将所有者设置为
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数组 ( [type] => 2 [message] => rename(/tmp/tst.txt,tst-2.txt): Permission denied [file] => /var/www/html/test.php [line] = > 13)
这告诉我脚本在哪个用户下运行并且我在正确的目录中。它还省略了额外的检查move_uploaded_file
使用,专注于文件的移动。
关于我的设置的一些信息:
- CentOS 7
- PHP 7.1
- PHP-FPM
- 阿帕奇 2.4.6
它为 PHP-FPM 使用单独的临时目录,例如/tmp/systemd-private-xxxx-php71-php-fpm.service-yyyy/tmp/
. 也许有一些原因它不能将文件移到这个目录之外?虽然我找不到任何东西......
我希望有人可以为我提供有关可能发生的事情的线索!