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
再次測試發送請求
phpstudy nginx下curl請求本地其他項目