我写了这样的PHP代码
$site="http://www.google.com"; $content = file_get_content($site); echo $content;
但是当我从$site中删除“http://”时,我会得到以下警告:
$site
< p >警告: file_get_contents (www.google.com) (函数。file-get-contents]:失败 打开流:
我尝试了try和catch,但它没有工作。
try
catch
你可以在前面加一个@: $content = @file_get_contents($site); < / p >
$content = @file_get_contents($site);
这将抑制任何警告- 使用谨慎!。看到错误控制操作符
编辑:当你删除“http://'”时,你不再寻找一个网页,而是在你的磁盘上一个名为“www.google.....”的文件。
步骤1:检查返回代码:if($content === FALSE) { // handle error here... }
if($content === FALSE) { // handle error here... }
@
我是这样做的……不需要try-catch块…最好的解决方案总是最简单的……享受吧!
$content = @file_get_contents("http://www.google.com"); if (strpos($http_response_header[0], "200")) { echo "SUCCESS"; } else { echo "FAILED"; }
你也可以将设置错误处理程序作为调用异常的匿名函数,并对该异常使用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 (($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"; }
我在上面的@enobrev的try/catch实验后发现了这一点,但这允许更少的冗长(在我看来,更可读)的代码。我们简单地使用error_get_last来获取最后一个错误的文本,而file_get_contents在失败时返回false,因此简单的&;if&;能抓住它。
try/catch
error_get_last
file_get_contents
下面是我的处理方法:
$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 ) ) ) ); } $content=FALSE; if($content=custom_file_get_contents($url)) { //play with the result } else { //handle the error }
因为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 = "path/to/file"; if(file_exists($file)){ $content = file_get_contents($file); }
就像这样:
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; }