2014-06-19 23 views
2

什麼是使用PHP的auto_append_file自動添加的風險:自動將mysql_close&session_write_close附加到所有PHP腳本的風險是什麼?

session_write_close();
mysql_close();

要全部文件嗎?

在處理客戶的應用程序時,我發現會話和數據庫連接由於某種原因而處於打開狀態。作爲一個快速解決方案,我們通過auto_append_file添加了上面的代碼。

這立即解決了處於發送應答狀態的Apache線程問題,並大大減少了服務器負載。

當客戶缺乏足夠的資源或時間來查找有問題的代碼並修復問題時,我們正在考慮更頻繁地使用此技術。

編輯

的問題是不是最好的做法。我完全理解這應該不是必需的,但我可以重複地顯示這個代碼添加減少掛起的Apache進程。問題是關於此類功能會導致的風險還是負面影響。

+0

問題不在於什麼是風險,但有什麼意義?你100%肯定這是你所需要的嗎?我不是。無論如何,MySQL連接都會自動關閉。會話只是不寫/關-D,如果你頭重定向... – marekful

+0

我不是一個PHP程序員,所以我不知道什麼是必需的。我們處理運營方面。但是,我知道只要我們添加了這個代碼,Apache就會停留在發送答覆中。 – jeffatrackaid

+0

這不應該解決*任何*。檢查/更新您的配置,嘗試找出真正導致問題的原因並修復*。*。 –

回答

0

正如在註釋中提到的那樣,驅動程序應該關閉連接,並且會話在腳本執行結束時被寫入並關閉。

此外,您應該使用mysqli或PDO,而不是mysql! (MySQL extension is deprecated as of PHP 5.5.0

無論如何,當你想要做那種事(右在腳本結束執行的東西)一個更好的想法是註冊一個關機功能做到這一點(DRY):

http://www.php.net//manual/en/function.register-shutdown-function.php

(更好的一個是跟蹤你使用的任何資源,並在你知道你的程序不再需要的地方釋放它們,這樣更有效率,並且毫無疑問他們發生了什麼事。)

0

the documentationsession_write_close()

會話數據通常存儲在您的腳本結束後,無需調用session_write_close(),但作爲會話數據被鎖定,以防止併發只寫一個腳本可以在任意會話操作時間。

而且從the documentationmysql_close()

使用mysql_close()通常是不必要的,因爲非持久打開鏈接會自動在腳本執行結束時關閉。另見freeing resources。假設

另外值得一從mysql_close()指出,不使用鏈路標識符...

如果沒有指定鏈接標識符時,最後一個環節被mysql_connect打開()。如果未找到或建立連接,則會生成E_WARNING級別錯誤。


保持所有上述的考慮:

  1. 調用上述功能不應該是必要當腳本終止,系統就會自動處理。
  2. 在腳本中調用mysql_close()只會a)關閉最近打開的鏈接或b)因爲沒有打開鏈接而發出警告。
  3. 如果您需要腳本儘快放棄資源,使用auto_append_file不會幫助您,因爲第1點。您需要自行修改腳本。
  4. 數據庫連接掛起是一個掛起或長時間運行的腳本的標誌。如果腳本終止,那麼數據庫鏈接也應該有。 (同樣,點#1)
相關問題