यूआरएल देखने का सबसे अच्छा तरीका क्या है और प्रतिक्रिया 404 नहीं है?यह जांचने का सबसे अच्छा तरीका क्या है कि PHP में कोई URL मौजूद है या नहीं?
उत्तर
आप से Manual:
<?php
// By default get_headers uses a GET request to fetch the headers. If you
// want to send a HEAD request instead, you can do so using a stream context:
stream_context_set_default(
array(
'http' => array(
'method' => 'HEAD'
)
)
);
print_r(get_headers('http://example.com'));
// gives
Array
(
[0] => HTTP/1.1 200 OK
[Date] => Sat, 29 May 2004 12:28:14 GMT
[Server] => Apache/1.3.27 (Unix) (Red-Hat/Linux)
[Last-Modified] => Wed, 08 Jan 2003 23:11:55 GMT
[ETag] => "3f80f-1b6-3e1cb03b"
[Accept-Ranges] => bytes
[Content-Length] => 438
[Connection] => close
[Content-Type] => text/html
)
पहले सरणी तत्व get_headers($url)
उदाहरण 2 का उपयोग HTTP प्रतिक्रिया स्थिति कोड में शामिल होंगे सकते हैं। आपको इसका विश्लेषण करना होगा।
ध्यान दें कि उदाहरण में get_headers
फ़ंक्शन एक HTTP HEAD अनुरोध जारी करेगा, जिसका अर्थ है कि यह यूआरएल के शरीर को नहीं लाएगा। यह एक जीईटी अनुरोध का उपयोग करने से अधिक कुशल है जो शरीर को भी वापस कर देगा।
यह भी ध्यान रखें कि डिफ़ॉल्ट संदर्भ सेट करके, किसी भी स्ट्रीम कॉल का उपयोग कर किसी भी बाद की कॉल, अब HEAD अनुरोध जारी करेगा। तो पूर्ण होने पर जीईटी का उपयोग करने के लिए डिफ़ॉल्ट संदर्भ को रीसेट करना सुनिश्चित करें।
पीएचपी भी variable $http_response_header
$http_response_header
सरणीget_headers()
समारोह के समान है प्रदान करता है। HTTP wrapper का उपयोग करते समय,$http_response_header
HTTP प्रतिक्रिया शीर्षलेखों के साथ पॉप्युलेट किया जाएगा।$http_response_header
स्थानीय दायरे में बनाया जाएगा।
आप किसी दूरस्थ संसाधन की सामग्री को डाउनलोड करना चाहते हैं, तो आप दो अनुरोध करने के लिए (एक अगर संसाधन मौजूद है और एक यह लाने के लिए देखने के लिए) नहीं करना चाहते, लेकिन सिर्फ एक। उस स्थिति में, सामग्री लाने के लिए file_get_contents
जैसे कुछ का उपयोग करें और फिर हेडर को चर से जांचें।
@ गॉर्डन - यहां आपके उत्तर के आधार पर एक और पूर्ण लाइब्रेरी दिनचर्या है। इसमें यूआरएल वैधता के लिए कुछ प्रारंभिक जांच, कुछ और त्रुटि प्रबंधन, और लौटे हेडर की पार्सिंग शामिल है। यह उचित संख्या के चरणों के लिए किसी भी रीडायरेक्ट चेन का भी पालन करता है।
class cLib {
static $lasterror = 'No error set yet';
/**
* @brief See with a URL is valid - i.e. a page can be successfully retrieved from it without error
* @param string $url The URL to be checked
* @param int $nredirects The number of redirects check so far
* @return boolean True if OK, false if the URL cannot be fetched
*/
static function checkUrl($url, $nredirects = 0) {
// First, see if the URL is sensible
if (filter_var($url, FILTER_VALIDATE_URL) === false) {
self::$lasterror = sprintf('URL "%s" did not validate', $url);
return false;
}
// Now try to fetch it
$headers = @get_headers($url);
if ($headers == false) {
$error = error_get_last();
self::$lasterror = sprintf('URL "%s" could not be read: %s', $url, $error['message']);
return false;
}
$status = $headers[0];
$rbits = explode(' ', $status);
if (count($rbits) < 2) {
self::$lasterror = sprintf('Cannot parse status "%s" from URL "%s"', $status, $url);
return false;
}
if (in_array($rbits[1], array(301, 302, 304, 307, 308))) {
// This URL has been redirected. Follow the redirection chain
foreach ($headers as $header) {
if (cLib::startsWith($header, 'Location:')) {
if (++$nredirects > 10) {
self::$lasterror = sprintf('URL "%s" was redirected over 10 times: abandoned check', $url);
return false;
}
return self::checkUrl(trim(substr($header, strlen('Location:'))), $nredirects);
}
}
self::$lasterror = sprintf('URL "%s" was redirected but location could not be identified', $url);
return false;
}
if ($rbits[1] != 200) {
self::$lasterror = sprintf('URL "%s" returned status "%s"', $url, $status);
return false;
}
return true;
}
}
@FranciscoLuz लिए क्षमा याचना के साथ
- अगर आप उपयोगकर्ता इनपुट के आधार पर त्रुटियों की उम्मीद कर रहे हैं, "@ और error_get_last" विधि पूरी तरह से समझदार मुझे लगता है - मैं नहीं दिख रहा है वहाँ कुछ भी अधिक set_error_handler का उपयोग कर के बारे में उचित नहीं है कि ।
बीटीडब्ल्यू, यह सुनिश्चित नहीं है कि मुझे इसे एक अलग उत्तर के बजाय @ गॉर्डन के उत्तर में संपादित करने के रूप में किया जाना चाहिए था। क्या कोई सलाह दे सकता है?
public function isLink($url)
{
$result = false;
if (!filter_var($url, FILTER_VALIDATE_URL) === false) {
$getHeaders = get_headers($url);
$result = strpos($getHeaders[0], '200') !== false;
}
return $result;
}
- 1. यह जांचने का सबसे अच्छा तरीका क्या है कि कोई S3 ऑब्जेक्ट मौजूद है या नहीं?
- 2. यह जांचने का सबसे अच्छा तरीका है कि कोई सूची शून्य नहीं है या नहीं?
- 3. यह जांचने का सबसे अच्छा तरीका क्या है कि कोई स्ट्रिंग किसी दूसरे में मौजूद है या नहीं?
- 4. यह जांचने का सबसे अच्छा तरीका है कि एक डीआईआर खाली है या नहीं, जबकि php
- 5. जेएस यह जांचने का कोई तरीका है कि कोई ईवेंट मौजूद है या नहीं?
- 6. सी यह जांचने के लिए तेज़ तरीका है कि कोई निर्देशिका मौजूद है या नहीं
- 7. यह जांचने का सबसे अच्छा तरीका क्या है कि फ़ाइल C++ में मौजूद है या नहीं? (क्रॉस प्लेटफार्म)
- 8. यह निर्धारित करने का सबसे अच्छा तरीका है कि कोई URL PHP
- 9. क्या कोई बाहरी वेब पेज मौजूद है या नहीं, यह जांचने का एक तेज़ तरीका है?
- 10. यह जांचने का सबसे अच्छा और तेज़ तरीका क्या है कि छवि PHP में मान्य है या नहीं?
- 11. यह जांचने के लिए कि कोई वेबपृष्ठ मौजूद है या नहीं। jQuery और/या PHP
- 12. क्या यह जांचने का कोई तरीका है कि कोई चर जावास्क्रिप्ट में दिनांक है या नहीं?
- 13. यह जांचने का सबसे अच्छा तरीका क्या है कि कोई वेबसाइट जावास्क्रिप्ट
- 14. क्या यह जांचने का कोई तरीका है कि अपाचे कॉन्फ़िगरेशन फ़ाइलों में कोई निर्देशिका मौजूद है या नहीं?
- 15. स्ट्रिंग में कोई छवि टैग है या नहीं, यह जांचने का सबसे आसान तरीका क्या है?
- 16. यह जांचने का सबसे अच्छा तरीका है कि कोई आईफोन ऐप पहली बार चल रहा है
- 17. GetProcessesByName का उपयोग यह जांचने का सबसे अच्छा तरीका है कि कोई प्रक्रिया चल रही है या नहीं?
- 18. क्या यह जांचने का कोई तरीका है कि पॉइंटर खतरे में है या नहीं?
- 19. SQL सर्वर में कोई ट्रिगर मौजूद है या नहीं यह जांचने का सबसे पोर्टेबल तरीका क्या है?
- 20. यह जांचने का सबसे अच्छा तरीका क्या है कि स्ट्रिंग में जावा/एंड्रॉइड में एक यूआरएल है या नहीं?
- 21. यह पता लगाने का सबसे अच्छा तरीका क्या है कि प्रॉक्सी सर्वर उपलब्ध है या नहीं?
- 22. यह जांचने के लिए कि फ़ोल्डर में कोई फ़ाइल मौजूद है या नहीं?
- 23. यह जांचने के लिए कि कोई एफ़टीपी निर्देशिका मौजूद है
- 24. यह जांचने के लिए कि सत्र मौजूद है या नहीं?
- 25. यह जांचने का सबसे अच्छा तरीका है कि निर्देशिका बीएटी स्क्रिप्ट में लिखने योग्य है या नहीं?
- 26. क्या यह जांचने का कोई तरीका है कि अलार्म पहले से सेट है या नहीं?
- 27. आइटम मौजूद है या नहीं, यह जांचने के लिए सबसे अच्छा क्या है: गणना करें (आईडी) या मौजूद (...)?
- 28. क्या यह जांचने का कोई तरीका है कि जावा में दो ऑब्जेक्ट्स अलियाकृत हैं या नहीं?
- 29. क्या यह जांचने का कोई तरीका है कि निर्देशिका में इंगित प्रतीकात्मक लिंक हैं या नहीं?
- 30. यह जांचने का सबसे अच्छा तरीका क्या है कि उपयोगकर्ता फाइल अपलोड कर सकता है या नहीं?
संबंधित: [? कैसे एक करता है, तो एक दूरस्थ फ़ाइल PHP का उपयोग मौजूद है देखने के लिए जाँच कर सकते हैं] (http://stackoverflow.com/questions/981954/how-can-one-check-to-see-if -ए-रिमोट-फाइल-मौजूद-उपयोग-php) (के माध्यम से: [PHP स्ट्रीम के साथ पहले HEAD] (http://hakre.wordpress.com/2011/09/17/head-first-with-php-streams/)) – hakre
जब यूआरएल परीक्षण किया जा रहा है, तो PHP चेतावनी को दबाने के लिए शुरुआत में एक @ वर्ण जोड़ें। इस तरह आप अपना खुद का कस्टम अपवाद फेंक सकते हैं। –
@ फ्रांसिस्कोलज़ मैं त्रुटि दमन का उपयोग करने पर विचार करता हूं और उचित त्रुटि हैंडलर का उपयोग करके पक्षपात करता हूं। – Gordon