1

こんにちは、次のようなコードがあります。

file1.php:

session_start();
$object1 = new object1($_SESSION['variable']);

switch($_GET['variableGet']){
    case 'a': $object2 = new object2(); break;
    case 'b': $object2 = new object2(); break;
}
/*
etc etc
*/

file2.php:

require_once('file1.php');
sleep(5);
$object2->doSomethingForFile2();
echo 'file2 is done!';

file3.php:

require_once('file1.php');
sleep(7);
$object2->doSomethingForFile3();
echo 'file 3 is done!';

AJAX を使用して、file2.php と file3.php を呼び出しています。

私がしたいこと:

file2 と file3 を同時に開始したい。

問題:

file3 は file2 を待っています -> file2 が終了すると (5 秒後)、file3 がスクリプトを開始し、ajax 全体が 7 秒ではなく 12 秒 (sleep(5) + sleep(7)) でロードされます。

自分の観察:

この問題は、file2 と file3 で使用されている *require_once(file1.php)* に依存しています。次のようなコードを実行する場合:

file2.php:

sleep(5);
echo 'file2 is done!';

file3.php:

sleep(7);
echo 'file 3 is done!';

データ全体が 7 秒で読み込まれます (file2.php の 5 秒後、file3.php の 2 秒後)。

4

1 に答える 1

2

セッション データは、同時書き込みを防止するためにロックされます。セッションで一度に実行できるスクリプトは 1 つだけです。したがって、2 番目のスクリプトは最初のスクリプトが終了するまで待機します。session_write_closeセッション変数を使用しなくなった場合は、セッションを閉じるために使用する必要があります。

于 2013-10-05T17:47:36.767 に答える