加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP7 curl(SSL / TLS)提供502 Bad Gateway

发布时间:2020-12-13 21:55:28 所属栏目:PHP教程 来源:网络整理
导读:我正在开发一个使用Dropbox SDK做一些事情的网页.大多数情况都是通过CLI发生的,但必须在浏览器中完成一件特别的事情.不过,我偶然发现了一个有趣的问题. $dbxClient = new dbxClient($accountToken,'xxx/' . VERSION);$folderMetadata = $dbxClient-getMetad
我正在开发一个使用Dropbox SDK做一些事情的网页.大多数情况都是通过CLI发生的,但必须在浏览器中完成一件特别的事情.不过,我偶然发现了一个有趣的问题.

$dbxClient = new dbxClient($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,通过自制软件安装

解决方法

Sooo ……经过大量调查后,我终于找到了解决方案.希望这将有助于未来的Google员工.

第1步:调查发生的事情.

由于我使用的是自制软件的php70-package,因此OS X上的目录与Linux有所不同.我需要找到php-fpm.conf.通过检查自制软件创建的自制文件.*.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 -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

使用新发现的信息我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身份运行它“修复”它.

我希望能有所帮助.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读