前提・実現したいこと
file_get_contentで存在しないサイトにアクセスされたときに処理を止めたくないので、エラーハンドリングしたいです。
発生している問題・エラーメッセージ
該当のソースコードで if(!ret) と判定すると以下のエラーとなってしまいました。
file_get_contents(https://xxxxxxxxxxxxxxx.com): failed to open stream: No route to host in /file/Main.php on line 100
該当のソースコード
<?php $url = "https://xxxxxxxxxxxxxxx.com"; $ret = file_get_contents($url); if(!$ret){ echo 'そんなサイトは存在しません'; }else{ echo 'OK'; }
試したこと
ネットを調べると以下のようにignore_errorsをtrueにし、さらに$http_response_header(スーパーグローバル関数?)を使えばできるらしいのですができなくて、ほかに情報がなく困っています。
<?php $url = "https://xxxxxxxxxxxxxxx.com"; $contextOptions = array( 'http' => array( "ignore_errors" => true, ) ); $context = stream_context_create($contextOptions); $http_response_header = array(); $ret = file_get_contents($url, false, $context); if(empty($http_response_header)){ var_dump($http_response_header); echo 'そんなサイトは存在しません'; }else{ echo 'OK'; }
補足情報(FW/ツールのバージョンなど)
PHP 7.2.4 です
$http_response_headerというグローバル関数が公式のドキュメントから見当たらないのですが、、、
phpドキュメント(https://www.php.net/manual-lookup.php?pattern=%24http_response_header&scope=quickref)
訂正 やっぱりありました。すいません
phpドキュメント(https://www.php.net/manual/ja/reserved.variables.httpresponseheader.php)
ドキュメントを見る限りでは$http_response_header自体にはfile_get_contents()などを行った時のHTTPのレスポンスヘッダが配列で入っているようですね
サイトが存在しない時とは、そのサイトのドメインが存在することが前提でそのサイトにないリソースへアクセスした時ということでしょうか?それともドメイン自体が存在しないサイトのリソースへアクセスした時も含まれますか?
回答2件
あなたの回答
tips
プレビュー