2011-07-16 27 views

Trả lời

2

Sử dụng cURL để thay thế. Nó cho phép kiểm soát tốt hơn nhiều, và sẽ cho phép bạn đọc bất kỳ nội dung nào được truy xuất và mã trạng thái.

61

Bạn phải configure the stream wrapper để bỏ qua lỗi:

ignore_errorsboolean Fetch nội dung ngay cả trên mã trạng thái thất bại. Mặc định là FALSE

Nói cách khác, làm

echo file_get_contents(
    'http://stackoverflow.com/foo/bar', 
    false, 
    stream_context_create(
     array(
      'http' => array(
       'ignore_errors' => true 
      ) 
     ) 
    ) 
); 

và bạn sẽ nhận được trang 404.

Nếu bạn muốn đây là hành vi mặc định cho dòng HTTP, sử dụng

stream_context_set_default(
    array('http' => array(
     'ignore_errors' => true) 
    ) 
); 

Bất kỳ cuộc gọi bằng cách sử dụng wrapper dòng HTTP sẽ sử dụng các cài đặt sau đó, ví dụ bạn chỉ có thể làm

echo file_get_contents('http://stackoverflow.com/foo/bar'); 

Nếu bạn cũng muốn nhận được response header, chỉ cần làm

print_r($http_response_header); 

sau khi cuộc gọi. Biến được (re-) được điền sau mỗi cuộc gọi với trình bao bọc dòng http.

+0

cách tiếp cận Thú vị - nhưng bạn có thể nói nếu bạn gặp lỗi hoặc phản hồi thành công? – sagi

+0

@sagi mã phản hồi sẽ bằng '$ http_reponse_header' – Gordon

+1

+1 Gordon là đúng, biến $ http_response_header chứa chính xác những gì nó nói trên tin, trong đó rõ ràng bao gồm mã trạng thái. –

0

Bước 1: kiểm tra mã trở lại: $content = file_get_contents("websitelink"); if($content === FALSE) { // handle error here... }

Bước 2: ngăn chặn các cảnh báo bằng cách đặt một nhà điều hành kiểm soát lỗi (tức là @) ở phía trước của cuộc gọi đến file_get_contents(): $content = @file_get_contents($site);

Các vấn đề liên quan