PHP----------用curl方式請求接口在同一個項目里面的時候不能請求的情況


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。就可以防止這種問題。


免責聲明!

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



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