我一直在try 从服务器上创建的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行停止,出现以下错误:

  • Warning: file_get_contents(): SSL operation failed with code 1. OpenSSL Error messages: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed in ...php on line 2
    • 警告:file_get_contents():无法在中启用加密...php开启
    • 警告:

我们使用的是Gentoo服务器.我们最近升级到了PHP版本5.6.这个问题是在升级之后出现的.

我发现,当我将睡觉服务替换为https://www.google.com这样的地址时,我的页面工作得很好.

在之前的一次try 中,我设置了“verify_peer”=>false,并将其作为参数传递给file_get_contents,如下所述:file_get_contents ignoring verify_peer=>false?,但如作者所述;这没什么区别.

我已经询问了我们的一位服务器管理员php.ini文件中是否存在以下行:

  • extension=php_openssl.动态链接库
  • 允许打开

他告诉我,因为我们在Gentoo上,所以在构建时会编译openssl;而且它不是在php中设置的.ini文件.

我还确认了allow_url_fopen正在工作.由于这个问题的专业性,我找不到很多可以帮助的信息.你们中有谁遇到过这样的事情吗?谢谢.

推荐答案

这是一个非常有用的链接,可以找到:

http://php.net/manual/en/migration56.openssl.php

An official document describing the changes made to open ssl in PHP 5.6 From here I learned of one more parameter I should have set to false: "verify_peer_name"=>false

Note:这有very个重大的安全影响.禁用验证可能会允许MITM attacker使用无效证书窃听请求.虽然在当地开发中这样做可能有用,但在生产中应该使用其他方法.

因此,我的工作代码如下所示:

<?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; ?>

Php相关问答推荐

PHP Array to Powershell exec命令Args

在PHP中替换数组中的文本并同时使用其他函数

在WooCommerce Checkout帐单地址字段后插入自定义按钮

为什么调用干预\映像引发错误驱动程序\GD\Driver not found?

如何在函数中定位WooCommerce产品循环

WooCommerce数量减号和加号图标未显示

通过DO LAMP进行身份验证并从邮箱发送邮箱的最简单方式是什么

通过访问单个产品页面更新WooCommerce产品元数据

将数组推送到数组时,数组推送()出现问题

使注册字段UserMeta值对于WooCommerce中的每个用户是唯一的

如何使用MS Graph PHP SDK V2下载文件

在WordPress中从CPT中删除插件

在WooCommerce中只允许高价产品的BACS付款

PHP Match如何准确判断条件?

execute_query 和prepare+execute 有什么区别?

如何在laravel中获得两个时间戳之间的小时和分钟差异

WooCommerce 有关新订单的附加邮箱通知,其中包含具体详细信息

如何获取用户之间的最新消息列表

如何在 WooCommerce 中显示每个自定义选项卡的内容

Laravel 从嵌套数组的第二级获取最后一项