2014-04-18 65 views
1

我的PHP腳本在我的服務器上執行一些程序IIS 7.5
花費大約10分鐘時間來執行,但在瀏覽器中出現錯誤。
如何解決此問題。
如何解決:FastCGI進程超出已配置的請求超時錯誤:在IIS 7.5上

錯誤:

HTTP Error 500.0 - Internal Server Error 
C:\php\php-cgi.exe - The FastCGI process exceeded configured request timeout 

Module FastCgiModule 
Notification ExecuteRequestHandler 
Handler FastCGI 
Error Code 0x80070102 

php.ini設置:

fastcgi.impersonate = 1 
fastcgi.logging = 0 
cgi.fix_pathinfo=1 
cgi.force_redirect = 0 

max_execution_time = 0 
upload_max_filesize = 20M 
memory_limit = 128M 
post_max_size = 30M 

C:\ WINDOWS \ SYSTEM32 \ INETSRV \設置\ 的applicationHost.config用於快速文件設置-cgi

<fastCgi> 
<application 
fullPath="C:\php\php-cgi.exe" activityTimeout = "3600" requestTimeout = "300" /> 
</fastCgi> 
+0

那麼你是如何解決這個問題?你同時增加(activityTimeout和將requestTimeout)或只是其中之一? – utdev

回答

2

這是對正在發生的事情的快速解釋。當您使用PHP的CGI/FCGI配置時。 Web服務器(在這種情況下是IIS)將需要php處理的請求路由到PHP進程(與Web服務器分開運行)。

一般來說,爲防止連接打開並等待(如果php進程發生崩潰),Web服務器將只等待PHP進程返回結果(通常爲30-60秒)的一段時間。

在您的配置你有這樣的:

requestTimeout = "300" 

300秒= 5分鐘。 IIS將取消​​請求,因爲您的請求需要10分鐘才能完成。簡單的修復,增加超過600或更大的超時。

現在,使用http請求運行腳本10分鐘不是一個好的設計模式。通常,http對於短期請求效果最好。原因是超時可能存在於進程的任何部分(服務器,代理或客戶端),並且腳本可能意外中斷。

所以,當你有一個像這樣長時間運行的web應用程序時,運行它的最好方法是通過控制檯或作業隊列。

+0

我改變了requestTimeout =「1000」,腳本花了5.5分鐘運行,但是同樣的錯誤,我在運行之前重啓了服務器,看起來如果我的用戶希望更大的文件被我的應用程序處理,如果我使用控制檯或作業que,但我不知道如何做到這一點 – BioDeveloper

+0

你有任何錯誤記錄嗎?你之前沒有提到文件上傳,在w上可能還有別的東西ork以及。 – datasage

+0

它需要處理文本文件。我通過php調用perl腳本並運行perl以將文件發送給用戶。文件上傳正常(我得到那些在我的根文件夾中)這意味着文件大小或類型沒有錯誤。 – BioDeveloper

3

還有一個設置,我發現從這個source,幫助我與我有同樣的問題。 複製和粘貼:

打開服務器管理器

在服務器級(不是默認網站)

  • 雙擊FastCGI設置
  • 開放PHP.EXE上市有
  • 監視器更改文件php.ini
  • 活動超時默認爲60s - 更改爲600s或其他
0

這可以通過調整fast-cgi配置來解決。 Goto 「C:\ Windows \ System32 \ inetsrv \」並編輯「fcgiext。INI」文件

[PHP] 
ExePath=C:\xampp\php\php-cgi.exe 
MonitorChangesTo=C:\xampp\php\php.ini 
ActivityTimeout=3600 
IdleTimeout=3600 
RequestTimeout=3600 

確保放置ActivityTimeout,的IdleTimeout [PHP]部分內&將requestTimeout如上圖所示。