我有一个脚本,它使用file_get_contents()
从远程服务器获取json响应。 虽然file_get_contents()
在本地文件上正常工作,但不能与http或https一起工作,但它给了我以下错误file_get_contents(): http:// wrapper is disabled in the server configuration by allow_url_fopen=0 in
和file_get_contents(https://api.domain.com/resolve.json?url=blablabla): failed to open stream: no suitable wrapper could be found
..这是一个专用的服务器,我有WHM ..我试过
allow_url_fopen = on
,但是这不起作用。 allow_url_fopen = on
创build一个php.ini文件,但是这不起作用。 ini_set('allow_url_fopen', 'On');
到PHP脚本的开始,但这不起作用。 我知道我可以使用curl,但我想知道为什么这不工作..该脚本正常工作在其他服务器和本地主机
更新:
phpinfo();
给我
allow_url_fopen Off allow_url_include Off always_populate_raw_post_data Off
这意味着我的php.ini更改没有生效..我做错了什么?
通过ssh登录到你的服务器并输入
sudo nano /etc/php5/apache2/php.ini //<<<< ubuntu/debian server, might differ for you
在文件中,只需按"ctrl + w"
键入"allow_url_fopen"
并返回,最有可能的是你会先解释一下,所以重复搜索几次。 现在你可以改变输入
allow_url_fopen=0
至
allow_url_fopen=1
按"ctrl + x"
并用"y"
确认文件保存。
然后键入
sudo service apache2 restart
这将重新启动Apache,所以新的php.ini配置可以加载。 完成这些步骤后,您应该可以在外部使用file_get_contents
。
边注
如果你找不到你的php.ini文件,你可以在你的phpinfo()
的顶部找到加载的php.ini文件的路径,
如果您有root权限,请编辑php.ini
,通常位于/etc/php.ini
。
如果你没有root权限,尝试添加ini_set('allow_url_fopen', 'On');
或ini_set('allow_url_fopen', '1');
。
如果您看不到php.ini
,请尝试在PHP脚本中使用phpinfo()
来查找php.ini
位置。
$url= 'https://example.com'; $arrContextOptions=array( "ssl"=>array( "verify_peer"=>false, "verify_peer_name"=>false, ), ); $response = file_get_contents($url, false, stream_context_create($arrContextOptions));
这将允许你从url中获取内容,不管是HTTPS,也不需要在php ini中改变。