我使用
成功获取网站file_get_contents("http://www.site.com");
但是,如果网址确实存在或无法访问,我正在
Warning: file_get_contents(http://www.site.com) [function.file-get-contents]:
failed to open stream: operation failed in /home/track/public_html/site.php
on line 773
是否可以echo "Site not reachable";
代替错误?
答案 0 :(得分:8)
您可以将silence operator @
与$php_errormsg
一起使用:
if(@file_get_contents($url) === FALSE) {
die($php_errormsg);
}
@
抑制错误消息的位置,消息文本可在$php_errormsg
但请注意,默认情况下会禁用$php_errormsg
。你必须打开track_errors
。所以在代码的顶部添加:
ini_set('track_errors', 1);
但是有一种方法不依赖于跟踪错误:
if(@file_get_contents($url) === FALSE) {
$error = error_get_last();
if(!$error) {
die('An unknown error has occured');
} else {
die($error['message']);
}
}
答案 1 :(得分:6)
我更愿意触发异常而不是错误消息:
function exception_error_handler($errno, $errstr, $errfile, $errline ) {
// see http://php.net/manual/en/class.errorexception.php
throw new ErrorException($errstr, $errno, 0, $errfile, $errline);
}
set_error_handler("exception_error_handler");
现在您可以捕获这样的错误:
try {
$content = file_get_contents($url);
} catch (ErrorException $ex) {
echo 'Site not reachable (' . $ex->getMessage() . ')';
}
答案 2 :(得分:2)
这应该有效:
@file_get_contents("http://www.site.com");
@
会抑制PHP输出的警告和错误。你必须自己处理一个空洞的回应。
答案 3 :(得分:1)
您可以使用curl来避免显示php错误:
$externalUrl = ** your http request **
curl_setopt($curl, CURLOPT_URL, $externalUrl); // Set the URL
curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.131 Safari/537.36'); // Use your user agent
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); // Set so curl_exec returns the result instead of outputting it.
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); // Bypass SSL Verifyers
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 5);
curl_setopt($curl, CURLOPT_TIMEOUT, 10);
curl_setopt($curl, CURLOPT_HTTPHEADER, array(
'Content-Type: application/x-www-form-urlencoded'
));
$result = curl_exec($curl); // send request
$result = json_decode($result);
答案 4 :(得分:0)
您可以在PHP中关闭警告:
Turn off warnings and errors on php/mysql
参见文档:
http://il1.php.net/manual/en/function.file-get-contents.php
在函数之前返回值:该函数返回读取数据或失败时返回FALSE。
或写@,以避免看错:
@file_get_contents(...