get_headers
साथ आपका विधि और पहली प्रतिक्रिया लाइन रीडायरेक्ट की स्थिति कोड अधिक महत्वपूर्ण बात यह वापस आ जाएगी (यदि हो तो) और का अनुरोध, यह एक GET अनुरोध जो पूरी फ़ाइल स्थानांतरित करेंगे करेंगे।
आपको केवल एक हेड अनुरोध की आवश्यकता है और फिर हेडर को पार्स करने के लिए और अंतिम स्थिति कोड लौटाएं। के बाद एक कोड उदाहरण है कि यह करता है, यह get_headers
के बजाय $http_response_header
उपयोग कर रहा है, लेकिन सरणी के प्रारूप में ही है:
$url = 'http://example.com/';
$options['http'] = array(
'method' => "HEAD",
'ignore_errors' => 1,
);
$context = stream_context_create($options);
$body = file_get_contents($url, NULL, $context);
$responses = parse_http_response_header($http_response_header);
$code = $responses[0]['status']['code']; // last status code
echo "Status code (after all redirects): $code<br>\n";
$number = count($responses);
$redirects = $number - 1;
echo "Number of responses: $number ($redirects Redirect(s))<br>\n";
if ($redirects)
{
$from = $url;
foreach (array_reverse($responses) as $response)
{
if (!isset($response['fields']['LOCATION']))
break;
$location = $response['fields']['LOCATION'];
$code = $response['status']['code'];
echo " * $from -- $code --> $location<br>\n";
$from = $location;
}
echo "<br>\n";
}
/**
* parse_http_response_header
*
* @param array $headers as in $http_response_header
* @return array status and headers grouped by response, last first
*/
function parse_http_response_header(array $headers)
{
$responses = array();
$buffer = NULL;
foreach ($headers as $header)
{
if ('HTTP/' === substr($header, 0, 5))
{
// add buffer on top of all responses
if ($buffer) array_unshift($responses, $buffer);
$buffer = array();
list($version, $code, $phrase) = explode(' ', $header, 3) + array('', FALSE, '');
$buffer['status'] = array(
'line' => $header,
'version' => $version,
'code' => (int) $code,
'phrase' => $phrase
);
$fields = &$buffer['fields'];
$fields = array();
continue;
}
list($name, $value) = explode(': ', $header, 2) + array('', '');
// header-names are case insensitive
$name = strtoupper($name);
// values of multiple fields with the same name are normalized into
// a comma separated list (HTTP/1.0+1.1)
if (isset($fields[$name]))
{
$value = $fields[$name].','.$value;
}
$fields[$name] = $value;
}
unset($fields); // remove reference
array_unshift($responses, $buffer);
return $responses;
}
अधिक जानकारी के लिए देखें: HEAD first with PHP Streams, अंत में यह उदाहरण कोड शामिल कैसे आप कर सकते हैं get_headers
के साथ हीड अनुरोध करें।
संबंधित: How can one check to see if a remote file exists using PHP?
curl रीडायरेक्ट का पालन ठीक कर सकते हैं। आप इसे अपनी धारणाओं से डरने के बजाय दस्तावेज़ में पढ़ सकते हैं: http://php.net/manual/en/function.curl-setopt.php, 'CURLOPT_FOLLOWLOCATION' – Piskvor
के लिए देखें I CURLOPT_FOLLOWLOCATION विकल्प के साथ कर्ल करने का प्रयास किया। बात यह है कि यह मेरे स्थानीय सर्वर पर एक पृष्ठ लाया गया है और जब मैं सर्वर से प्राप्त पृष्ठ पर उपयोगकर्ता नाम/पासवर्ड दर्ज करता हूं, तो सर्वर पुनर्निर्देशन में भ्रमित हो जाता है। इसे कैसे हल करें? –