ورود

آموزش بررسی وجود فایل در PHP با تابع file_exists

برای پخش ویدیو کلیک کنید
مالک پست تعیین نشده
clock icon مدت زمان مطالعه: 10 دقیقه
comment icon 0 نظرات
1404/09/01

تا حالا پیش اومده بخوای با PHP یه فایل رو باز کنی ولی یهو با ارور File not found رو به‌ رو بشی؟!! این اتفاق خیلی رایجه و حتی برنامه‌ نویسای حرفه‌ ای هم گاهی گرفتارش میشن!! واقعیت اینه که قبل از هر کاری چه بخوای فایل رو بخونی، بنویسی یا پاکش کنی باید اول مطمئن شی اون فایل واقعاً وجود داره.

اینجاست که تابع قدرتمند و ساده‌ file_exists() وارد میشه و کمک می‌ کنه قبل از هر کاری، وجود فایل یا پوشه رو بررسی کنی و از بروز خطاهای غیرمنتظره جلوگیری کنی .

توی این مقاله یاد می‌ گیرید چطور با روش‌ های ساده و حرفه‌ ای، وجود فایل‌ در PHP بررسی کنید و برنامتون رو مطمئن و بدون خطا اجرا کنید.

آموزش نحوه بررسی وجود فایل در PHP

تابع file_exists() در PHP چیست؟

تابع file_exists() بررسی می‌ کنه که مسیر مورد نظر (فایل یا پوشه) وجود داره یا نه و فقط یکی از دو مقدار بولی برمی‌ گردونه :

  • true اگر وجود داشته باشه

  • false اگر وجود نداشته باشه


$file = "example.txt";
if (file_exists($file)) {
    echo "File $file exists!";
} else {
    echo "File $file not found.";
}

تابع file_exists() در PHP چیست؟

نکته: این تابع هم برای فایل‌ ها و هم برای دایرکتوری‌ ها (پوشه‌ ها) کاربرد داره. یعنی باهاش می‌تونی مسیر یه پوشه رو هم چک کنی:

آموزش نحوه بررسی وجود فایل در PHP

گاهی توی پروژه‌ هات لازمه بدونی یه فایل یا پوشه واقعاً وجود داره یا نه، قبل از اینکه بخوای روش عملی انجام بدی. تابع file_exists() فقط مخصوص فایل نیست بلکه مسیر پوشه‌ ها رو هم می‌ تونی باهاش بررسی کنی:

$file = "example.txt";
if (file_exists($file)) { 
echo "File $file exists!";
} else { 
echo "File $file not found.";
}

آموزش نحوه بررسی وجود فایل در PHP - 1

نکته حرفه‌ ای:

طبق تجربه شخصی من توصیه میکنم که برای اطمینان بیشتر از نوع مسیر، از ترکیب file_exists() با توابع is_file() یا is_dir() استفاده کنی تا بفهمی مسیرت دقیقاً فایل هست یا پوشه:

$dir = "uploads/";
if (file_exists($dir)) { 
echo "The folder '$dir' exists.";
} else { 
echo "The folder '$dir' does not exist.";
}

آموزش نحوه بررسی وجود فایل در PHP - 2

تفاوت مسیر نسبی و مطلق در بررسی فایل‌ ها

یکی از اشتباهات رایج در استفاده از file_exists()، اشتباه گرفتن مسیر نسبی (relative path) با مسیر مطلق (absolute path) است. برای مثال، مسیر نسبی بر اساس محل اجرای اسکریپت فعلی بررسی میشه اما مسیر مطلق همیشه از ریشه‌ سیستم فایل شروع میشه، مثلاً:

// Relative path
file_exists("data/config.json");

// Absolute path
file_exists("/var/www/html/data/config.json");

تفاوت مسیر نسبی و مطلق در بررسی فایل‌ ها

تجربه‌ شخصی:

تو پروژه‌ هایی که مسیرها پویا (dynamic) هستن، همیشه پیشنهاد می‌ کنم از __DIR__ استفاده کنید تا مسیرها دقیق‌تر باشن:

$configPath = __DIR__ . "/data/config.json";
if (file_exists($configPath)) { 
echo "Config file found!";
}

تفاوت مسیر نسبی و مطلق در بررسی فایل‌ ها - 1

نکات حرفه‌ ای و بهترین شیوه‌ ها (Best Practices)

  1. برای تشخیص نوع مسیر از توابع کمکی استفاده کن:

    • is_file(): بررسی کنه مسیر واقعاً فایل باشه

    • is_dir(): بررسی کنه مسیر یه پوشه باشه

    if (is_file($path)) echo "It's a file!";
    if (is_dir($path)) echo "It's a directory!";
    
    نکات حرفه‌ ای و بهترین شیوه‌ ها برای بررسی وجود فایل در PHP -1
  2. دسترسی‌ ها (permissions) رو جدی بگیر.
    اگه PHP به یه فایل دسترسی خوندن یا نوشتن نداشته باشه، حتی اگه اون فایل وجود داشته باشه، ممکنه نتیجه‌ false بگیری.

  3. کش سیستم فایل (File Cache):
    بعضی وقتا PHP نتیجه‌ بررسی فایل‌ ها رو کش می‌ کنه. برای اطمینان از بررسی مجدد، میتونی از clearstatcache() استفاده کنی.

    clearstatcache();
    file_exists("example.txt");
    نکات حرفه‌ ای و بهترین شیوه‌ ها برای بررسی وجود فایل در PHP -3
  4. ورودی‌ های کاربر رو اعتبارسنجی کن.
    هیچ‌ وقت مسیر فایل رو مستقیم از کاربر نگیر چون ممکنه منجر به Directory Traversal Attack بشه.

چند مثال کاربردی برای بررسی وجود فایل در PHP

1- بررسی چند فایل پشت‌ سر‌ هم :

تو پروژه‌ های آپلود یا مدیریت فایل، ممکنه بخوای چند مسیر رو با هم چک کنی :

$files = ["file1.txt", "file2.txt", "images/photo.jpg"];
foreach ($files as $f) {
echo file_exists($f) ? "? $f exists\n" : "? $f not found\n";
}

مثال کاربردی برای بررسی وجود فایل در PHP - بررسی چند فایل پشت‌ سر‌ هم

2- اگه فایل لاگ نبود، بسازش:

یه مثال حرفه‌ ای‌ تر برای برنامه‌ نویسای باتجربه‌ تر:

$logFile = "logs/app.log";
if (!file_exists($logFile)) { 
if (!file_exists(dirname($logFile))) { 
mkdir(dirname($logFile), 0755, true); 
} 
file_put_contents($logFile, "### Log Start ####\n");
}
echo "The log file is ready!";

بهترین روش:

قبل از هر file_put_contents() در پروژه‌ های بزرگ، بررسی وجود فایل و مجوزها همیشه یک قدم هوشمندانه‌ ست.

مثال کاربردی برای بررسی وجود فایل در PHP - ساخت فایل لاگ

خطاهای رایج و نکات امنیتی

  • مسیر اشتباه یا تفاوت حروف بزرگ و کوچک تو سیستم‌ عامل‌ های حساس (مثل Linux) باعث خطا میشه.

  • اگه فایل رو حذف کردی و بلافاصله file_exists() زدی، ممکنه هنوز نتیجه‌ true بده (به خاطر کش).

  • برای امنیت بیشتر، همیشه از مسیرهای کنترل‌ شده و ثابت استفاده کن.

بینش حرفه‌ ای: چرا بررسی وجود فایل این‌ قدر مهمه؟

تو سیستم‌ های واقعی بررسی وجود فایل فقط برای جلوگیری از خطا نیست بلکه بخشی از طراحی مقاوم (Robust Design) محسوب میشه .

خیلی از خطاهای ناگهانی که توی پروژه‌ های واقعی رخ میدن در واقع نتیجه‌ غفلت از همین بررسی ساده هستن. تو پروژه‌ های حرفه‌ ای، معمولاً پیش از هر نوع تعامل با فایل‌ ها، این سه مرحله رعایت میشه:

  1. بررسی وجود مسیر (file_exists)

  2. بررسی نوع مسیر (is_file یا is_dir)

  3. بررسی مجوزها (is_readable, is_writable)

سخن آخر

تابع file_exists() شاید در نگاه اول خیلی ساده به نظر بیاد، اما همین تابع کوچیک می‌ تونه تفاوت بین یه کد مطمئن و یه پروژه‌ پر از خطا باشه. خیلی وقتا برنامه‌ نویسا مستقیم سراغ باز کردن یا ویرایش فایل میرن، بدون اینکه مطمئن بشن اون فایل واقعاً وجود داره یا نه و همین باعث خطاهای ناگهانی، صفحات خالی یا حتی از کار افتادن بخشی از سایت میشه.

توی پروژه‌ های واقعی مثل سیستم‌ های آپلود یا مدیریت فایل و حتی فروشگاه‌ های اینترنتی، همین کار ساده می‌ تونه از بروز خیلی مشکلات جلوگیری کنه. قبل از اینکه به فایل یا پوشه دسترسی پیدا کنی، با استفاده از file_exists() مطمئن شو که وجود داره.

این مقاله چقدر برای شما مفید بود؟
0 امتیاز از 0 رای
questions
سوالات متداول بررسی وجود فایل در PHP

بله، is_file('path/to/file') فقط فایل‌ ها را بررسی می‌ کند و پوشه‌ ها را نادیده می‌ گیرد.

با تابع is_dir('path/to/directory').

دیدگاه و پرسش

هیچ نظری ثبت نشده است