【发布时间】:2014-11-26 17:26:23
【问题描述】:
我一直在尝试从我在服务器上创建的 PHP 页面访问这个特定的 REST 服务。我将问题缩小到这两行。所以我的 PHP 页面是这样的:
<?php
$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");
echo $response; ?>
页面在第 2 行终止并出现以下错误:
- 警告:file_get_contents():SSL 操作失败,代码为 1。 OpenSSL 错误消息:错误:14090086:SSL 例程:SSL3_GET_SERVER_CERTIFICATE:证书验证失败 ...第 2 行的 php
- 警告:file_get_contents():无法在 ...php 中启用加密 第 2 行
- 警告: 文件获取内容(
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): 无法打开流:第 2 行 ...php 中的操作失败
我们使用的是 Gentoo 服务器。我们最近升级到 PHP 5.6 版。出现这个问题是在升级之后。
当我用https://www.google.com之类的地址替换REST服务时发现;我的页面工作得很好。
在之前的尝试中,我设置了 “verify_peer”=>false,并将其作为参数传递给 file_get_contents,如下所述:file_get_contents ignoring verify_peer=>false? 但就像作者指出的那样;它没有任何区别。
我已经询问了我们的一位服务器管理员,我们的 php.ini 文件中是否存在这些行:
- extension=php_openssl.dll
- allow_url_fopen = 开启
他告诉我,因为我们在 Gentoo 上,所以我们在构建时会编译 openssl;并且它没有在 php.ini 文件中设置。
我还确认allow_url_fopen 正在工作。由于这个问题的特殊性;我没有找到很多帮助信息。你们有没有遇到过这样的事情?谢谢。
【问题讨论】:
-
如果您使用卡巴斯基,请检查:stackoverflow.com/a/54791481/3549317
-
我发现只有在从同一个网站(不是本地)中抓取时才会出现此错误,即:将不同的网站抓取到运行脚本的位置完美。
-
对于那些在 2021 年得到这个的人,请看这个问题:stackoverflow.com/questions/69413223/…
标签: php rest ssl file-get-contents