无法使用 php(Apache 2.4)移动上传的文件-权限被拒绝

无法使用 php(Apache 2.4)移动上传的文件-权限被拒绝

在我的项目中我无法使用move_uploaded_filePHP 函数,因为:

Notice:  PHP Request Startup: file created in the system's temporary directory in Unknown on line 0
Warning:  move_uploaded_file(../Pictures/1n0): Failed to open stream: Permission denied in /var/www/backend/Controllers/News.controller.php on line 114
move_uploaded_file(): Unable to move "/tmp/phpSPAnSj" to "../Pictures/1n0" in /var/www/backend/Controllers/News.controller.php on line 114

我尝试通过更改/var/www/backend/Pictures目录的所有者和该目录的权限来解决此问题:

# ls -la /var/www/backend

drwxr-xr-x. 10 root   root 4096 Oct 14 20:26 .
drwxr-xr-x.  8 root   root 4096 Oct 18 12:18 ..
...
drwxr-xr-x.  2 nobody root 4096 Oct 13 14:45 Pictures

而且我还看到了目录的权限/tmp

# ls -la /

drwxr-xr-x.  19 root root  4096 Oct 16 14:43 .
drwxr-xr-x.  19 root root  4096 Oct 16 14:43 ..
...
drwxrwxrwt.  14 root root   280 Oct 18 12:28 tmp

(我尝试通过修改来更改临时上传的目录php.iniupload_tmp_dir = /var/www/tmp_upload但 apache 仍然将 tmp 文件保留在/tmp目录中。)

那么我如何授予 apache 移动临时上传文件的权限?

答案1

你没有说这是在什么操作系统上运行的。如果是 RHEL/Rocky/Alma/Debian/Ubuntu/Suse,那么 MAC 可能是一个考虑因素。

drwxr-xr-x.  2 nobody root 4096 Oct 13 14:45 Pictures

您的 PHP 以“nobody”身份运行?这相当不寻常 - 您确实应该为您的 Web 服务器使用专用服务帐户 - nobody 是服务帐户,但已经具有与此处不太相符的特定用例和语义。

您的错误可能意味着权限错误。但它表明您没有将其移动到名为“Pictures”的目录,而是试图将其移动到当前目录中名为“..\Pictures\1n0”的文件(错误的斜杠)。

相关内容