2013-02-11 11 views
5

यह NO के पूरे ढेर को थूकता है लेकिन छवियां वहां हैं और पथ सही हैं क्योंकि वे <img> द्वारा प्रदर्शित होते हैं।PHP का एक दूरस्थ छवि फ़ाइल मौजूद है या नहीं, तो मैं कैसे परीक्षण करूं?

foreach ($imageNames as $imageName) 
{ 
    $image = 'http://path/' . $imageName . '.jpg'; 
    if (file_exists($image)) { 
     echo 'YES'; 
    } else { 
     echo 'NO'; 
    } 
    echo '<img src="' . $image . '">'; 
} 
+2

किसी फ़ाइल फ़ाइल का URL और सर्वर की फ़ाइल सिस्टम पर एक ही छवि फ़ाइल का पथ ** दो अलग-अलग तार ** हैं। –

+0

ठीक है कि समझ में आता है। मैं file_exists के साथ दूरस्थ पथ का उपयोग कर अन्य पदों पर skimming द्वारा गुमराह किया गया था। – TijuanaKez

उत्तर

13

file_exists स्थानीय पथ, नहीं एक यूआरएल उपयोग करता है।

एक समाधान यह होगा:

$url=getimagesize(your_url); 

if(!is_array($url)) 
{ 
    // The image doesn't exist 
} 
else 
{ 
    // The image exists 
} 

information अधिक के लिए यह देखें।

इसके अलावा, प्रतिक्रिया शीर्षकों की तलाश (get_headers फ़ंक्शन का उपयोग करके) एक बेहतर विकल्प होगा। बस की जाँच करता है, तो प्रतिक्रिया 404 है:

if(@get_headers($your_url)[0] == 'HTTP/1.1 404 Not Found') 
{ 
    // The image doesn't exist 
} 
else 
{ 
    // The image exists 
} 
+3

यह बहुत महंगा है। जानकारी पुनर्प्राप्त होने से पहले पूरी छवि डाउनलोड की जाती है। आप अपने अनुरोध के शीर्षकों को देखकर बेहतर हैं। Get_headers() में देखें। http://php.net/manual/en/function.get-headers.php –

+0

@GeneKelly धन्यवाद! अपडेट किया गया। –

+0

यह एक शानदार उत्तर है (शीर्षलेख के साथ)। लेकिन क्या यह हमेशा अलग-अलग सर्वरों पर एक ही शीर्षलेख वापस करता है? इस पर मेरी अज्ञानता के लिए खेद है। – itsols

13

file_exists एक स्थानीय पथ के लिए लग रहा है, नहीं एक "http: //" यूआरएल

उपयोग:

$file = 'http://www.domain.com/somefile.jpg'; 
$file_headers = @get_headers($file); 
if($file_headers[0] == 'HTTP/1.1 404 Not Found') { 
    $exists = false; 
} 
else { 
    $exists = true; 
} 
+0

@ फिल क्या आपने इसे यूआरएल के साथ आजमाया है? यह झूठा लौटाता है: http://codepad.viper-7.com/56dDzt – Mike

+0

यदि सर्वर लौटाता है: HTTP/1.1 403? – realization

+0

यदि यह 403 है, तो छवि अभी भी उपलब्ध नहीं है, लेकिन मौजूद है। –

2
$ch = curl_init($url); 
curl_setopt($ch, CURLOPT_NOBODY, true); 
curl_exec($ch); 
$retcode = curl_getinfo($ch, CURLINFO_HTTP_CODE); 
curl_close($ch); 
if($retcode==200) echo 'YES'; 
else    echo 'NO'; 
+1

कृपया अपने कोड को थोड़ा सा समझाएं – andy

0
function remote_file_exists($file){ 

$url=getimagesize($file); 

if(is_array($url)) 
{ 

return true; 

} 
else { 

return false; 

} 

$file='http://www.site.com/pic.jpg'; 

echo remote_file_exists($file); // return true if found and if not found it will return false 
1

यह मैं क्या किया है। इसमें हेडर प्राप्त करने के साथ अधिक संभावित परिणाम शामिल हैं क्योंकि यदि आप फ़ाइल तक नहीं पहुंच पा रहे हैं तो यह हमेशा "404 नहीं मिला" है। कभी-कभी इसे "स्थायी रूप से स्थानांतरित किया जाता है", "निषिद्ध", और अन्य संभावित संदेश। हालांकि फ़ाइल मौजूद है, तो यह केवल "200 ठीक है", और इसका उपयोग किया जा सकता है। HTTP के साथ भाग 1.1 या उसके बाद 1.0 हो सकता है, यही कारण है कि मैंने स्ट्रोक का उपयोग हर स्थिति के लिए अधिक विश्वसनीय होने के लिए किया था।

$file_headers = @get_headers('http://example.com/image.jpg'); 

$is_the_file_accessable = true; 

if(strpos($file_headers[0], ' 200 OK') !== false){ 
    $is_the_file_accessable = false; 
} 

if($is_the_file_accessable){ 
    // THE IMAGE CAN BE ACCESSED. 
} 
else 
{ 
    // THE IMAGE CANNOT BE ACCESSED. 
} 
संबंधित मुद्दे

 संबंधित मुद्दे