PHP7 curl(SSL / TLS)提供502 Bad Gateway
我正在开发一个使用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 解决方法
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身份运行它“修复”它. 我希望能有所帮助. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |