尝试在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 allOptions -Indexes
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进程所有者相同或使它们全局可写(不良做法).
检查apache进程所有者:$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/
文件模式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进程所有者:
然后将目标目录的所有者更改为您所拥有的.使用命令:
chown user destination_dir
然后使用该命令
chmod 755 destination_dir
更改目标目录权限.
如果您有Mac OS X,请转到文件根目录或您网站的文件夹.
然后右键单击它,去获取信息,转到最底层(共享和权限),打开它,更改所有只读以进行读写.确保打开挂锁,转到设置图标,然后选择应用到随附的项目...
我想将此添加到之前的建议中.如果您使用的是启用了SELinux的Linux版本,那么您还应该在shell中执行此操作:
chcon -R --type httpd_sys_rw_content_t /path/to/your/directory
同时通过组或更改目录的所有者为您的Web服务器提供用户权限.
更改此文件夹的权限
# chmod -R 0755 /var/www/html/mysite/images/
这对我有用.
sudo adduserwww-data sudo chown -R www-data:www-data /var/www sudo chmod -R g+rwX /var/www
注销或重启.
如果SELinux
抱怨,请尝试以下方法
sudo semanage fcontext -a -t httpd_sys_rw_content_t '/var/www(/.*)?' sudo restorecon -Rv '/var/www(/.*)?'
即使已经成功运行了作曲家,我也遇到了这个相关的问题.我更新了作曲家,在跑步composer install
或php composer.phar install
我得到时:
...未能打开流:权限被拒绝...
经过大量研究后发现,之前关于更改文件夹权限的答案有效.它们现在只是略有不同的目录.
在我的安装中,在OS X上,缓存文件存在/Users/[USER]/.composer/cache
,我遇到了麻烦,因为缓存文件由root拥有.以递归方式向我的用户更改'.composer'的所有权解决了这个问题.
这就是我做的:
sudo chown -R [USER] cache
然后我再次运行作曲家安装瞧!
试试这个:
打开/ etc/apache2/envvars
sudo gedit /etc/apache2/envvars
替换www-data
你的your_username
"export APACHE_RUN_USER=www-data"
用...来代替
export APACHE_RUN_USER='your_username'
当apache用户(www-data)没有写文件夹中的权限时,会发生此问题。要解决此问题,您需要将用户放入组www-data中。
我刚刚做了这个:
执行此php代码以发现apache使用的用户。之后,在终端中执行命令:
user@machine:/# cd /var/www/html user@machine:/var/www/html# ls -l
它将返回如下内容:
total of files drwxr-xr-x 7 user group size date folder
我保留了该用户,但将该组更改为www-data
chown -R user:www-data yourprojectfoldername chmod 775 yourprojectfoldername