2011-12-30 37 views
5

Tôi đã tạo hàm PHP sau đây vào mã HTTP của trang web.PHP CURL theo chuyển hướng để nhận trạng thái HTTP

function get_link_status($url, $timeout = 10) 
{ 
    $ch = curl_init(); 

    // set cURL options 
    $opts = array(CURLOPT_RETURNTRANSFER => true, // do not output to browser 
       CURLOPT_URL => $url,   // set URL 
       CURLOPT_NOBODY => true,   // do a HEAD request only 
       CURLOPT_TIMEOUT => $timeout); // set timeout 
    curl_setopt_array($ch, $opts); 

    curl_exec($ch); // do it! 

    $status = curl_getinfo($ch, CURLINFO_HTTP_CODE); // find HTTP status 

    curl_close($ch); // close handle 

    return $status; 
} 

Làm thế nào tôi có thể sửa đổi chức năng này để làm theo 301 & 302 trang đổi hướng (khả năng nhiều chuyển hướng) và lấy mã trạng thái HTTP cuối cùng?

+0

có thể trùng lặp của [Thực hiện theo dõi chuyển hướng?] (Http://stackoverflow.com/questions/3519939/make-curl-follow-redirects) –

Trả lời

17

đặt CURLOPT_FOLLOWLOCATION thành TRUE.

$opts = array(CURLOPT_RETURNTRANSFER => true, // do not output to browser 
       CURLOPT_URL => $url,   // set URL 
       CURLOPT_NOBODY => true,   // do a HEAD request only 
       CURLOPT_FOLLOWLOCATION => true // follow location headers 
       CURLOPT_TIMEOUT => $timeout); // set timeout 

Nếu bạn không bị ràng buộc, bạn có thể làm điều này với trình bao bọc http PHP chuẩn (có thể thậm chí là curl rồi nội bộ). Mã ví dụ:

$url = 'http://example.com/'; 
$code = FALSE; 

$options['http'] = array(
    'method' => "HEAD" 
); 

$context = stream_context_create($options); 

$body = file_get_contents($url, NULL, $context); 

foreach($http_response_header as $header) 
{ 
    sscanf($header, 'HTTP/%*d.%*d %d', $code); 
} 

echo "Status code (after all redirects): $code<br>\n"; 

Xem thêm HEAD first with PHP Streams.

Câu hỏi có liên quan là How can one check to see if a remote file exists using PHP?.

+0

câu trả lời hay. trong trường hợp của tôi, tôi cần vị trí cuối cùng, do đó, thực hiện 'sscanf ($ header, 'Location:% s', $ loc);' đã làm thủ thuật. cảm ơn bạn! – noinput

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