【问题标题】:file_get_contents(https://url) fails [closed]file_get_contents(https://url)失败[关闭]
【发布时间】:2014-06-25 16:15:37
【问题描述】:

在我在 Lighttpd 上运行 PHP 5.5 的 Ubuntu 12.04 服务器上,我有

  • allow_url_fopen 开启
  • allow_url_include 开启
  • OpenSSL 支持已启用
  • OpenSSL 库/标头版本 1.0.1 2012 年 3 月 14 日

我不确定这是否正确,但我还在我的 php.ini 文件中输入了 extension=openssl.so 并由服务器重新启动。我在日志中没有看到任何令人不快的错误消息。

尽管如此,我仍然无法打开流:连接超时。没有 https 的相同 URL 可以正常工作。我错过了什么

【问题讨论】:

  • 如果这是一个 php 配置问题,你只会得到 no-such-function 或没有可用的处理程序。连接超时更多地指向网络问题,例如防火墙阻止端口 443 上的传出请求。
  • @Marc B 如果您在回答中提到网络问题,我会接受 :-)
  • 根据您在下面的回答,我投票决定关闭一个无法重现的问题(假设您修复了亚洲服务器)。

标签: php ssl file-get-contents


【解决方案1】:

有几种可能性,但如果您只是尝试从运行代码的服务器的命令行中curl HTTPS URL,您将能够找到更多关于原因的信息。

curl -v https://url

常见的问题是 url 的 https 证书无效,或者传出的 https 连接在您的服务器上被阻止。

【讨论】:

  • 感谢您的提示。我试过了。 curl 报告:“即将...”,然后尝试 IP 地址 等待一段时间,然后报告“无法连接到该主机”,curl: (7)。没有打开 SSL 和端口 443 的 url 没有问题 - 我知道。
  • 我应该提到我正在运行 Ubuntu 的 UFW,它已配置为仅允许少数传入端口。但是,我在 ufw status verbose 中看到的默认值明确指出 Default:deny(incoming) allow(outgoing) 所以在 443 上出去不是问题。
【解决方案2】:

正如上面有人所说,这是一个网络问题。实际上,当我说 http://exmaple.com 有效而 https://example.com 无效时,我错了。我在全球不同地点运行四台服务器,分别称为 A、B、C 和 D——两台在美国,一台在欧洲,一台在亚洲。我试图访问的 URL 是针对美国的另一台服务器的。在发布了这个问题并查看了各种 cmets 后,我进一步探索了一些问题,发现我的 file_get_contents 调用在亚洲服务器上失败了。 TraceRoute 显示亚洲服务器根本无法找到我想要访问的服务器。正如这里有人所说 - 这是一个网络问题。我发布了这个答案,所以任何遇到这个线程以寻求类似问题的解决方案的人都会意识到这很可能是问题而不是 PHP 配置问题。

【讨论】:

    猜你喜欢
    • 2015-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-11
    • 2011-02-18
    • 2015-09-14
    相关资源
    最近更新 更多