ホームページ  >  記事  >  バックエンド開発  >  ストリームを開けなかった場合の完璧な解決策: HTTP リクエストが失敗しました!_PHP チュートリアル

ストリームを開けなかった場合の完璧な解決策: HTTP リクエストが失敗しました!_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 17:39:393919ブラウズ

php5 に付属の file_get_contents メソッドを使用してリモート ファイルを取得すると、警告メッセージ file_get_contents(): failed to open stream: HTTP request failed! が表示されることがあります。

Google や Baidu にはそのような問題がたくさんあります。解決策は php.ini を変更し、allow_url_fopen を有効にして、allow_url_fopen = On に変更することです

これで一部の人の問題が解決できると言う人もいます。php.ini には、allow_url_fopen =on (URL 経由でリモート ファイルを開くことができることを示す)、user_agent="PHP" (ネットワークにアクセスするスクリプトを示す、デフォルトでは、その前に「;」があります(これを削除して)サーバーを再起動します。

しかし、一部の人にはまだこの警告メッセージが表示されます。完璧な解決策を達成するには、php.ini で user_agent を設定する必要があります。PHP のデフォルトの user_agent を Mozilla/4.0 に変更します。 ; MSIE 6.0; Windows NT 5.0) をシミュレートします

user_agent=”Mozilla/4.0 (互換性; MSIE 6.0; Windows NT 5.0)”

仕事でこの問題に遭遇し、完璧に解決したので、みんなと共有します。
chemblink の構造式をバッチで取得したところ、ループ後に一部の画像が表示できないことがわかりましたが、リモート ファイルは存在していました。
リモート ファイルを取得すると、「Warning: readfile(http://www.BkJia.com/logo.gif) [function.readfile]: failed to open stream: HTTP request failed!」のような警告メッセージが表示されます。

ob_start(); readfile("http://www.BkJia.com/logo.gif");

$img = ob_get_contents(); ob_end_clean();


このように、運用中に時々上記のエラーが発生するようになり、file_get_contentsなど他の関数も変更しましたが、ネットで調べたところ、CURLメソッドを使用するとエラーが発生しないことが分かりました。

$url = "http://www.BkJia.com/logo.gif";

$ch =curl_init();
curl_setopt ($ch, CURLOPT_URL, $url);

curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT,10);

$img =curl_exec($ch);




http://www.bkjia.com/PHPjc/486273.html

www.bkjia.com

tru​​e

技術記事 php5 に付属の file_get_contents メソッドを使用してリモート ファイルを取得すると、警告メッセージ file_get_contents(): failed to open stream: HTTP request failed! が表示されることがあります。 ...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。