PHP7 + curl(SSL / TLS)提供502错误网关

本杰明·施密特(Benjamin Schmidt)

我正在开发一个使用Dropbox SDK进行某些操作的网页。大多数情况是通过CLI发生的,但是必须在浏览器中完成一件事。我偶然发现了一个有趣的问题。

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

运行此代码在CLI中工作正常。但是,在浏览器中运行它却得到了502。莫名其妙,我启动了xdebug并跟踪了出现问题的位置。我发现,Dropbox的curl调用是造成它的原因,所以我写了一个小示例脚本来查看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
本杰明·施密特(Benjamin Schmidt)

如此...经过大量调查,我终于找到了解决方案。希望这对将来的Google员工有所帮助。

步骤1:调查正在发生的事情。

由于我使用的是自制软件的php70-package,因此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.logchmod 0777(因为我很懒),再次启动了php-fpm(launchctl load -w /path/to/php-fpm.plist)并添加了新的日志文件:tail -f /var/log/php-fpm.log

这是我发现的(以及Google员工可能会寻找的):

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

因此发生了分段错误。


步骤2:修复SIGSEGV

使用新发现的信息,我用谷歌搜索了细分错误的原因。我在最初的几页上找不到任何有帮助的内容,但在随后的一页中,我找到了此链接: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

瞧,行得通!我不知道为什么会这样,但是确实以根“修复”它的方式运行它。

我希望能有所帮助。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

502错误的网关nginx php7 fpm

来自分类Dev

PHP7 cURL 和 SOAP 请求 SSL 失败

来自分类Dev

PayPal TLS测试URL-PHP curl SSL协议错误

来自分类Dev

Codeigniter php7错误

来自分类Dev

未启用PHP7 CURL

来自分类Dev

PHP CURL很少SSL连接错误

来自分类Dev

安装php curl后出现504网关超时/ 502网关错误-服务器Nginx

来自分类Dev

PHP curl错误:“与...有关的未知SSL协议错误”

来自分类Dev

在自定义构建的php7上启用Curl

来自分类Dev

使用Curl Php SSL身份验证的400错误请求

来自分类Dev

curl SSL证书错误

来自分类Dev

curl SSL认证错误

来自分类Dev

curl'SSL连接错误'

来自分类Dev

php7中的错误和异常处理

来自分类Dev

Ubuntu 16上php7的Apache2错误

来自分类Dev

Phpmyadmin Export Dbase在PHP7 Nginx上获取错误

来自分类Dev

语法错误,运行 php7 的文件意外结束

来自分类Dev

php curl set ssl版本

来自分类Dev

带PHP CURL的SSL证书

来自分类Dev

curl:(35)SSL连接错误

来自分类Dev

utf8_encode()和curl_init()在PHP7上不起作用

来自分类Dev

调用未定义的函数curl_init(),即使它已在php7中启用

来自分类Dev

如何在php7 +中使用CURL发送相同名称的多个文件

来自分类Dev

utf8_encode()和curl_init()在PHP7上不起作用

来自分类Dev

通过PHP cURL与login.microsoftonline.com进行身份验证(SSL连接错误)

来自分类Dev

Nginx和PHP-FPM 502网关错误

来自分类Dev

PHP-FPM-Nginx-phpMyAdmin-502错误网关

来自分类Dev

Nginx和PHP-FPM 502网关错误

来自分类Dev

SSL中的PHP cURL基本授权