2010-08-20 44 views
3

我被要求幫助排查某人的網站。它是用PHP編寫的,使用apache服務器和mysql,並且我從來沒有用過任何這些工具(除了學校的linux可能)。什麼不同的設置影響PHP和/或Apache超時?

我得到了大部分修正的問題(大多數代碼真的是一樣的,無論它是什麼語言),但仍然有一個頁面在處理大文件時超時。我很確定這個問題在某個地方是暫停的,但我不知道所有的php超時會在哪裏。

我在php.ini中調整了max_execution_time,max_input_time,mysql.connect_timeout,default_socket_timeout和realpath_cache_ttl,但它在大約10分鐘後仍然超時。我可以增加哪些其他設置來嘗試修復此問題?

作爲旁註,我知道處理文件時一般不需要10分鐘,但是該網站的這部分內容每週只能由一個人使用一次或兩次,她並不介意提供過程完成如預期!我真的不想重寫別人的錯誤編碼用我不明白的語言,因爲我不明白的一個過程)

編輯:SQL過程完成在後臺,它的只是超時的網頁本身。

+0

在後臺運行該過程。讓它將進度更新寫入文件或數據庫。然後,網頁僅負責啓動該過程(幾乎是瞬間的)。刷新頁面會讀取進度更新(也幾乎是瞬間)。 – 2010-08-20 17:55:30

回答

3

根據Frank Farmer的建議,我在代碼中添加了flush(),它現在可用。絕對是瀏覽器超時,謝謝弗蘭克!

2

如果將其設置爲0,則腳本不應超時,您可以使用set_time_limit()

這將被放置在腳本中,而不是在任何配置等等

編輯:嘗試改變Apache的超時設置。在配置中尋找TimeOut指令(對於apache 2.x和apache 1.3.x應該是相同的),一旦更改重新啓動apache並檢查它。

編輯3: 您是否轉到我提供的鏈接?它列出了默認值,即300秒(5分鐘)。另外,如果設置不在配置文件中,您可以添加它。

根據文檔:

超時指示目前定義的時候,Apache將等待三件事量:

  1. 才能收到GET請求的時間總量。
  2. 從POST或PUT請求接收TCP數據包之間的時間。
  3. 響應中傳輸TCP數據包的ACK之間的時間量。

所以有可能它不涉及,但試試看。

+0

'set_time_limit(10000)'的每個循環中都有一行代碼;'所以我不認爲這是問題所在。該腳本似乎逐行通過a。csv文件並處理它。儘管頁面超時,每個項目都出現在數據庫中,所以我開始認爲它是一個apache超時而不是php超時。 – Rachel 2010-08-20 17:46:20

+3

這是一個很好的機會,這是一個瀏覽器超時。瀏覽器不喜歡沒有接收輸入空閒。你可以通過強制週期性輸出(例如調用'flush()')來解決這個問題,但它是一個混亂。 – 2010-08-20 18:01:54

+0

set_time_limit(10000)在一個循環內?有點奇怪的位置,只需要爲每個腳本設置一次。另外我懷疑這是瀏覽器問題,因爲我更新了我的答案嘗試Apache的TimeOut指令 – 2010-08-20 18:08:42

相關問題