나는 이런 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
있지만 작동하지 않았다.
답변
1 단계 : 리턴 코드 확인 if($content === FALSE) { // handle error here... }
2 단계 : file_get_contents () 호출 앞에 오류 제어 연산자 (예 🙂 를 넣어 경고를 표시하지 않습니다 .
@
$content = @file_get_contents($site);
답변
오류 처리기 를 예외 를 호출하고 해당 예외에 대해 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();
하나의 작은 오류를 포착하는 많은 코드처럼 보이지만 앱 전체에서 예외를 사용하는 경우 맨 위에 (예를 들어 포함 된 구성 파일)이 작업을 한 번만 수행하면됩니다. 전체적으로 모든 오류를 예외로 변환하십시오.
답변
가장 좋아하는 방법은 매우 간단합니다.
if (!$data = file_get_contents("http://www.google.com")) {
$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 ()를 여러 번 호출하는 경우 특히 유용합니다. 수동으로 모든 것을 억제하고 처리 할 필요가 없기 때문입니다. 대신, 단일 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();
}
답변
여기에 내가 한 방법이 있습니다 … try-catch 블록이 필요하지 않습니다 … 가장 좋은 솔루션은 항상 가장 간단합니다 … 즐기십시오!
$content = @file_get_contents("http://www.google.com");
if (strpos($http_response_header[0], "200")) {
echo "SUCCESS";
} else {
echo "FAILED";
}
답변
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
}