【发布时间】:2016-02-27 16:26:32
【问题描述】:
我正在开发一个使用 Dropbox SDK 来做一些事情的网页。其中大部分是通过 CLI 发生的,但必须在浏览器中完成一件特定的事情。不过,我偶然发现了一个有趣的问题。
$dbxClient = new dbx\Client($accountToken, 'xxx/' . VERSION);
$folderMetadata = $dbxClient->getMetadataWithChildren("/");
在 CLI 中运行此代码可以正常工作。然而,在浏览器中运行它会给我一个 502。感到困惑的是,我启动了 xdebug 并跟踪问题出现的位置。我发现 Dropbox 的 curl-call 导致了它,所以我写了一个小示例脚本来查看 curl 是否有效。 没有。
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://example.com");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);
curl_close($ch);
echo $output;
在浏览器中运行此代码会立即给出 502。但是,如果我删除 https:// 或将其设为 http:// (或在 CLI 中运行),它可以工作。问题似乎出在 PHP7 + curl + SSL 中。添加curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 不起作用。
我该怎么做才能找出这种情况,为什么会发生这种情况以及如何解决?
系统信息:
- OS X 10.11.2
- nginx 1.8.0,通过自制软件安装
- PHP 7.0.3,通过自制软件安装
- curl 7.43.0,通过自制软件安装
- OpenSSL 1.0.2f,通过自制软件安装
【问题讨论】:
-
502是由什么产生的? php5-fpm? nginx?还是 $output 中的字符串?
-
我的 nginx。对我来说,看起来 php-fpm 崩溃了。
-
更新:我现在可以在我的 iMac 上测试该示例。那里的结果相同:502。不过,它确实适用于我所有的三台 Linux 服务器。