在我的项目中我无法使用move_uploaded_file
PHP 函数,因为:
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.ini
:upload_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”的文件(错误的斜杠)。