1

私は現在、いくつかのデータが 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() を使用して多くのエントリを見ましたが、問題を解決するために使用した (おそらく) ばかげた方法のため、うまくいきませんでした。Web スペースに何かをインストールする必要があり、最大実行時間を変更したり、http_request をインストールしたりすることができない場合、どのようにこれを行いますか?

私が言ったように、後でプログレスバーのように見えるはずです。私は ajax を使用する必要があると思います。スクリプトをラウンドごとにプッシュし、javascript を介してプログレス バーを更新するだけです。

手伝って頂けますか?

4

1 に答える 1

0

Webブラウザーから要求したページは常にアクティブであり、HTTPRequestsが終了するまで終了しないため、max_execution_timeでまだ問題が発生しています。パラメータを低くして、ページを別のページに配置してみてください。

header("Location: myscript.php?lower=$lower");
于 2013-01-26T15:08:22.437 に答える