PHP의 file_get_contents() 함수의 경고는 어떻게 처리합니까?
나는 이렇게 PHP 코드를 썼다.
$site="http://www.google.com";
$content = file_get_content($site);
echo $content;
하지만 'http://'를 삭제했을 때$site
다음과 같은 경고가 표시됩니다.
경고: file_get_module(www.google.com) [function](기능).file-get-filename]: 스트림을 열지 못했습니다.
나는 노력했다.try
그리고.catch
하지만 그것은 작동하지 않았다.
순서 1: 리턴 코드를 확인합니다.if($content === FALSE) { // handle error here... }
2단계: 오류 제어 연산자를 배치하여 경고를 억제합니다(예:@
file_get_model() 호출 앞에 있는 경우:$content = @file_get_contents($site);
또한 오류 핸들러를 익명의 함수로 설정하여 예외를 호출하고 해당 예외에 대한 시도/캐치를 사용할 수도 있습니다.
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")) === false) {
$error = error_get_last();
echo "HTTP request failed. Error was: " . $error['message'];
} else {
echo "Everything went better than expected";
}
제가 이걸 발견했어요.try/catch
위의 @enobrev에서 사용할 수 있습니다.단, 이 기능을 사용하면, 보다 장황한(및 IMO, 보다 읽기 쉬운) 코드를 사용할 수 있습니다.델은 간단하게error_get_last
마지막 오류 텍스트를 가져오고file_get_contents
는 실패 시 false를 반환하기 때문에 단순한 "if"가 그것을 검출할 수 있습니다.
@: 를 선두에 붙일 수 있습니다.$content = @file_get_contents($site);
이렇게 하면 경고가 표시되지 않습니다. 적게 사용하십시오!오류 제어 연산자 참조
편집: 'http://'를 삭제하면 더 이상 웹 페이지가 아닌 "www.google..."이라는 이름의 파일이 디스크에서 검색됩니다."
한 가지 방법은 오류를 억제하고 나중에 탐지할 수 있는 예외를 발생시키는 것입니다.이것은 특히 코드에 file_get_contents()에 대한 콜이 여러 개 있는 경우에 유용합니다.이는 모든 콜을 수동으로 억제하고 처리할 필요가 없기 때문입니다.대신에, 이 함수에 대해서, 1개의 시행/캐치 블록으로 복수의 콜을 발신할 수 있습니다.
// 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
}
내가 한 방법은...트라이캐치 블록은 필요 없습니다.최선의 해결책은 항상 가장 간단한 것이다...맛있게 드세요!
$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
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]);
}
이 스크립트를 사용할 수 있습니다.
$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()를 사용하려면 이전에 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 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;
}
이렇게 하면 데이터를 가져오려고 시도하고, 데이터가 작동하지 않으면 오류를 포착하여 필요한 작업을 수행할 수 있습니다.
try {
$content = file_get_contents($site);
} catch(\Exception $e) {
return 'The file was not found';
}
if (!file_get_contents($data)) {
exit('<h1>ERROR MESSAGE</h1>');
} else {
return file_get_contents($data);
}
언급URL : https://stackoverflow.com/questions/272361/how-can-i-handle-the-warning-of-file-get-contents-function-in-php
'sourcecode' 카테고리의 다른 글
날짜에 10초 추가 (0) | 2022.09.12 |
---|---|
형식 스크립트 형식 'string'을 형식에 할당할 수 없습니다. (0) | 2022.09.12 |
JavaScript에서 = +_는 무엇을 의미합니까? (0) | 2022.09.12 |
JavaScript를 사용한 전화번호 확인 (0) | 2022.09.12 |
두 날짜 사이의 시간 차이를 가져옵니다. (0) | 2022.09.12 |