2016-02-27 82 views
3

我正在开发一个使用Dropbox SDK做一些事情的网页。大多数情况是通过CLI发生的,但必须在浏览器中完成一件特别的事情。不过,我偶然发现了一个有趣的问题。PHP7 + curl(SSL/TLS)给502 502错误的网关

$dbxClient = new dbx\Client($accountToken, 'xxx/' . VERSION); 
$folderMetadata = $dbxClient->getMetadataWithChildren("/"); 

运行此代码在CLI中工作得很好。然而,在浏览器中运行它却给了我一个502.令人困惑的是,我启动了xdebug并追踪了问题出现的位置。我发现,Dropbox的卷曲调用导致了它,所以我写了一个小示例脚本来查看卷曲是否可用。 它没有。

<?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安装,通过自制
  • 卷曲7.43.0安装,通过自制软件安装
  • OpenSSL 1.0.2f,通过自制软件安装
+0

502生成什么? PHP5-FPM? nginx的?或$输出内的字符串? – hanshenrik

+0

我的nginx。对我来说,它看起来像php-fpm崩溃。 –

+0

更新:我现在可以在我的iMac上测试该示例。同样的结果在那里:502.但它在我所有的三台Linux服务器上都能正常工作。 –

回答

7

Sooo ...经过很多调查,我终于找到了解决办法。希望这会对未来的Google员工有所帮助。

第1步:调查发生了什么。

因为我使用自制软件的php70软件包,所以在OS X上的目录与Linux有点不同。我需要找到php-fpm.conf。通过检查由自制软件创建的homebrew.*.plist文件,我发现它在/usr/local/etc/php/7.0/php-fpm.conf

之后,我找到了幸运地在plist中记下的二进制文件。对我来说这是在/usr/local/opt/php70/sbin/php-fpm

我修改配置文件写在/var/log/php-fpm.log日志文件:

log_level = notice 
error_log = /var/log/php-fpm.log 

我给/var/log/php-fpm.log chmod为0777(因为我懒),开始再次PHP-FPM(launchctl load -w /path/to/php-fpm.plist)和tail'ed新的日志文件:tail -f /var/log/php-fpm.log

这是我发现了什么(什么的Google可能正在寻找):

WARNING: [pool www] child 28580 exited on signal 11 (SIGSEGV) after 1.726773 seconds from start 

小号o分段错误正在发生。


第2步:修复SIGSEGV

使用新发现的信息我google'd什么可能是分段错误的原因。我找不到上帮助,但在后来的一个网页,我发现这个链接的前几页东西:https://stackoverflow.com/a/34951784/1486930

什么它说的是:

I experienced same problem early and fixed it with running php-fpm as root. 

You just killed me. Running php-fpm as root just works well! Thanks!! 

所以这就是我所做的。我再次停止php-fpm并以root身份手动运行它:

sudo /usr/local/opt/php70/sbin/php-fpm --fpm-config /usr/local/etc/php/7.0/php-fpm.conf 

然后看,它的工作原理!我不知道为什么会出现这种情况,但确实以root身份“修复”它。

我希望能有所帮助。

+0

Runing php-fpm作为root也适用于我,但是我发现问题来自'--with-imap'选项。我卸载了php,并重新安装它没有imap,所有的作品都很好。我不需要imap,但对于需要它的人来说,这是一个问题。这个问题在这里报道https://github.com/Homebrew/homebrew-php/issues/2390 – Seb

+1

男人!自从早上我一直在努力解决这个问题 - 我想给你买一瓶啤酒! – shyam