2016-02-27 109 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