2011-07-02 44 views
3

誰かのためのウェブサイトを固定して、私は次のような問題に遭遇しました:いくつかのデータを処理するためにPHPセッションファイルのデッドロック

呼び出さfile.phpがどのinclude("config.php")を、含まれていながら、それは、exec("/usr/bin/php /path/to/file.php input.dat")を呼び出し、これにはsession_start()への呼び出しが含まれています。

発生する問題は、flock("/tmp/sess_XXXXXX")を待っているデッドロックです。親スクリプトがセッションファイルをロックすると、execのスクリプトは同じセッションを続行し、そのファイルを再びロックしようとしますが、デッドロックで待機します。

私はexec「edスクリプトの先頭に以下を入れてみましたが、無駄にしました:

session_save_path("/tmp/alt_session"); 
session_id("NOTHING"); 

はObivously PHPスクリプト内からexec("php ...")を呼び出すことについて明らかに不合理なものがありますが、それは別の日の議論であり、ここで変更できるものではありません。また、execで実行されるファイルを自由に変更することができますが、config.phpを変更すると、回避したいと思ういくつかの頭痛が発生します。

その他のオプション、または何か重要なものがありませんか?

+1

あなたは親スクリプトで開かれたセッションが必要ですか?そうでなければ 'exec'で子を呼び出す前に' session_write_close() 'を実行することができます – zerkms

答えて