大家好我有一个与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¶meter=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);
作为回报,我得到NULL
。
这是编辑!!!
所以,感谢stackoverflow的那些人,我发现我的PHP函数file_get_contents()
由于权限问题而无法正常工作,问题是:
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)的网络连接被禁用。所以我按照{{{}的分步教程进行了操作。最后,如果有人需要它,这就是解决方案:
allow_url_fopen=On
。 (如果有人不知道你的php.ini文件在哪里,快速检查phpinfo()可以得到你所有的东西。检查SELinux的状态:
sudo sestatus
如果状态为启用,则可以检查是否启用了布尔标志 httpd_can_network_connect 和 httpd_unified ,设置为1:
sudo sestatus -b | grep httpd_can_network_connect
和sudo sestatus -b | grep httpd_unified
如果它们已关闭,请运行此命令将其设置为:
sudo setsebool -P httpd_can_network_connect 1
sudo setsebool -P httpd_unified 1
然后重启,或重启httpd。所以,再一次,非常感谢http://drib.tech/programming/php-file_get_contents-not-working的那个人。
答案 0 :(得分:4)
我刚才遇到了同样的问题,这是由selinux引起的。
通过运行解决:
sudo setsebool -P httpd_can_network_connect 1
sudo setsebool -P httpd_unified 1
答案 1 :(得分:0)
检查您的PHP错误日志。可能您遇到网络问题,您的PHP实例无法访问该URL。例如,您可能是从没有外部网络访问权限的虚拟环境中运行它。
以file_get_contents('google.com')
为例,看看你得到了什么。
我尝试了你的代码,它对我来说很有效。我收回了JSON。
我不知道你为什么这么说&#34;如果你访问这个网站......你会得到HTML&#34;因为你没有,你得到JSON。
答案 2 :(得分:-1)
使用$content = readfile('url');
,应该没有错误。
我也遇到了这个问题,但是仍然有效,而且readfile is faster than file_get_contents。