3

file_get_contentsデータベースの情報を取得するために、php 関数を使用して画面に 10.000 ページを一覧表示したいと考えています。

これは約 500 ページまで機能し、その後スクリプトは実行を停止し (ページが読み込まれます)、エラーは表示されません。

<?php

for ($nr=1; $nr<=10000; $nr++){

$url = "http://site.com/u$nr";
$string = file_get_contents($url);

echo '<textarea>'.$string.'</textarea>';

}

?>

@編集

私は自分のコンピューターが Javascript を介して操作できるようにこの情報を取得したいと考えています。PHP を使用して HTML を操作するには多くの作業が必要になると思います。これらのページをデータベースに記録することをお勧めします。

4

4 に答える 4

2

ループ内にtime_limit を設定することをお勧めします。時間制限を設定すると、指定された時間でタイムアウトが「延長」されます。

<?php 
for ($nr=1; $nr<=10000; $nr++){
    $url = "http://site.com/u$nr";
    $string = file_get_contents($url);
    echo '<textarea>'.$string.'</textarea>';

    // extend the time-limit with this amount of time,
    // the amount of time this request is allowed to take
    set_time_limit(5);
}

?>

この方法では、10.000 レコードの「合計」時間制限を計算する必要がなく、 1 つのリクエストが完了するまでに (たとえば) 1 時間かかることはありません。

[更新] OP によって投稿された新しい情報は、JavaScript を使用して入力を処理したいと述べています。したがって、より良い解決策は、jQuery を使用して一度にすべてのページを取得し、情報を処理して結果をデータベースに送信し、Ajax ポストとサーバー側でデータベースに保存することです。

于 2013-02-01T07:55:51.297 に答える
1

エラーログを確認してください。スクリプトがタイムアウトした可能性があります (デフォルトは 30 秒です)。http://php.net/manual/en/function.set-time-limit.phpを使用してより大きなタイムアウトを設定してみてください

set_time_limit(120); // Script may run for 120 seconds before timing out

于 2013-02-01T07:47:04.640 に答える
0

おそらくメモリ/実行時間が不足しています。

phpinfo()適切な設定を確認して確認する必要があります (この種の操作にサーバーを使用する場合は、 よりもmemory_limit高く256M、 30 分よりも長くする必要があります)。max_execution_time

また、必ずエラーをログに記録し、それらを (開発環境で) 表示してください ( display_errors = 1error_reporting(E_ALL)log_errors = 1)。

10000 ページを取得するのはリソースを消費するプロセスです。データベースにいくつかの情報を保存することを検討することをお勧めします。

編集: 前の人が言ったようにset_time_limit()、の「スクリプトごと」オプションはmax_execution_time、サーバーの実行時間を永続的に変更したくない場合に使用します。

于 2013-02-01T07:49:30.623 に答える
0

PHP スクリプトがタイムアウトしています。デフォルトの最大実行時間は 30 秒です。この機能を使用する

set_time_limt

ちなみに、10,000 ページを読み込むにはかなりの時間がかかり (時間 + 帯域幅 + リソース)、動作が遅くなる可能性があります。

于 2013-02-01T07:46:13.843 に答える