How can I handle the warning of file_get_contents() function in PHP?
I wrote a PHP code like this
$site="http://www.google.com";
$content = file_get_content($site);
echo $content;
But when I remove "http://" from $site
I get the following warning:
Warning: file_get_contents(www.google.com) [function.file-get-contents]: failed to open stream:
I tried try
and catch
but it didn't work.
Solution 1:
Step 1: check the return code: if($content === FALSE) { // handle error here... }
Step 2: suppress the warning by putting an error control operator (i.e. @
) in front of the call to file_get_contents():
$content = @file_get_contents($site);
Solution 2:
You can also set your error handler as an anonymous function that calls an Exception and use a try / catch on that exception.
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();
Seems like a lot of code to catch one little error, but if you're using exceptions throughout your app, you would only need to do this once, way at the top (in an included config file, for instance), and it will convert all your errors to Exceptions throughout.
Solution 3:
My favorite way to do this is fairly simple:
if (($data = @file_get_contents("http://www.google.com")) === false) {
$error = error_get_last();
echo "HTTP request failed. Error was: " . $error['message'];
} else {
echo "Everything went better than expected";
}
I found this after experimenting with the try/catch
from @enobrev above, but this allows for less lengthy (and IMO, more readable) code. We simply use error_get_last
to get the text of the last error, and file_get_contents
returns false on failure, so a simple "if" can catch that.