誰かのためのウェブサイトを固定して、私は次のような問題に遭遇しました:いくつかのデータを処理するために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
を変更すると、回避したいと思ういくつかの頭痛が発生します。
その他のオプション、または何か重要なものがありませんか?
あなたは親スクリプトで開かれたセッションが必要ですか?そうでなければ 'exec'で子を呼び出す前に' session_write_close() 'を実行することができます – zerkms