[英]PHP: unable to move file to different folder
我正在尝试将使用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
) /var/www/html
和/tmp
在open_basedir
,未设置upload_tmp_dir
)+日志 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等/上传/ tmp目录数组([type] => 2 [message] =>重命名(/tmp/tst.txt,tst-2.txt):权限被拒[file] => /var/www/html/test.php [line] = > 13)
这告诉我脚本在哪个用户下运行,我在正确的目录中。 它还省略了move_uploaded_file
使用的额外检查,重点是移动文件。
有关我的设置的一些信息:
它为PHP-FPM使用单独的临时目录,例如/tmp/systemd-private-xxxx-php71-php-fpm.service-yyyy/tmp/
。 也许有一些原因它无法将文件移到此目录之外? 虽然我找不到任何东西......
我希望有人能给我一些关于可能发生的事情的线索!
原来是SELinux 。
这里回答的问题大致相同: https : //unix.stackexchange.com/questions/50639/httpd-cant-write-to-folder-file-because-of-selinux
我确实已经将SELinux的webserver文件夹设置为Apache可用,同时还允许FTP读/写。 但我需要设置upload
文件夹(及其下面的文件夹)以允许Apache进行读/写,这可以通过类似的方式完成(注意命令中的rw
位):
chcon --user system_u --type httpd_sys_rw_content_t -R upload
另外,一个方便的命令检查:
ls -Z
现在显示:
drwxr-xr-x. apache apache system_u:object_r:httpd_sys_rw_content_t:s0 upload
在[Service]下将PrivateTmp设置为false(可能您必须在/ etc / systemd / system中创建名为httpd.service的单元文件)。 请告诉我们
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.