phpstudy nginx下curl請求本地其他項目


curl 請求的時候 如果用post請求,傳遞參數為 數組的時候 header 頭 會被設置為  multipart/form-data  如果是字符串 形式 header 頭會被設置為application/x-www-urlencode

在使用數組傳值時,php://input是接收不到數據的​

今天項目中有個問題出現 ,a網站調用b網站 b網站調用遠程c網站。在curl返回值中一直出現 超時現象 ,curl 超時有兩種

一個是連接超時時間,另一個是數據傳輸的最大允許時間。

連接超時時間用 --connect-timeout 參數來指定,數據傳輸的最大允許時間用 

連接超時的話,出錯提示形如:

curl: (28) connect() timed out!

數據傳輸的最大允許時間超時的話,出錯提示形如:

curl: (28) Operation timed out after 2000 milliseconds with 0 bytes received

我今天就是出現的第二種錯誤 原因是 a和b網站都是配置在本地的,我本地是phpstudy 用的是Nginx。​

fastcig-pass的設置值(127.0.0.1:9000)。

設置都是以keepalive方式請求,接收到PHP文件時,交於后端過程PHPCGI解析處理(127.0.0.1:9000),等待響應。

而在本地文件以CURL請求本地環境中PHP文件時,之前的PHP還在等待CURL后的結果,這時9000端口已經被占用。導致CURL一直在處於等待狀態。設置了超時時間

curl_setop($ch,CURLOPT_TIMEOUT,20),過了超時時間 就返回 curl: (28) Operation timed out after 2000 milliseconds with 0 bytes received

我的​解決方案

把b網站的server fastcgi 端口改為了9003

打開cmd 

php-cgi.exe -b 127.0.0.1:9003 -c php.ini 運行這個命令 但是cmd 命令窗口不能關閉。

 

以下摘自網絡 

上面用cmd命令行窗口是不是很麻煩,還不能關閉窗口,稍微不注意就悲劇了

可以用下面的一個小工具:RunHiddenConsole

首先你需要下載一個小文件RunHiddenConsole 然后復制到nginx目錄,新建兩個bat批處理文件,start_nginx.bat和stop_nginx.bat

注意:RunHiddenConsole.exe  一定要和兩個批處理文件在同一級目錄下 ,否則nginx啟動不了

具體兩個文件怎么寫附件里已經寫好了,直接下載就可以了

 

第一步:

將vhost.conf中的一個項目的fastcgi_pass改成9001

location ~ \.php(.*)$ {
            fastcgi_pass   127.0.0.1:9001;
}

  

cmd運行

D:\Program Files (x86)\php\php-7.0.12-nts>php-cgi.exe -b 127.0.0.1:9001 -c php.ini

 

再次測試發送請求


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM