php – move_uploaded_file在我完成所有配置后给出“无法打开流:Permission denied”错误

尝试在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中收到此错误

Warning: move_uploaded_file(images/robot.jpg): Failed to open stream: Permission denied in /var/www/html/mysite/process.PHP on line 78

Warning: move_uploaded_file(): Unable to move ‘/tmp/PHPsKD2Qm’ to ‘images/robot.jpg’ in /var/www/html/mysite/process.PHP on line 78

正如您所看到的,它从未从PHP.ini文件获取有关上载文件的配置.

在这做错了什么?

解决方法:

这是因为images和tmp_file_upload只能由root用户写入.要上传到工作,我们需要使这些文件夹的所有者与httpd进程所有者相同或使它们全局可写(不良做法).

>检查apache进程所有者:$ps aux | grep httpd.第一列将是所有者,通常它将是无人
>将图像的所有者和tmp_file_upload更改为无人或您在步骤1中找到的所有者.

$sudo chown nobody /var/www/html/mysite/images/

$sudo chown nobody /var/www/html/mysite/tmp_file_upload/

>如果需要,Chmod图像和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指令.

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...