我们使用的是 Gentoo 服务器。我们最近升级到 PHP 5.6 版。出现这个问题是在升级之后。
我发现当我用类似的地址替换 REST 服务时https://www.google.com;我的页面工作得很好。
https://www.google.com
在较早的尝试中,我设置了“verify_peer”=>false,并将其作为参数传递给 file_get_contents,如下所述: 但就像作者指出的那样;它没有任何区别。
“verify_peer”=>false
我已经询问了我们的一位服务器管理员,我们的 php.ini 文件中是否存在这些行:
他告诉我,因为我们在 Gentoo 上,所以我们在构建时会编译 openssl;并且它没有在 php.ini 文件中设置。
我也确认这allow_url_fopen是有效的。由于这个问题的特殊性;我没有找到很多帮助信息。你们有没有遇到过这样的事情?谢谢。
allow_url_fopen
这是一个非常有用的链接,可以找到:
http://php.net/manual/en/migration56.openssl.php
描述在 PHP 5.6 中打开 ssl 所做更改的官方文档 从这里我了解到我应该设置为 false 的另一个参数:“verify_peer_name”=>false
注意: 这具有 非常 重要的安全隐患。禁用验证可能允许MITM 攻击者使用无效证书窃听请求。虽然在本地开发中这样做可能很有用,但在生产中应该使用其他方法。
所以我的工作代码如下所示:
<?php $arrContextOptions=array( "ssl"=>array( "verify_peer"=>false, "verify_peer_name"=>false, ), ); $response = file_get_contents("https://maps.co.weber.ut.us/arcgis/rest/services/SDE_composite_locator/GeocodeServer/findAddressCandidates?Street=&SingleLine=3042+N+1050+W&outFields=*&outSR=102100&searchExtent=&f=json", false, stream_context_create($arrContextOptions)); echo $response; ?>