1、環境是wnmp
2、NGINX中,看PHP文件塊fastcig-pass的設置值(127.0.0.1:9000)。設置都是以keepalive方式請求,接收到PHP文件時,交於后端過程PHPCGI解析處理(127.0.0.1:9000),等待響應。
而在本地文件以CURL請求本地環境中PHP文件時,之前的PHP還在等待CURL后的結果,這時9000端口已經被占用。導致CURL一直在處於等待狀態。不設置timeout超時,程序就會卡死。結果都是false
3、默認時啟動phpcgi是
D:\php\php-cgi.exe -b 127.0.0.1:9000 -c D:\phpfind\phpa\php.ini
D:\php\php-cgi.exe cgi.exe的路徑--根據自己的情況填寫
D:\phpfind\phpa\php.ini 要加載的配置文件的路徑--根據自己的情況填寫
先看NGINX配置
location ~ \.php(.*)$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_split_path_info ^((?U).+\.php)(/?.+)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
include fastcgi_params;
}
NGINX中,看PHP文件塊fastcig-pass的設置值(127.0.0.1:9000)。設置都是以keepalive方式請求,接收到PHP文件時,交於后端過程PHPCGI解析處理(127.0.0.1:9000),等待響應。
而在本地文件以CURL請求本地環境中PHP文件時,之前的PHP還在等待CURL后的結果,這時9000端口已經被占用。導致CURL一直在處於等待狀態。不設置timeout超時,程序就會卡死。結果都是false
1、解決方案:
新開啟一個phpcgi進程設置不同端口:
例D:\php\php-cgi.exe -b 127.0.0.1:9001 -c D:\phpfind\phpa\php.ini
D:\php\php-cgi.exe cgi.exe的路徑--根據自己的情況填寫
D:\phpfind\phpa\php.ini 要加載的配置文件的路徑--根據自己的情況填寫
在需要被CURL的端口或域名設置中設置。
location ~ \.php(.*)$ {
fastcgi_pass 127.0.0.1:9001;
fastcgi_index index.php;
fastcgi_split_path_info ^((?U).+\.php)(/?.+)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
include fastcgi_params;
}
這樣就可以請求了。但是不能請求同一個域下的文件而且cmd窗口要一直開啟以保證9001端口一直有效。
2、解決方案二:如果嫌這種方式麻煩,那唯一的辦法只能使用apache。就可以防止這種問題。