提问人:Waseem 提问时间:11/7/2008 最后编辑:Paulo BoaventuraWaseem 更新时间:6/24/2023 访问量:419306
如何处理PHP中file_get_contents()函数的警告?[复制]
How can I handle the warning of file_get_contents() function in PHP? [duplicate]
问:
我写了一个这样的PHP代码
$site="http://www.google.com";
$content = file_get_content($site);
echo $content;
但是当我从中删除“http://”时,我收到以下警告:$site
警告: file_get_contents(www.google.com) [function.file-get-contents]:失败 要打开流:
我试过了,但没有用。try
catch
答:
您可以在前面添加 @:$content = @file_get_contents($site);
这将抑制任何警告 - 谨慎使用!请参阅错误控制运算符
编辑:当您删除“http://”时,您不再在寻找网页,而是在磁盘上寻找一个名为“www.google.....”
评论
第 1 步:检查返回代码:if($content === FALSE) { // handle error here... }
第 2 步:通过将错误控制运算符(即 )放在对 file_get_contents() 的调用前面来抑制警告:@
$content = @file_get_contents($site);
评论
最好的办法是设置你自己的错误和异常处理程序,这些处理程序会做一些有用的事情,比如将其记录在文件中或通过电子邮件发送关键文件。http://www.php.net/set_error_handler
这是我是如何做到的......不需要try-catch块...最好的解决方案总是最简单的......享受!
$content = @file_get_contents("http://www.google.com");
if (strpos($http_response_header[0], "200")) {
echo "SUCCESS";
} else {
echo "FAILED";
}
评论
$http_response_header
还可以将错误处理程序设置为调用 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();
似乎需要很多代码来捕获一个小错误,但如果你在整个应用程序中使用异常,你只需要在顶部(例如在包含的配置文件中)这样做一次,它会将你所有的错误转换为异常。
评论
一种替代方法是禁止显示错误,并抛出稍后可以捕获的异常。如果代码中有多个对 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();
}
您可以使用此脚本
$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";
}
评论
if ($url === true)...
0
我最喜欢的方法相当简单:
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";
}
我在尝试了上面的 from @enobrev 后发现了这一点,但这允许更少的冗长(和 IMO,更具可读性)代码。我们只是用来获取最后一个错误的文本,并在失败时返回 false,因此一个简单的“if”可以捕获它。try/catch
error_get_last
file_get_contents
评论
@file_get_contents
@file_get_contents
=== FALSE
if (false !== ($data = file_get_contents ()))
error_get_last
以下是我的处理方式:
$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();
}
function custom_file_get_contents($url) {
return file_get_contents(
$url,
false,
stream_context_create(
array(
'http' => array(
'ignore_errors' => true
)
)
)
);
}
if( $content = custom_file_get_contents($url) ) {
//play with the result
}
else {
//handle the error
}
评论
$url
ignore_errors
仅指示 HTTP 上下文不将 HTTP 响应状态代码 >= 400 解释为错误。虽然略有相关,但这并不能回答PHP错误处理的问题。
ignore_errors
从 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;
}
这将尝试获取数据,如果它不起作用,它将捕获错误并允许您在捕获范围内执行任何您需要的事情。
try {
$content = file_get_contents($site);
} catch(\Exception $e) {
return 'The file was not found';
}
在使用 file_get_contents() 之前,您应该使用 file_exists() 函数。 通过这种方式,您将避免 php 警告。
$file = "path/to/file";
if(file_exists($file)){
$content = file_get_contents($file);
}
评论
最简单的方法是在file_get_contents之前预加一个 @, 即:
$content = @file_get_contents($site);
像这样的东西:
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]);
}
if (!file_get_contents($data)) {
exit('<h1>ERROR MESSAGE</h1>');
} else {
return file_get_contents($data);
}
评论
我解决了所有问题,这是所有链接的工作
public function getTitle($url)
{
try {
if (strpos($url, 'www.youtube.com/watch') !== false) {
$apikey = 'AIzaSyCPeA3MlMPeT1CU18NHfJawWAx18VoowOY';
$videoId = explode('&', explode("=", $url)[1])[0];
$url = 'https://www.googleapis.com/youtube/v3/videos?id=' . $videoId . '&key=' . $apikey . '&part=snippet';
$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_VERBOSE, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$response = curl_exec($ch);
curl_close($ch);
$data = json_decode($response);
$value = json_decode(json_encode($data), true);
$title = $value['items'][0]['snippet']['title'];
} else {
set_error_handler(
function () {
return false;
}
);
if (($str = file_get_contents($url)) === false) {
$title = $url;
} else {
preg_match("/\<title\>(.*)\<\/title\>/i", $str, $title);
$title = $title[1];
if (preg_replace('/[\x00-\x1F\x7F-\xFF]/', '', $title))
$title = utf8_encode($title);
$title = html_entity_decode($title);
}
restore_error_handler();
}
} catch (Exception $e) {
$title = $url;
}
return $title;
}
评论