পিএইচপিতে is_file বা file_exists


117

একটি নির্দিষ্ট স্থানে ($ পথ। $ ফাইল_নাম) কোনও ফাইল এইচডিডি তে আছে কিনা তা আমাকে পরীক্ষা করতে হবে।

কোনটি is_file()এবং file_exists()ফাংশনগুলির মধ্যে পার্থক্য এবং কোনটি পিএইচপি ব্যবহার করার জন্য আরও ভাল / দ্রুত?

উত্তর:


167

is_file()falseপ্রদত্ত পথটি যদি কোনও ডিরেক্টরিতে নির্দেশ করে তবে ফিরে আসবে । প্রদত্ত পথটি যদি কোনও বৈধ ফাইল বা ডিরেক্টরিতে নির্দেশ করে তবে file_exists()ফিরে আসবে । সুতরাং এটি সম্পূর্ণরূপে আপনার প্রয়োজনের উপর নির্ভর করবে। আপনি যদি এটি নির্দিষ্টভাবে জানতে চান তবে এটি কোনও ফাইল বা না, ব্যবহার করুন । অন্যথায়, ব্যবহার করুন ।trueis_file()file_exists()


1
আমি যতদূর জানি, if_file কেবলমাত্র ডিরেক্টরি নয়, প্রতীকী লিঙ্কগুলির জন্যও ব্যর্থ।
স্টিফস

is_file () ফাইলটি ডিরেক্টরিতে উপস্থিত থাকলে বা মিথ্যা ফাইল উপস্থিত না থাকলে সত্য প্রত্যাবর্তন করুন 2020 এ যাচাই করেছিলাম পিএইচপি সংস্করণ এটি আপডেট হতে পারে
হেইসুশিল

37

is_file()দ্রুততম, তবে সাম্প্রতিক মাপদণ্ডটি file_exists()আমার কাছে কিছুটা দ্রুত that সুতরাং আমি অনুমান করি এটি সার্ভারের উপর নির্ভর করে।

আমার পরীক্ষার মানদণ্ড:

benchmark('is_file');
benchmark('file_exists');
benchmark('is_readable');

function benchmark($funcName) {
    $numCycles = 10000;
    $time_start = microtime(true);
    for ($i = 0; $i < $numCycles; $i++) {
        clearstatcache();
        $funcName('path/to/file.php'); // or 'path/to/file.php' instead of __FILE__
    }
    $time_end = microtime(true);
    $time = $time_end - $time_start;
    echo "$funcName x $numCycles $time seconds <br>\n";
}

সম্পাদনা: @ টিভি মন্তব্য করার জন্য ধন্যবাদ। চক্রের সংখ্যা 1000 থেকে 10 কে পরিবর্তিত হয়েছে। ফলাফল হলো:

  1. যখন ফাইল বিদ্যমান :

    is_file x 10000 1.5651218891144 সেকেন্ড

    file_exists x 10000 1.5016479492188 সেকেন্ড

    is_readable x 10000 3.7882499694824 সেকেন্ড

  2. যখন ফাইলটির অস্তিত্ব নেই :

    is_file x 10000 0.23920488357544 সেকেন্ড

    file_exists x 10000 0.22103786468506 সেকেন্ড

    is_readable x 10000 0.21929788589478 সেকেন্ড

সম্পাদনা করুন: সরানো ক্লিয়ারস্ট্যাটচে (); লুপ ভিতরে। ধন্যবাদ সিজে ডেনিস


7
এই বেঞ্চমার্কটি কাজ করার জন্য, আপনাকে ক্লিয়ারস্ট্যাটচে () যুক্ত করা উচিত; যেহেতু is_file এবং file_exists এর ফলাফলগুলি স্ক্রিপ্ট জুড়ে ক্যাশে করা হয়। যাইহোক file_exists () কিছুটা ধীরে ধীরে, তবে আপনি প্রায় 100K ফাইল চেক সম্পাদন না করে কোনও পার্থক্য করা উচিত নয়। php.net/manual/en/function.clearstatcache.php
টিভি

1
আমিও এর is_file()চেয়ে দ্রুত খুঁজে পেয়েছি file_exists()। যদি আপনি জানেন যে এটি কোনও ফাইল (এবং কোনও ডিরেক্টরি নয়) তবে অবশ্যই পরিবর্তে এটি ব্যবহার করুন।
জোনাথন

1
অদ্ভুত, এখন মনে হচ্ছে 'ফাইল_এক্সিস্ট' 'is_file' এর চেয়ে দ্রুত।
ওয়েইনহ্যামজ

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

2
@ ব্র্যান্ডিন লোকেরা আগ্রহী কারণ অনেক পরিস্থিতিতে আপনি ইতিমধ্যে জেনে গেছেন যে আপনি কোনও ফাইল বা ডিরেক্টরি অনুসন্ধান করছেন কিনা, সুতরাং এটি বিদ্যমান কিনা তা শুধুমাত্র গুরুত্বপূর্ণ বিষয়। সুতরাং যদি is_dir()পরিণত হয় যদি file_exists()এটির চেয়ে 20% দ্রুত হয় (যা এটি বিটিডব্লিউ নয়), তবে এটি একটি গুরুত্বপূর্ণ পার্থক্য হতে পারে যদি আপনি কেবল যাইহোক ডায়ারদের জন্য পরীক্ষা করছেন ...
বাইসন

2

আমরাও।

is_file () ফাইলটি উপস্থিত না থাকলে সত্য ফিরে আসতে পারে।

file_exists () ফাইলটি ডিরেক্টরি হলে সত্যটি ফিরে আসতে পারে।

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

গতি এখানে গুরুত্বপূর্ণ নয় কারণ তারা এক নয়। শুধুমাত্র একটি ফাংশন সম্পর্কিত হলে একটি ব্যবহার করুন এবং এটি আরও দ্রুত হবে।


1

আমি জানি এই পোস্টটি পুরানো তবে এই ফাংশনগুলির মধ্যে পার্থক্য কেবল তাদের আচরণ নয়। আপনি যদি বড় ফাইলের অস্তিত্ব পরীক্ষা করতে is_file () ব্যবহার করেন তবে 2 টিরও বেশি যান। আপনি অবাক হবেন। ফাইল বিদ্যমান নেই। :( তবে আপনি যদি ফাইল_একজিস্ট () দিয়ে পরীক্ষা করেন তবে তা কার্যকর।


0

is_fileযদি ব্যাকস্ল্যাশ সঙ্গে এটি ব্যবহার দ্রুততর হবে: \is_file। এক্ষেত্রে পিএইচপি ওপচী অপটিমাইজেশন সরবরাহ file_existsকরবে না হয় না।

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