[php] PHP에서 file_get_contents () 함수의 경고를 어떻게 처리 할 수 ​​있습니까?

나는 이런 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
}