PHP:无法将文件移动到其他文件夹
我正在尝试将使用PHP上载的文件移动到其他文件夹,但不知何故,这将不起作用,导致:PHP:无法将文件移动到其他文件夹,php,apache,centos7,php-7.1,fpm,Php,Apache,Centos7,Php 7.1,Fpm,我正在尝试将使用PHP上载的文件移动到其他文件夹,但不知何故,这将不起作用,导致: move\u upload\u文件(upload/tmp/phpxEGMLG):无法打开流:权限被拒绝 因此,显然我对上传/tmp(实际上是/var/www/html/upload/tmp)没有适当的权限 我已经为/var/www/html/upload/tmp设置了777和所有者root:root的权限,以确保不会出现问题。 但这并没有解决问题 我尝试过的其他事情: 将所有者设置为apache:apache
move\u upload\u文件(upload/tmp/phpxEGMLG):无法打开流:权限被拒绝
因此,显然我对上传/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\u basedir
未设置)+日志upload\u tmp\u 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());
将目录或Web服务器的所有者更改为www-data
,并将自己添加到www-data
组,注销或重新启动
sudo adduser <username> www-data
sudo chown -R www-data:www-data /var/www
sudo chmod -R g+rwX /var/www
sudo添加用户www数据
sudo chown-R www-data:www-data/var/www
sudo chmod-rg+rwX/var/www
和将目录或Web服务器的所有者更改为www-data
,并将自己添加到www-data
组,注销或重新启动
sudo adduser <username> www-data
sudo chown -R www-data:www-data /var/www
sudo chmod -R g+rwX /var/www
sudo添加用户www数据
sudo chown-R www-data:www-data/var/www
sudo chmod-rg+rwX/var/www
而结果是SELinux
这里或多或少地回答了相同的问题:
我确实使用SELinux设置了Web服务器文件夹,以便Apache可以使用,同时还允许FTP读/写。但是我需要设置upload
文件夹(及其下面的文件夹)以允许Apache进行读/写,这可以通过类似的方式实现(注意命令中的rw
位):
此外,还有一个用于检查的简便命令:
ls -Z
现在显示:
drwxr-xr-x. apache apache system_u:object_r:httpd_sys_rw_content_t:s0 upload
结果是SELinux
这里或多或少地回答了相同的问题:
我确实使用SELinux设置了Web服务器文件夹,以便Apache可以使用,同时还允许FTP读/写。但是我需要设置upload
文件夹(及其下面的文件夹)以允许Apache进行读/写,这可以通过类似的方式实现(注意命令中的rw
位):
此外,还有一个用于检查的简便命令:
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的单元文件)。请让我们知道在[Service]下将PrivateTmp设置为false(可能您必须在/etc/systemd/system中创建一个名为httpd.Service的单元文件)。请让我们知道www-data
在CentOS上不存在,它在那里被称为apache
,但是用apache
而不是www-data
执行这些命令并不能解决问题…www-data
在CentOS上不存在,在那里被称为apache
,但是用apache
而不是www-data
执行这些命令并不能解决这个问题。。。