2010-05-25 37 views
2

我正在運行php5,但只要我打電話給session_start()腳本 掛起,沒有任何反應。是否有其他人遇到這個問題,或者 我做錯了什麼?我打電話給session_start()腳本掛起,沒有任何反應

我在index.php上使用session_start(),由於某些原因,有時候 它會失敗。沒有警告,沒有錯誤,沒有通知,甚至沒有在session_start()之前加上error_reporting(E_ALL)和ini_set('display_errors',TRUE) 之後 什麼,只是簡單的死亡。

+0

它死了還是掛了?我的意思是,頁面會不會永久加載? 你在設置PHPSESSID嗎?會話文件是否在服務器上創建? – nico 2010-05-25 06:58:04

+0

我假設你的腳本應該有輸出,對吧? (「是的,烤麪包機已插入。」)您是否檢查過您的日誌? – 2010-05-25 06:58:07

回答

3

有很多原因是什麼,這裏有幾個:

A.會議文件可能以獨佔方式打開。 無論什麼原因導致文件鎖定沒有正確釋放時,會導致session_start()在將來的任何腳本執行中無限掛起。 解決方法:使用session_set_save_handler()並確保寫入函數使用fopen($ file,'w')而不是fopen($ file,'x')

B.切勿在php.ini文件中使用以下內容(entropie文件 「的/ dev /隨機」),這將導致你的session_start()掛起:

<?php 
ini_set("session.entropy_file", "/dev/random"); 
ini_set("session.entropy_length", "512"); 
?> 

C. 在session_start()需要一個目錄來寫。

您可以獲得以正常用戶帳戶運行的Apache加PHP。那麼Apache當然必須聽80以外的端口(例如8080)。

一定要做好以下幾件事: - 創建一個臨時目錄PREFIX/tmp目錄 - 把php.ini放在PREFIX/lib目錄 - 修改php.ini並session.save_path的設置爲您剛剛創建

目錄

否則,腳本會在session_start()上「掛起」。

+1

第一點是長時間運行php進程的更大問題,例如服務器發送的事件處理程序。花了一段時間才找出問題所在 - mod_security和apparmor是第一個嫌疑犯。 – Olli 2012-04-08 16:58:30