修复 file_get_contents 权限被拒绝的错误

Vla*_*ski 5 php json curl

我有一个与 JSON 和 PHP 相关的问题。所以,如果你访问这个网站:http : //air.moepp.gov.mk/graphs/site/pages/MakeGraph.php?station=SkopjeRegion¶meter=PM10D&beginDate=2018-02-10&beginTime=19 : 00&endDate=2018-02- 17&endTime=19:00&i=1518893212453&lang=en

作为返回,您将获得 HTML,但是如果您转到响应,则响应是纯 JSON,因此我试图获取 JSON 数据,但失败了。可能我做错了什么,但我不知道是什么。我试着用file_get_contents()curl,但我不从它那里得到任何东西......因此,这里是我想要做的事:

<?php
$content = file_get_contents('http://air.moepp.gov.mk/graphs/site/pages/MakeGraph.php?station=SkopjeRegion&parameter=PM10D&beginDate=2018-02-10&beginTime=12:00&endDate=2018-02-17&endTime=12:00&i=1518865590001&lang=en');  
$contents = json_decode($content, true);  
var_dump($contents);
Run Code Online (Sandbox Code Playgroud)

作为回报,我得到NULL.

编辑:

我发现file_get_contents()由于权限问题,我的 PHP 函数无法正常工作。问题是:

file_get_contents('url'): failed to open stream: Permission denied in /var/www/html/xxx.php on line X

在谷歌搜索和@geoidesic 的建议之后,我发现 SELinux(安全增强型 Linux)正在阻止 Apache(默认情况下来自 httpd(Apache)的网络连接被禁用。所以我按照http://drib上的分步教程进行了操作.tech/programming/php-file_get_contents-not-working终于让它工作了。无论如何,如果有人需要,这里是一个简短的解决方案:

  1. 确保你allow_url_fopen=On的 php.ini 文件中有。(如果有人不知道您的 php.ini 文件在哪里,使用 phpinfo() 快速检查可以为您提供一切。

  2. 检查 SELinux 的状态:

    sudo sestatus

    如果状态为enabled,那么您可以检查布尔标志httpd_can_network_connecthttpd_unified是否已启用,设置为 1:

    sudo sestatus -b | grep httpd_can_network_connectsudo sestatus -b | grep httpd_unified

    如果它们已关闭,请运行此命令将它们设置为打开:

    sudo setsebool -P httpd_can_network_connect 1 sudo setsebool -P httpd_unified 1

    然后重启,或者重启httpd。这就是全部,再次,非常感谢drib.tech的家伙。

Hom*_*cIs 7

我刚才遇到了同样的问题,它是由 selinux 引起的。

通过运行解决:

sudo setsebool -P httpd_can_network_connect 1
sudo setsebool -P httpd_unified 1
Run Code Online (Sandbox Code Playgroud)


geo*_*sic 0

检查您的 PHP 错误日志。您可能遇到网络问题,导致您的 PHP 实例无法访问该 URL。例如,您可能正在从没有外部网络访问权限的虚拟环境中运行它。

尝试file_get_contents('google.com')一下,看看你会得到什么。

我尝试了你的代码,它对我来说非常有效。我得到了 JSON 回来。

我不知道你为什么说“如果你访问这个网站......你会得到 HTML”,因为你不这样做,你会得到 JSON。