/ / phpスクリプトが最大実行時間より長い(プログレスバー) - php、mysql、実行時間

最大実行時間(進行状況バー)よりも長いPHPスクリプト - php、mysql、実行時間

私は現在小さなプロジェクトに取り組んでいます。データはWebから収集され、システムはこれらの間に何らかの関係を作成します。もちろん最初から完璧ではなかったので、私はすべての接続と私が作った更新されたスクリプトとの関係を更新するスクリプトを作る必要がありました。

基本的にはスクリプトは動作しますが、後から見栄えの良いバックエンドがあるので、それは私が望むものではありません。

スクリプトには約10分かかります。私は別の方法を考えてphpからmax_execution_timeを設定したくなかっただけでした。一度に1000のSQLエントリをロードする代わりに、私は一度に200までそれを削除し、最初のラウンドが終了したときに次の200でそれを繰り返します。したがって私はphp http_requestを使いました。スクリプトの簡略版を紹介します。

require_once "HTTP/Request.php";
$max = $db->query("SELECT COUNT(id) as max FROM db_table");
$lower = $_POST["lower"] ? $_POST["lower"] : 0;
$plus = 250;
$entries = $db->query("SELECT * FROM db_table LIMIT {$lower},{$plus}");

foreach($entries as $entry){
DO SOME STUFF TO UPDATE THE RELATIONS BETWEEN THE DATA
}

$lower = $lower + $plus;

if($lower <= $max) {
$request = new HTTP_Request("path to the script");
$request->setMethod(HTTP_REQUEST_METHOD_POST);
$request->addPostData("lower", $lower);
$result = $request->sendRequest();
}

これです。 私が言ったように、それは "max_execution_time"の影響を受けないように新しいリクエストなので、うまくいきます。しかし、ブラウザはただロードしてロードしてロードしてしばらくすると終了します。しかしもちろんプログレスバーのようなもののために更新されたデータを表示することはできません。

php flush()を使ってたくさんのエントリを見ましたが、私は私の問題を解決するために使用した(私は推測)愚かな方法のために私のために働いていませんでした。 ウェブスペースに何かをインストールする必要があり、最大実行時間を変更したりhttp_requestをインストールしたりすることができない場合、どのようにこれを行いますか?

私が言ったようにそれは後でプログレスバーのように見えるべきです。私はajaxを使用しなければならないと思います、そして単にスクリプトがラウンドごとに行われるラウンドをプッシュし、そしてjavascriptを介してプログレスバーを更新します。

手伝って頂けますか?

回答:

回答№1は0

まだ問題がありますmax_execution_time Webブラウザから要求したページは常にアクティブなページであるため、HTTPRequestが完了するまで完了しません。パラメータlowerを使用して別のページに移動してみてください。

header("Location: myscript.php?lower=$lower");