1

私はそのようなphpスクリプトを持っています:

include_once('simple_html_dom.php');
foreach ($csvarray as $product){
   $url = $product[31];
   $html = file_get_html($url);
   ...
}

1 つの URL にリダイレクトの問題があるため、20 回以上リダイレクトされます。したがって、次の警告が表示されます。

警告: file_get_contents(http:/...) [function.file-get-contents]: ストリームを開くことができませんでした: リダイレクトの制限に達しました。中止しています ... 行 ...

残念ながら、私の csvarray の他の URL は処理されません。これは、スクリプトがこの URL の後でリダイレクトの問題で停止するためです。

この警告を無視して次の URL に進むにはどうすればよいですか?

ご協力ありがとうございました!

4

3 に答える 3

2

残念ながら、私の csvarray の他の URL は処理されません。これは、スクリプトがこの URL の後でリダイレクトの問題で停止するためです。

file_get_contents() redirection limit reachedエラーのため、スクリプトは停止しません。file_get_contents()これは致命的ではないE_WARNINGエラーであり、script を停止しません

私の推測では、最大実行時間の制限またはその他のエラーが原因で、スクリプトが停止したと思われます。ini_set('display_errors', true);あなたのerror_reporting(-1);呼び出しをファイルの先頭に置きます。


この警告を無視して次の URL に進むにはどうすればよいですか?

1. 最も簡単で初心者向けの解決策は、@プレフィックス付きのエラーを無視することです。

$html = @file_get_contents('http://bit.ly/6wgJO');

file_get_contents()2. 3 番目のパラメーター$context( context options および parameters )を使用して、最大リダイレクト数を増減できます。

$context = stream_context_create(['http' => ['max_redirects' => 50]]);
$html = @file_get_contents('http://bit.ly/6wgJO', false, $context);

3. エラーを非表示にするその他の解決策はignore_errors、コンテキスト オプションにあります。

$context = stream_context_create(['http' => ['max_redirects' => 0, 'ignore_errors' => true]]);
$html = file_get_contents('http://bit.ly/6wgJO', false, $context);

4. cURLを使用します。

  • cURL で魔法をかけることができます。
  • リダイレクトに従う場合は、オプションCURLOPT_FOLLOWLOCATIONtrueorに設定します。false
  • CURLOPT_MAXREDIRS従う最大リダイレクト数のオプションを設定することもできます.
  • CURLOPT_TIMEOUTcURL 関数の実行を許可する最大秒数のオプションを設定します。

その他のオプションはこちらをご覧ください。

于 2013-08-16T13:41:04.317 に答える
-1

@プレフィックスを付けて関数を実行します。

$html = @file_get_html($url);

問題を解決する必要があります。

と呼ばれるcURLパラメータを使用および設定できます。CURLOPT_FOLLOWLOCATIONTRUE

于 2013-08-16T11:55:24.623 に答える
-3

これを行う方法はいくつかありますが、例外をキャッチしようとする方法があります

try {
$html = file_get_html($url);
}catch(Exception $e){
//Do what you want to do with the code
}

もう 1 つの方法は、file_get_html の前に @ を使用して警告を単純に抑制することです。

$html = @file_get_html($url);

詳細を知りたい場合は、このエラーを処理するより良い方法もありますが、それらは最も簡単なものです。

于 2013-08-16T11:56:52.620 に答える