4

タイトルは少し変かもしれませんが、他の方法で説明することはできません。次のコードがあります。

error_reporting (E_ALL ^ E_NOTICE);

require_once("required/config.php");

$mysqli = new mysqli($db_server, $db_username, $db_password, $db_database);
for ($i = 1; $i < 1001; $i++) {
    if ($insertItem = $mysqli->prepare("INSERT INTO testtable (dummyfield) VALUES (?)")) {
        $insertItem->bind_param('s', $value);

        $value      = "Just some data #$i";

        $insertItem->execute();
        $gebruikersId = $mysqli->insert_id;
        $insertItem->close();

        echo $value . "<br />";
    }
}
$mysqli->close();

このコードを実行すると、約 20 ~ 30 秒かかります。それはいいです。2 番目のウィンドウを開くと、Web サイトの他のすべてのページを参照できます。ここでは問題ありません。

ただし、 session_start();を追加すると、error_reporting のすぐ下の他のページは、for ループ / インポートが完了するまで読み込まれません。

何か案は?Google を試しましたが、関連する結果が見つかりませんでした。

4

1 に答える 1

9

1 つのスクリプトがセッションを「使用」している限り、セッション ファイルはロックされます。同じセッションを使用する他のスクリプトは、ロックが解除されるまで待機する必要があります。

これを回避するsession_write_close()には、実行時間の長いスクリプトのできるだけ早い段階で呼び出します。

于 2013-04-11T15:12:05.400 に答える