私はこのようなPHPコードを書きました
$site="http://www.google.com";
$content = file_get_content($site);
echo $content;
$site
から "http://"を削除すると、次のような警告が表示されます。
警告:file_get_contents(www.google.com)[function.file-get-contents]:ストリームを開けませんでした:
try
とcatch
を試しましたが、うまくいきませんでした。
ステップ1:戻りコードを確認します。if($content === FALSE) { // handle error here... }
ステップ2:file_get_contents()への呼び出しの前に エラー制御演算子 (つまり@
)を入れることで警告を抑制します :$content = @file_get_contents($site);
エラーハンドラを設定 を 無名関数 として Exception を呼び出し、その例外に対してtry/catchを使用することもできます。
set_error_handler(
function ($severity, $message, $file, $line) {
throw new ErrorException($message, $severity, $severity, $file, $line);
}
);
try {
file_get_contents('www.google.com');
}
catch (Exception $e) {
echo $e->getMessage();
}
restore_error_handler();
ちょっとしたエラーを捕らえるにはたくさんのコードのように思えますが、もしあなたがあなたのアプリケーション全体で例外を使っているのなら、(例えば含まれている設定ファイルで)一度だけこれをする必要があるでしょう。全体のエラーをすべて例外に変換してください。
これを行う私のお気に入りの方法はかなり簡単です:
if (!$data = file_get_contents("http://www.google.com")) {
$error = error_get_last();
echo "HTTP request failed. Error was: " . $error['message'];
} else {
echo "Everything went better than expected";
}
私は上記の@enobrevからのtry/catch
を試した後にこれを見つけました、しかしこれはより短い(そしてIMO、もっと読みやすい)コードを可能にします。最後のエラーのテキストを取得するには単にerror_get_last
を使用します。失敗した場合はfile_get_contents
はfalseを返すので、単純な "if"でそれを検出できます。
@を前に付けることができます:$content = @file_get_contents($site);
これは警告を抑制します - 控えめに使用してください。。 エラー制御演算子 を参照してください。
編集:あなたが「http://」を削除するとき、あなたはもうウェブページを探していません、しかしあなたのディスク上の「www.google .....」と呼ばれるファイル
1つの方法は、エラーを抑制し、後でキャッチできる例外をスローすることです。コード内でfile_get_contents()を複数回呼び出す場合は、これらすべてを手動で抑制して処理する必要がないため、特に便利です。代わりに、単一のtry/catchブロックでこの関数を複数回呼び出すことができます。
// Returns the contents of a file
function file_contents($path) {
$str = @file_get_contents($path);
if ($str === FALSE) {
throw new Exception("Cannot access '$path' to read contents.");
} else {
return $str;
}
}
// Example
try {
file_contents("a");
file_contents("b");
file_contents("c");
} catch (Exception $e) {
// Deal with it.
echo "Error: " , $e->getMessage();
}
function custom_file_get_contents($url) {
return file_get_contents(
$url,
false,
stream_context_create(
array(
'http' => array(
'ignore_errors' => true
)
)
)
);
}
$content=FALSE;
if($content=custom_file_get_contents($url)) {
//play with the result
} else {
//handle the error
}
これが私のやり方です…try-catchブロックの必要はありません...最善の解決策は常に最も簡単です...お楽しみください!
$content = @file_get_contents("http://www.google.com");
if (strpos($http_response_header[0], "200")) {
echo "SUCCESS";
} else {
echo "FAILED";
}
これを私がどのように処理するのかです:
$this->response_body = @file_get_contents($this->url, false, $context);
if ($this->response_body === false) {
$error = error_get_last();
$error = explode(': ', $error['message']);
$error = trim($error[2]) . PHP_EOL;
fprintf(STDERR, 'Error: '. $error);
die();
}
最良のことはあなた自身のエラーと例外ハンドラを設定することです。それはファイルにそれを記録するか重要なものに電子メールを送ることのような何か有用なことをするでしょう。 http://www.php.net/set_error_handler
あなたはこのスクリプトを使うことができます
$url = @file_get_contents("http://www.itreb.info");
if ($url) {
// if url is true execute this
echo $url;
} else {
// if not exceute this
echo "connection error";
}
これを行う最も簡単な方法は、file_get_contentsの前に@を付けるだけです。 e .:
$content = @file_get_contents($site);
PHP 4なので error_reporting() を使います:
$site="http://www.google.com";
$old_error_reporting = error_reporting(E_ALL ^ E_WARNING);
$content = file_get_content($site);
error_reporting($old_error_reporting);
if ($content === FALSE) {
echo "Error getting '$site'";
} else {
echo $content;
}
このようなもの:
public function get($curl,$options){
$context = stream_context_create($options);
$file = @file_get_contents($curl, false, $context);
$str1=$str2=$status=null;
sscanf($http_response_header[0] ,'%s %d %s', $str1,$status, $str2);
if($status==200)
return $file
else
throw new \Exception($http_response_header[0]);
}