পিএইচপি: চিত্র ফাইল বিদ্যমান আছে কি করে তা পরীক্ষা করবেন?


100

আমার সিডনিতে একটি নির্দিষ্ট চিত্র উপস্থিত আছে কিনা তা আমার দেখতে হবে।

আমি নিম্নলিখিতটি চেষ্টা করেছি এবং এটি কার্যকর হয় না:

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

এমনকি চিত্রটি বিদ্যমান থাকলে বা না থাকলেও এটি সর্বদা "ফাইলটি বিদ্যমান" বলে। আমি নিশ্চিত না কেন এটি কাজ করছে না ...


4
আপনার সার্ভার ফাইল সিস্টেমে ফাইলের পুরো পথ ব্যবহার করা উচিত (যেমন '/ home/you/public/img/sample.gif')।
ব্যবহারকারী 9440008

এটিকে নিয়ে যত্নশীল হোন কারণ আপনি দেখতে পাচ্ছেন file_existsযে কোনও দূরবর্তী স্থানে এটি করা খুব ধীর হবে।
crmpicco

উত্তর:


131

আপনার কমপক্ষে (স্ট্রিং হিসাবে) উদ্ধৃতি চিহ্নগুলিতে ফাইলের নাম প্রয়োজন:

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

এছাড়াও, $filenameসঠিকভাবে যাচাই করা হয়েছে তা নিশ্চিত করুন । এবং তারপরে, এটি কেবল তখনই কাজ করবে যখন allow_url_fopenআপনার পিএইচপি কনফিগারেশনে সক্রিয় হবে


5
আমি @GETImageSize ব্যবহার করে এটি সফলভাবে করতে সক্ষম হয়েছি। তবে কি কম সার্ভার নিবিড় হবে?
পেপারচেজ

9
file_exists () এর জন্য হার্ড ড্রাইভে একটি ফাইল পাথ ব্যবহার করা দরকার, URL নয় এটি আমার পক্ষে কার্যকর উত্তর নয়, এটি গ্রহণযোগ্য হিসাবে সেট করা উচিত নয়।
মার্টিন

পিএইচপি থেকে: bool file_exists (স্ট্রিং $ ফাইলের নাম) পিএইচপি 5.0.0 হিসাবে, এই ফাংশনটি কিছু URL র‌্যাপারগুলির সাথেও ব্যবহার করা যেতে পারে। কোন মোড়কগুলি কার্যকারিতার স্ট্যাট () পরিবারকে সমর্থন করে তা নির্ধারণ করতে সমর্থিত প্রোটোকল এবং র‍্যাপারগুলি দেখুন।
অ্যাড্রিয়ান পি।

যদি name ফাইলনামের স্ট্রিংটি নাল হয় তবে ফাইল_এক্সিস্টগুলি ডিরেক্টরিটির জন্য সত্য হিসাবে ফিরে আসবে। Is_file ($ ফাইলপথ) ব্যবহার করা ভাল
পডটেক.ইউ

4
লোকেরা যেমন বলেছে, এটি দূরবর্তী ইউআরএল / পাথগুলিতে কাজ করে না। তবে এটি স্থানীয় পাথগুলিতে (অভ্যন্তরীণ সার্ভারের পথ যেখানে ফাইলগুলি অবস্থিত) কাজ করে। এছাড়াও, অন্যান্য পদ্ধতি থেকে, রিমোটটি 14 সেকেন্ড হিসাবে সময় নেয় এবং স্থানীয়, এক সেকেন্ডেরও কম (একটি নির্দিষ্ট উদাহরণের জন্য)
রাফা

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

এটি আমার পক্ষে কাজ করে না। আমি যেভাবে এটি করেছি তা ছিল গেটিমেজেসাইজ ব্যবহার করা।

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

if (@getimagesize($src)) {

নোট করুন যে '@' এর অর্থ এই হবে যে চিত্রটির অস্তিত্ব না থাকলে (এই ক্ষেত্রে ফাংশনটি সাধারণত একটি ত্রুটি ছুঁড়ে দেয় getimagesize(http://www.mydomain.com/images/filename.png) [function.getimagesize]: failed:) এটি মিথ্যা ফিরে আসবে।


4
যদি (@getimagesize ($ src)) @ @ এখানে ব্যাখ্যার জন্য
থানকিউ

4
জেটিমেজেসাইজ () কাজ করে তবে আপনি ইউআরআইতে প্রোটোকল অন্তর্ভুক্ত করেছেন তা নিশ্চিত করুন (যেমন, @getimagesize('//path/to/image.jpg')কাজ করবে না)।
থডাউন

file_exists বা is_file আমার পক্ষে কাজ করে না, এটি করেছে। ধন্যবাদ!
ডার্ক জান স্পেলম্যান

@getimagesize নাটকীয়ভাবে পৃষ্ঠা লোডকে কমিয়ে দেবে। প্রস্তাবিত নয়। এর পরিবর্তে is_file ব্যবহার করা যেতে পারে এবং নিশ্চিত করে নিন যে rc src পুরো url নয়: "http: // ..." তবে "img / ..."
বোগদান সি

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);
}

4
কীভাবে কোনও পাথ বিদ্যমান থাকতে পারে তবে ফাইলটি বিদ্যমান নেই, যখন পাথে ফাইলটির নাম থাকে?
অ্যান্ড্রু

4
আমি এর অর্থ এটি এমনকি কার্যকর হয় যদি ব্যবহারকারী কোনও পথ দেয় এবং একটি ফাইল না দেয় তবে ফাংশনটি সত্য হয় যদি তা ফাইল নাও হয় তবে তা আমার বন্ধু।
রাইজারেরো

আকর্ষণীয় এবং সম্ভাব্য গুরুত্বপূর্ণ পার্থক্য করতে। তবে আপনি যদি দস্তাবেজগুলি পরীক্ষা করেন তবে দেখে মনে হচ্ছে আপনার কেবল এই উদ্দেশ্যে IS_file ব্যবহার করা দরকার, ফাইল-এক্সেস্টগুলির সাথে একযোগে নয়।
অ্যান্ড্রু

ঠিক আছে, আমি আপনার কাছে এটি যোগ করতে পারি, (ব্যবহার করুন: পেপারচেস) কোনও ফাইল_এক্সবাদী উপস্থিত রয়েছে কিনা তা পরীক্ষা করতে চায়, তার সমস্যাটি হ'ল তিনি যদি ফাংশনটির জন্য কোনও পথ দেন এমনকি তিনি একটি সত্য প্রতিক্রিয়া পাবেন, সুতরাং পরিষ্কারভাবে যাচাই করতে যদি কোনও ফাইল উপস্থিত থাকে কি না তিনি আমার ফাংশনটি ব্যবহার করবেন, কারণ কোনও পথ পার হয়ে গেলেও পিএইচপি ফাংশনটি সত্য হয়ে যাবে, সুতরাং ফাংশনের নামটি খারাপ, এটি প্যাথ_এক্সিস্ট হওয়া উচিত () এবং আমার ফাংশনটি কোনও ফাইল উপস্থিত রয়েছে কিনা তা সত্যই যাচাই করে, কারণ এটি যদি মিথ্যা ফিরে আসে তবে একটি বিদ্যমান ফাইল পাথ ব্যতীত অন্য কিছু পাস করা হয়েছে। আমি আশা করি এটি এখন পরিষ্কার হয়ে গেছে।
রাইজারেরো

হ্যাঁ এটি ঠিকঠাক কাজ করবে, তবে 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

আপনাকে প্রথমে বুঝতে হবে এমন একটি জিনিস: আপনার কোনও ফাইল নেই
একটি ফাইল একটি ফাইল সিস্টেমের বিষয় , তবে আপনি এইচটিটিপি প্রোটোকল ব্যবহার করে আপনার অনুরোধ করছেন যা কোনও ফাইল ব্যতীত ইউআরএল সমর্থন করে না।

সুতরাং, আপনাকে আপনার ব্রাউজারটি ব্যবহার করে একটি অ্যাসিসিস্টিং ফাইলের জন্য অনুরোধ করতে হবে এবং প্রতিক্রিয়া কোডটি দেখতে হবে। যদি এটি ৪০৪ না হয় তবে কোনও ফাইল রয়েছে কিনা তা দেখতে আপনি কোনও র‌্যাপার ব্যবহার করতে অক্ষম এবং আপনাকে অন্য কিছু প্রোটোকল ব্যবহার করে আপনার সিডনির অনুরোধ করতে হবে, উদাহরণস্বরূপ, এফটিপি



7

যদি ফাইলটি আপনার স্থানীয় ডোমেনে থাকে তবে আপনার সম্পূর্ণ ইউআরএল রাখার দরকার নেই। কেবলমাত্র ফাইলের পথ। ফাইলটি যদি অন্য কোনও ডিরেক্টরিতে থাকে তবে আপনার সাথে "" পথের প্রিফেস করতে হবে।

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

প্রায়শই বার "।" ছেড়ে দেওয়া হয়েছে যা প্রকৃতপক্ষে এটি উপস্থিত না হলে ফাইলটি বিদ্যমান হিসাবে প্রদর্শিত হবে না।


3

তার মাঝে একটি প্রধান পার্থক্য নেই is_fileএবং file_exists

is_file (নিয়মিত) ফাইলগুলির জন্য সত্য ফেরত দেয়:

ফেরত পাঠায় 'সত্য' যদি ফাইলের নাম বিদ্যমান এবং একটি নিয়মিত ফাইল, মিথ্যা অন্যথায়।

file_exists ফাইল এবং ডিরেক্টরি উভয়ের ক্ষেত্রেই সত্য ফিরে আসে:

রিটার্নস 'সত্য' যদি ফাইল অথবা ডাইরেক্টরি ফাইলের নাম দ্বারা নির্দিষ্ট বিদ্যমান; অন্যথায় মিথ্যা


নোট: এছাড়াও চেক করুন এই Stackoverflow প্রশ্ন এই বিষয়ে আরও তথ্যের জন্য।


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";

}

আপনি যদি সিএমএস বা পিএইচপি ফ্রেমওয়ার্কের জন্য লেখেন তবে আমি যতদূর জানি ডকুমেন্টের রুট পাথের জন্য ধ্রুবককে সংজ্ঞায়িত করেছেন।

উদাহরণস্বরূপ ওয়ার্ডপ্রেস ABSPATH ব্যবহার করে যা আপনার কোড এবং সেইসাথে সাইট ইউআরএল ব্যবহার করে সার্ভারে ফাইলগুলির সাথে কাজ করার জন্য বিশ্বব্যাপী ব্যবহার করা যেতে পারে।

ওয়ার্ডপ্রেস উদাহরণ:

$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';

শর্টহ্যান্ড আইএফ বিবৃতি ব্যাখ্যা করেছে:

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

2

আপনি সিআরএল ব্যবহার করতে পারেন। আপনি কেবল শিরোনাম দেওয়ার জন্য সিআরএল পেতে পারেন, এবং শরীরকে নয়, এটি এটি আরও দ্রুত তৈরি করতে পারে। একটি খারাপ ডোমেন সবসময় কিছুটা সময় নিতে পারে কারণ আপনি সময়টির আউট করার অনুরোধটির জন্য অপেক্ষা করবেন; আপনি সম্ভবত সিআরএল ব্যবহার করে টাইমআউট দৈর্ঘ্য পরিবর্তন করতে পারেন।

এখানে উদাহরণ:

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;
}

}

রেফারেন্স ইউআরএল: https://hungred.com/how-to/php-check-remote-email-url-image-link-exist/


4
এখানে একটি সময়সীমা দরকার
মাইক কিউ


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

পড়ুন প্রথম 5 বাইট HTTP- র ব্যবহার গঠন 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 চিত্র থাকতে পারে
আপনার সাধারণ সংবেদন

4
হ্যাঁ - সুতরাং নির্দিষ্ট URL এ চিত্র বিদ্যমান image
পিটার

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) সম্পূর্ণরূপে ফাইলপথগুলির ক্ষেত্রে কেবল সত্যটি আসবে



আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.