Tôi muốn tải xuống nội dung của URL bằng cách sử dụng PHP, ngay cả khi mã phản hồi HTTP là 404. file_get_contents
sẽ bị lỗi và tôi không thể tìm câu trả lời bằng Google. Tôi có thể làm cái này như thế nào?Tải xuống nội dung của URL trong PHP ngay cả khi nó trả về 404
Trả lời
Theo mặc định file_get_contents chỉ trả lại nội dung của phản hồi HTTP 200.
With curl you get the headers and the content separately.
Tính đến PHP 5.0, bạn cũng có thể chỉ định một bối cảnh cho file_get_contents
, cho phép bạn làm điều đó mà không dựa vào url (Xem trả lời Gordon).
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.
Bạn phải configure the stream wrapper để bỏ qua lỗi:
ignore_errors
boolean
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.
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á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
@sagi mã phản hồi sẽ bằng '$ http_reponse_header' – Gordon
+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. –