file_get_contents():无法打开流:权限被拒绝

问题描述:

我试图从url加载image。 一切工作正常localhostfile_get_contents():无法打开流:权限被拒绝

当我运行在我的网络服务器的代码跟它

Warning: file_get_contents(url): failed to open stream: Permission denied in /home/www/ .../imageup.php on line 64

我搜索上google并与*很多答案尝试。 大家都在说要将proper permission设置为文件和文件夹。

我已将permission设置为php file,并将文件夹设置为777

一些答案说运行一些命令,但我找不到控制台来运行该代码,所以我手动允许权限。

我可以理解,有一些权限,但无法弄清楚。 (有人可能会说这是一个重复的,并且可以是,但我无法找到解决方案)

$file = file_get_contents($image['src']); 
+0

3个问题。 1)什么是src? 2)什么是你的网络主机的根3)你可以使用该功能的文件存在于你的PHP文件的相同文件夹。 – Augwa

+0

1.''image ['src']'返回一个'url' – Sudarshan

+0

所以它就像'http:// example.org/image.png'如果你在这方面获得了权限拒绝,这意味着'allow_url_fopen'是假。看到这个*问题,http://*.com/questions/3488425/php-ini-file-get-contents-external-url。您的虚拟主机提供商不允许这样做。 – Augwa

请去你的项目的根目录并运行以下命令

find . -type d -exec chmod 770 {} \; && find . -type f -exec chmod 660 {} \; 

我希望它能解决你的问题。

+0

我需要一个控制台或其他东西来运行代码吗?或作为代码在文件中? – Sudarshan

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

1.查看apache进程所有者:$ps aux | grep httpd。第一列将是车主通常这将是nobody

2.Change图像和tmp_file_upload的所有者将成为nobody或者你在步骤1中

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

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

找到了失主

3.Chmod imagestmp_file_upload现在可以由所有者写入,如果需要的话[看起来你已经有了这个]。 @Dmitry Teplyakov提到了答案。

$ sudo chmod -R 0755 /var/www/html/mysite/images/

$ sudo chmod -R 0755 /var/www/html/mysite/tmp_file_upload/

4.对于更多的细节,为什么这种行为happend,查手册http://php.net/manual/en/ini.core.php#ini.upload-tmp-dir,请注意,它也谈到open_basedir指令。