当尝试在CentOS上使用Apache 2.2和PHP 5.3配置上传目录时,我一直收到此错误。
在php.ini中:
upload_tmp_dir = /var/www/html/mysite/tmp_file_upload/
在httpd.conf中:
Directory /var/www/html/mysite/tmp_file_upload/>
Options -Indexes
AllowOverride None
Order allow,deny
Allow from all
</Directory>
<Directory /var/www/html/mysite/images/>
Options -Indexes
</Directory>
CentOS目录权限:
drwxrwxr-x 2 root root 4096 Nov 11 10:01 images
drwxr-xr-x 2 root root 4096 Nov 12 04:54 tmp_file_upload
无论我做什么,在上传文件时,都会不断从PHP收到此错误:
警告:move_uploaded_file(images / robot.jpg):无法打开流:在第78行的/var/www/html/mysite/process.php中,权限被拒绝
警告:move_uploaded_file():在第78行的/var/www/html/mysite/process.php中无法将'/ tmp / phpsKD2Qm'移动到'images / robot.jpg'
如你所见,它从未从php.ini文件中获取关于上传文件的配置。
我在这里做错了什么?
这是因为images
和tmp_file_upload
只能由root
用户写入。为了使上传正常工作,我们需要使这些文件夹的所有者与httpd进程所有者相同,或者使其在全局范围内可写(错误做法)。
$ps aux | grep httpd
。第一列通常是所有者nobody
更改你的所有者images
和tmp_file_upload
要成为的所有者,nobody
或更改你在步骤1中找到的所有者。
$sudo chown nobody /var/www/html/mysite/images/
$sudo chown nobody /var/www/html/mysite/tmp_file_upload/
Chmod images
,tmp_file_upload
现在可以由所有者写(如果需要的话)[好像你已经准备好了]。在@Dmitry Teplyakov答案中提及。
$ sudo chmod -R 0755 /var/www/html/mysite/images/
$ sudo chmod -R 0755 /var/www/html/mysite/tmp_file_upload/
有关为什么会发生此行为的更多详细信息,请查看手册http://php.net/manual/en/ini.core.php#ini.upload-tmp-dir,请注意,它也涉及open_basedir
指令。
谢谢:我们的老主人曾经是守护进程,现在是apache
此修复程序适用于您可能将服务器php类型从fast_CGI,CGI更改为Apache_mod(如plesk等)的情况。可以继续使用原始用户的权限而不是Apache。这解决了我的问题。
我遇到了同样的错误,但是进程和文件夹都归
jacob
我所有(因为我是我的本地计算机),并且所有文件夹都具有755
或775
。sudo service httpd restart
更改权限后,我必须重新启动apache进程。然后它起作用了:)chown
我没有更改所有者,而是将我的apache进程添加到了“ www”组,并通过以下方式将这些目录添加到了相同的“ www”组中chgrp