0

私はphpでいくつかの重い画像操作を行っています.ユーザーに物事がどのように進んでいるかを示したいと思います. だから私はこのようなことをやってみました:

for($i = 0; $i < $rowCount; $i++) {
     session_start();
     $_SESSION['progress'] = $i/ $rowCount;
     session_write_close();

     processLine($i);
}

そして、基本的に $_SESSION['progress'] の値を返す別の php ファイルへの AJAX 呼び出しを使用しています。問題は、設定されていないことです。これは、ファイルごとに複数回セッションを開始してはならないためですか? セッションを開いて各行間で閉じないと、SESSION 変数がロックされ、画像操作全体が完了するまでポーリング ファイルが処理されません。

セッションを使用してこれを機能させる方法はありますか? 進行状況をデータベースまたはファイルに保存すればうまくいくと思いますが、それは遅いので、ユーザーを識別するために少し作業を行う必要があります (ips またはセッション ID を使用)。セッションを使用すると、これらの処理が行われます。

4

2 に答える 2

1

これは、php がセッション ファイルをロックするためです。同じセッションをまだ使用している最初のプロセスはファイルをロックし、ajax 呼び出しは同じセッション ID を使用するため、同じセッション ファイルにアクセスしようとしますが、最初のプロセスが終了するまで php によってロックされているためアクセスできません。

これがあなたの質問に対する答えです。修正方法を知りたい場合は、よくわかりません。考えなければなりません。

于 2010-11-29T01:15:53.550 に答える
0

正直なところ、session_start();関数を使用する各 PHP スクリプトの一番上に、その関数のみを配置する必要があります。他のすべての session_start および他のすべてのセッション関数を削除しますsession_write_close();

必須ではないため、セッションを閉じたり、他のものを使用したりしないでください。値が返されない場合は、ブラウザー内の JavaScript コンソールを再確認して、返された PHP エラーがないか、ファイルのディレクトリに error_log という名前のファイルがないかを確認してください。

そうでなければ、すべてが期待どおりに機能するはずです。私は過去に同様のタイプのことをしましたが、うまくいきました。これが問題のデバッグに役立つことを願っています。

于 2010-11-29T01:10:31.980 に答える