PHP: कैसे जांच करें कि क्या छवि फ़ाइल मौजूद है?


97

मुझे यह देखने की ज़रूरत है कि क्या मेरी सीडी पर एक विशिष्ट छवि मौजूद है।

मैंने निम्नलिखित कोशिश की है और यह काम नहीं करता है:

if (file_exists(http://www.example.com/images/$filename)) {
    echo "The file exists";
} else {
    echo "The file does not exist";
}

भले ही छवि मौजूद है या मौजूद नहीं है, यह हमेशा कहता है "फ़ाइल मौजूद है"। मुझे यकीन नहीं है कि इसका काम क्यों नहीं हो रहा है ...


1
आपको अपने सर्वर फाइल सिस्टम (जैसे '/home/you/public/img/sample.gif') में फाइल करने के लिए पूर्ण पथ का उपयोग करना चाहिए।
user9440008

इस के साथ लापरवाह रहें क्योंकि आप पा सकते हैं file_existsकि एक दूरस्थ स्थान पर ए करना बहुत धीमा होगा।
crmpicco

जवाबों:


130

आपको उद्धरण चिह्नों में फ़ाइल नाम कम से कम (स्ट्रिंग के रूप में) चाहिए:

if (file_exists('http://www.mydomain.com/images/'.$filename)) {
  }

इसके अलावा, सुनिश्चित करें $filenameकि ठीक से मान्य है। और फिर, यह केवल तभी काम करेगा जब allow_url_fopenआपके PHP कॉन्फिगर में सक्रिय हो


5
मैं @GetImageSize का उपयोग करके इसे सफलतापूर्वक करने में सक्षम रहा हूं। हालांकि, क्या कम सर्वर गहन होगा?
पेपरकैच

9
file_exists () को हार्ड ड्राइव पर एक फ़ाइल पथ का उपयोग करने की आवश्यकता है, URL नहीं यह मेरे लिए उपयोगी उत्तर नहीं है, इसे स्वीकार नहीं किया जाना चाहिए।
मार्टिन

PHP से: bool file_exists (string $ filename) PHP 5.0.0 के रूप में, इस फ़ंक्शन का उपयोग कुछ विशेष आवरणों के साथ भी किया जा सकता है। यह निर्धारित करने के लिए समर्थित प्रोटोकॉल और रैपर्स का संदर्भ लें कि कौन से रैपर कार्यक्षमता के स्टेट () परिवार का समर्थन करते हैं।
एड्रियन पी।

अगर $ फ़ाइल नाम स्ट्रिंग शून्य है, तो file_exists निर्देशिका के लिए सही लौटेगा। Is_file ($ filepath) का उपयोग करने के लिए बेहतर है
PodTech.io

1
जैसा कि लोगों ने कहा, यह दूरस्थ URL / रास्तों पर काम नहीं करता है। लेकिन यह स्थानीय पथों में काम करता है (आंतरिक सर्वर पथ जहां फाइलें स्थित हैं)। इसके अलावा, अन्य तरीकों से, रिमोट को 14 सेकंड तक का समय लगता है, और स्थानीय, 1 सेकंड से कम (एक निश्चित उदाहरण के लिए)
राफा

110
if (file_exists('http://www.mydomain.com/images/'.$filename)) {}

यह मेरे लिए काम नहीं किया। जिस तरह से मैंने किया वह getimagesize का उपयोग कर रहा था।

$src = 'http://www.mydomain.com/images/'.$filename;

if (@getimagesize($src)) {

ध्यान दें कि '@' का अर्थ यह होगा कि यदि छवि मौजूद नहीं है (जिस स्थिति में फ़ंक्शन आमतौर पर एक त्रुटि फेंक getimagesize(http://www.mydomain.com/images/filename.png) [function.getimagesize]: failedदेगा:) यह गलत वापस आ जाएगी।


1
अगर (@getimagesize ($ src)) {काम करता है चमत्कार, थैंक्यू, अतिरिक्त स्पष्टीकरण के लिए @ @ यहाँ
lesolorzanov

1
getimagesize () काम करता है, लेकिन सुनिश्चित करें कि आप URI में प्रोटोकॉल को शामिल करते हैं (जैसे, @getimagesize('//path/to/image.jpg')काम नहीं करेगा)।
थोदो

file_exists या is_file ने मेरे लिए काम नहीं किया, यह किया। धन्यवाद!
डर्क जान स्पिलमैन

.getimagesize नाटकीय रूप से पृष्ठ लोड को धीमा कर देगा। सिफारिश नहीं की गई। is_file का उपयोग इसके बजाय किया जा सकता है और सुनिश्चित करें कि $ src पूर्ण url नहीं है: "http: // ..." लेकिन "img / ..."
बोगडान C

is_file और file_exists दोनों छवियों के लिए काम नहीं कर रहे हैं, लेकिन @getimagesize ठीक काम कर रहा है।
आलम ज़ैब

14

खैर, file_existsयह नहीं कहता कि क्या कोई फ़ाइल मौजूद है, यह कहता है कि क्या कोई रास्ता मौजूद है । ⚡⚡⚡⚡⚡⚡⚡

इसलिए, यह जांचने के लिए कि क्या यह एक फ़ाइल है, तो आपको यह जानने के लिए is_fileएक साथ उपयोग करना चाहिए file_existsकि क्या वास्तव में पथ के पीछे कोई फ़ाइल है, अन्यथा किसी भी मौजूदा पथ के लिए file_existsवापस आ जाएगी true

यहाँ मैं उपयोग समारोह है:

function fileExists($filePath)
{
      return is_file($filePath) && file_exists($filePath);
}

2
कोई पथ मौजूदा कैसे हो सकता है, लेकिन फ़ाइल मौजूद नहीं है, जब पथ में फ़ाइल का नाम होता है?
एंड्रयू

1
मेरा मतलब है कि यह भी काम करता है अगर उपयोगकर्ता एक रास्ता देता है और एक फ़ाइल नहीं है, तो यह फ़ंक्शन सही वापस आ जाएगा, भले ही यह मेरे दोस्त की फ़ाइल न हो।
रेजरजेरो

बनाने के लिए दिलचस्प और संभावित महत्वपूर्ण भेदभाव। लेकिन यदि आप डॉक्स की जांच करते हैं, तो ऐसा लगता है कि आपको केवल इस उद्देश्य के लिए is_file का उपयोग करने की आवश्यकता है, न कि file_exists के साथ संयोजन में।
एंड्रयू

ठीक है, मैं आपको इसके लिए योग करता हूं, (उपयोग करें: पेपरकैसेज़) यह देखना चाहता है कि क्या फ़ाइल_एक्सिस्ट्स, उसका मुद्दा यह है कि भले ही वह फ़ंक्शन को एक रास्ता दे, उसे एक सच्ची प्रतिक्रिया मिल जाएगी, इसलिए यह स्पष्ट रूप से जांचने के लिए कि क्या फ़ाइल मौजूद है वह मेरे फ़ंक्शन का उपयोग करेगा, क्योंकि php फ़ंक्शन एक पथ से गुजरने पर भी सही लौटेगा, इसलिए फ़ंक्शन का नाम खराब है, यह Path_exists () होना चाहिए और मेरा फ़ंक्शन वास्तव में जाँच करता है कि क्या कोई फ़ाइल मौजूद है, क्योंकि यह गलत होगा यदि मौजूदा फ़ाइल पथ की तुलना में कुछ और पास किया गया है। मुझे उम्मीद है कि यह अब स्पष्ट है।
Rizerzero

हाँ, यह ठीक काम करेगा, लेकिन php.net/manual/en/function.is-file.php is_file () के अनुसार यदि पथ / फ़ाइल जाँचने से पहले मौजूद है कि क्या यह एक फ़ाइल है, तो जाँच करनी चाहिए, इसलिए आपको इसकी आवश्यकता नहीं है ।
एंड्रयू

13

इस तरह की कोशिश करें:

$file = '/path/to/foo.txt'; // 'images/'.$file (physical path)

if (file_exists($file)) {
    echo "The file $file exists";
} else {
    echo "The file $file does not exist";
}

9

यहां यह जांचने का सबसे सरल तरीका है कि क्या कोई फाइल मौजूद है:

if(is_file($filename)){
    return true; //the file exist
}else{
    return false; //the file does not exist
}

8

एक बात जो आपको पहले समझनी होगी: आपके पास कोई फाइल नहीं है
एक फाइल एक फाइलसिस्टम का एक विषय है , लेकिन आप HTTP प्रोटोकॉल का उपयोग करके अपना अनुरोध कर रहे हैं जो कि कोई फाइल नहीं बल्कि URL का समर्थन करता है।

तो, आपको अपने ब्राउज़र का उपयोग करके एक अनएक्सिस्टेंस फ़ाइल का अनुरोध करना होगा और प्रतिक्रिया कोड देखना होगा। यदि यह 404 नहीं है, तो आप यह देखने के लिए किसी भी रैपर का उपयोग करने में असमर्थ हैं कि क्या कोई फाइल मौजूद है और आपको उदाहरण के लिए एफ़टीपी का उपयोग कर कुछ अन्य प्रोटोकॉल का अनुरोध करना होगा


7
public static function is_file_url_exists($url) {
        if (@file_get_contents($url, 0, NULL, 0, 1)) {
            return 1;
        }

        return 0;           
    }

7

यदि फ़ाइल आपके स्थानीय डोमेन पर है, तो आपको पूरा URL डालने की आवश्यकता नहीं है। केवल फ़ाइल के लिए पथ। यदि फ़ाइल एक अलग निर्देशिका में है, तो आपको "" के साथ पथ प्रस्तुत करना होगा।

$file = './images/image.jpg';
if (file_exists($file)) {}

अक्सर बार " छोड़ दिया जाता है जो फ़ाइल को मौजूदा के रूप में नहीं दिखाया जाएगा, जब यह वास्तव में करता है।


3

के बीच एक बड़ा अंतर है is_fileऔर file_exists

is_file (नियमित) फाइलों के लिए सही रिटर्न:

यदि फ़ाइल नाम मौजूद है तो TRUE लौटाता है और एक नियमित फ़ाइल है, अन्यथा FALSE

file_exists दोनों फ़ाइलों और निर्देशिकाओं के लिए सही रिटर्न:

यदि फ़ाइल नाम द्वारा निर्दिष्ट फ़ाइल या निर्देशिका मौजूद है, तो TRUE लौटाता है; FALSE अन्यथा।


नोट: इस विषय पर अधिक जानकारी के लिए इस स्टैकओवरफ़्लो प्रश्न की भी जाँच करें ।


2

फ़ाइल मौजूद है या नहीं यह देखने के लिए आपको निरपेक्ष पथ का उपयोग करना होगा।

$abs_path = '/var/www/example.com/public_html/images/';
$file_url = 'http://www.example.com/images/' . $filename;

if (file_exists($abs_path . $filename)) {

    echo "The file exists. URL:" . $file_url;

} else {

    echo "The file does not exist";

}

यदि आप CMS या PHP फ्रेमवर्क के लिए लिख रहे हैं, तो जहाँ तक मुझे पता है कि उन सभी ने दस्तावेज़ रूट पथ के लिए निरंतर परिभाषित किया है।

उदाहरण के लिए वर्डप्रेस ABSPATH का उपयोग करता है जो आपके कोड के साथ-साथ साइट url का उपयोग करके सर्वर पर फ़ाइलों के साथ काम करने के लिए विश्व स्तर पर उपयोग किया जा सकता है।

Wordpress उदाहरण:

$image_path = ABSPATH . '/images/' . $filename;
$file_url = get_site_url() . '/images/' . $filename;

if (file_exists($image_path)) {

    echo "The file exists. URL:" . $file_url;

} else {

    echo "The file does not exist";

}

मैं यहाँ एक अतिरिक्त मील जा रहा हूँ :)। क्योंकि इस कोड को बहुत रखरखाव और बहुत ठोस की आवश्यकता नहीं होगी, मैं इसे बयान के रूप में शॉर्टहैंड के साथ लिखूंगा:

$image_path = ABSPATH . '/images/' . $filename;
$file_url = get_site_url() . '/images/' . $filename;

echo (file_exists($image_path))?'The file exists. URL:' . $file_url:'The file does not exist';

आशुलिपि IF बयान में बताया गया है:

$stringVariable = ($trueOrFalseComaprison > 0)?'String if true':'String if false';

2

आप cURL का उपयोग कर सकते हैं। आप केवल हेडर देने के लिए cURL प्राप्त कर सकते हैं, न कि शरीर, जो इसे और तेज़ बना सकता है। एक खराब डोमेन हमेशा कुछ समय ले सकता है क्योंकि आप समय-आउट के अनुरोध का इंतजार कर रहे होंगे; आप शायद CURL का उपयोग करके टाइमआउट लंबाई बदल सकते हैं।

यहाँ उदाहरण है:

function remoteFileExists($url) {
$curl = curl_init($url);

//don't fetch the actual page, you only want to check the connection is ok
curl_setopt($curl, CURLOPT_NOBODY, true);

//do request
$result = curl_exec($curl);

$ret = false;

//if request did not fail
if ($result !== false) {
    //if request was ok, check response code
    $statusCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);  

    if ($statusCode == 200) {
        $ret = true;   
    }
}

curl_close($curl);

return $ret;
}
$exists = remoteFileExists('http://stackoverflow.com/favicon.ico');
if ($exists) {
echo 'file exists';
} else {
   echo 'file does not exist';   
}


1

यदि आप कर्ल का उपयोग कर रहे हैं, तो आप निम्न स्क्रिप्ट आज़मा सकते हैं:

function checkRemoteFile($url)
{
  $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL,$url);
 // don't download content
curl_setopt($ch, CURLOPT_NOBODY, 1);
curl_setopt($ch, CURLOPT_FAILONERROR, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
if(curl_exec($ch)!==FALSE)
{
    return true;
}
else
{
    return false;
}

}

संदर्भ URL: https://hungred.com/how-to/php-check-remote-email-url-image-link-exist/


1
यहां एक टाइमआउट की जरूरत है
माइक क्यू

1

इसे इस्तेमाल करे :

if (file_exists(FCPATH . 'uploads/pages/' . $image)) {
    unlink(FCPATH . 'uploads/pages/' . $image);
}

1

यदि आपकी छवि का पथ एप्लिकेशन रूट के सापेक्ष है, तो इस तरह से कुछ का उपयोग करना बेहतर है:

function imgExists($path) {
    $serverPath = $_SERVER['DOCUMENT_ROOT'] . $path;

    return is_file($serverPath)
        && file_exists($serverPath);
}

इस फ़ंक्शन के लिए उपयोग उदाहरण:

$path = '/tmp/teacher_photos/1546595125-IMG_14112018_160116_0.png';

$exists = imgExists($path);

if ($exists) {
    var_dump('Image exists. Do something...');
}

मुझे लगता है कि विभिन्न स्थितियों के लिए लागू छवि अस्तित्व की जांच करने के लिए पुस्तकालय जैसा कुछ बनाना अच्छा है। इस कार्य को हल करने के लिए आप बहुत सारे बेहतरीन उत्तरों का उपयोग कर सकते हैं।


0

HTTP का उपयोग करके पहले 5 बाइट्स पढ़ें fopen()और fread()फिर इसका उपयोग करें:

DEFINE("GIF_START","GIF");
DEFINE("PNG_START",pack("C",0x89)."PNG");
DEFINE("JPG_START",pack("CCCCCC",0xFF,0xD8,0xFF,0xE0,0x00,0x10)); 

छवि का पता लगाने के लिए।


एक सामान्य 404 छवि हो सकती है
आपका कॉमन सेंस

2
हां - इसलिए छवि निर्दिष्ट URL पर मौजूद है।
पीटर

0

file_existsन केवल फ़ाइलों को पढ़ता है, बल्कि पथ भी है। इसलिए जब $filenameखाली होता है, तो कमांड चलेगा जैसे कि यह इस तरह लिखा हो:

file_exists("http://www.example.com/images/")

यदि निर्देशिका / चित्र / मौजूद है, तो फ़ंक्शन अभी भी वापस आ जाएगा true

मैं आमतौर पर इसे इस तरह लिखता हूं:

// !empty($filename) is to prevent an error when the variable is not defined
if (!empty($filename) && file_exists("http://www.example.com/images/$filename"))
{
    // do something
}
else
{
    // do other things
}

0

file_exists($filepath) एक निर्देशिका और पूर्ण फ़ाइलपथ के लिए एक सही परिणाम लौटाएगा, इसलिए फ़ाइल नाम पारित नहीं होने पर हमेशा समाधान नहीं होता है।

is_file($filepath) केवल पूरी तरह से filepaths के लिए सच वापस आ जाएगी


0

आपको file_exists के साथ सर्वर पथ की आवश्यकता है

उदाहरण के लिए

if (file_exists('/httpdocs/images/'.$filename)) {echo 'File exist'; }

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.