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

我正在尝试将使用PHP上载的文件移动到其他文件夹,但不知何故,这将不起作用,导致:

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
执行这些命令并不能解决这个问题。。。