سورس سافت | سورس پروژه | دانلود پروژه | سورس کد


م
ن
و
سورس سافت

ادامه مطلب

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



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

در بسیاری از مواقع در PHP باید فایل ها را جابجا کنید یا برخی از داده ها را درون آنها ذخیره کنید. بنابراین، بررسی وجود فایل در PHP می تواند به ما در جلوگیری از برخی رفتارهای غیرمنتظره کمک کند. PHP دارای توابع مختلفی برای رسیدگی به انواع مختلف پرس و جو مربوط به فایل ها است. در این آموزش ، ما یک مرور کلی از همه این عملکردها را به شما ارائه می دهیم تا بتوانید یکی را انتخاب کنید.

چرا باید وجود فایل را بررسی کنید؟

فرض کنید وب سایت شما به کاربران اجازه می دهد فایل های تصویری را در سرور شما بارگذاری کنند که بعداً بتوانند به آنها دسترسی پیدا کنند. اگر بسیاری از کاربران از سرویس شما برای بارگذاری چندین پرونده استفاده کنند، احتمالاً نام فایل با هم تداخل داشته باشد. در چنین مواردی ، باید بررسی کنید که فایل دیگری در محل ذخیره شده فایل بارگذاری شده یک کاربر وجود دارد یا خیر. سپس می توانید گزینه های تغییر دادن نام فایل یا اطلاع دادن به کاربر که بارگذاری آنها یک فایل موجود را بازنویسی می کند را انتخاب کنید. اگر داده ها را در PHP به یک فایل اضافه کنید و فایل مورد نظر به دلایلی حذف شود، عملکردی مانند ()file_put_contents یک فایل جدید با نام مشخص ایجاد کرده و داده های شما را در داخل فایل ایجاد شده ذخیره می کند. بنابراین بهتر است که قبل ازنوشتن داده های خود ، وجود فایل در PHP را بررسی کنید.

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

با استفاده از سه تابع مختلف می توانید وجود فایل در PHP ارا بررسی کنید.

اولین تابع ()file_exists است. این تابع یک پارامتر واحد را می پذیرد که مسیری است که فایل شما در آن قرار دارد. دستور فوق در صورتی که یک فایل یا دایرکتوری با مقدار filename$ موجود باشد، مقدار true و در غیر این صورت مقدار false باز می‌گرداند. همچنین باید به خاطر داشته باشیم که این تابع برای فایل‌هایی که به دلیل محدودیت‌های safe mode قابل دسترسی نیستند، نیز مقدار false باز می‌گرداند.

با استفاده از تابع ()is_file می توانید اطمینان حاصل کنید که مسیر مشخص شده به یک فایل اشاره می کند. (نه یک دایرکتوری) دقت کنید که این تابع تنها در صورتی که مسیر مشخص شده به یک فایل اشاره کرده باشد، مقدار true باز می‌گرداند. با استفاده از تابع ()is_dir می توانید وجود یا عدم وجود مسیر مشخص شده را بررسی کنید و همچنین مطمئن شوید که به دایرکتوری اشاره می کند.

<?php
$name = "squares.txt";
$directory = "squares.zip";
if(file_exists($name)) {
echo 'The file "'.$name.'" exists.';
}
if(is_file($name)) {
echo '"'.$name.'" is indeed a file.';
}
if(is_dir($directory)) {
echo '"'.$directory.'" turned out to be a directory.';
}
?>

خروجی:

OUTPUT
The file "squares.txt" exists.
"squares.txt" is indeed a file.
"squares.zip" turned out to be a directory.

توجه کنید که دو تابع ()is_file و ()is_dir زمانی که parent directory فاقد مجوزهای درست باشد، false برمی گرداند.

چگونه وجود یک فایل و قابل خواندن و نوشتن بودن آن را بررسی کنیم؟

با کمک دو تابع ()is_readable و ()is_writable می توانید علاوه بر وجود فایل، اطلاعات اضافی نیز در مورد ان بدست آورید. تابع ()is_readable وجود فایل یا دایرکتوری و قابل خواندن بودن آن را بررسی می کند و تابع ()is_writable نیز به بررسی وجود فایل یا دایرکتوری و قابل نوشتن بودن آن می پردازد.

<?php
$name = "squares.txt";
if(is_readable($name)) {
echo 'We can read "'.$name.'".';
}
if(is_writable($name)) {
echo 'We can also modify the contents of "'.$name.'".';
}
?>

خروجی:

OUTPUT
We can read "squares.txt".
We can also modify the contents of "squares.txt".

هنگام تفسیر مقدار برگشتی این دو تابع مراقب باشید. مثلا زمانی که تابع ()is_readable آن را false برمی گرداند، فکر می کنید فایل مورد نظر خوانا نیست، اما درصورت عدم وجود فایل نیز تابع false برمی گرداند.

نتایج ذخیره شده

مقادیر برگشتی تابع های ()file_exists()، is_file()، is_dir()، is_readable و ()is_writeable ذخیره می شود. یعنی فراخوانی های مکرر به یک تابع مثلا تابع ()is_file می تواند نتایج قدیمی را به شما نشان دهد.

PHP نتیجه این تابع را به منظور بهبود عملکرد ذخیره می کند. با این حال، مقادیر بازگشتی آنها ثابت می ماند حتی اگر فایل در طول اجرای اسکریپت تغییر کند.

نتایج فقط برای فایل هایی که از قبل موجود هستند ذخیره می شوند. یعنی فراخوانی تابع ()is_file برای فایل های ناموجود false برمی گرداند اما به محض ایجاد فایل بلافاصله true برمی گرداند. از سوی دیگر تابع برای پرونده ای که در اولین فراخوانی وجود داشته است حتی پس از حذف فایل true برمی گرداند.

<?php
$name = "squares.txt";
if(is_file($name)) {
echo '"'.$name.'" is indeed a file.';
}
// Manually delete the file while scripts waits.
sleep(5);
if(is_file($name)) {
echo '"'.$name.'" is indeed a file.';
}
clearstatcache();
if(is_file($name)) {
echo '"'.$name.'" is indeed a file.';
} else {
echo 'The file probably no longer exists.';
}
?>

اگر snippet کد بالا را برای فایل موجود اجرا کنید و سپس در حالی که اسکریپت منتظر است، آن را حذف کنید، فراخوانی ()is_file همچنان true برمی گردد. با این حال قبل از درخواست مجدد وجود فایل می توانید به سادگی با ()clearstatcache نتایج صحیح را بدست آورید.

خروجی:

OUTPUT
“squares.txt” is indeed a file.
“squares.txt” is indeed a file.
The file probably no longer exists.

دقت کنید که دستور ()unlink حافظه پنهان را بطور خودکار پاک می کند که بعدا نتایج جدیدی برای فراخوانی توابعی مثل ()is_file دریافت کنید.

نتیجه گیری

در این مقاله اهمیت بررسی وجود فایل ها در PHP ذکر شد. سپس شما را با توابع مختلفی آشنا کردیم که از آنها برای برای بررسی وجود فایل در PHP استفاده می شود. PHP نتایج برخی از فراخوانی های تابع را برای بهبود عملکرد ذخیره می کند. بنابراین ، قبل از انجام هر کاری با فایل ها، باید حافظه پنهان را پاک کنید.


لینک کوتاه مطلب :
https://sourcesoft.ir/?p=2499

برچسب‌ها :
, ,

درباره نویسنده

تیم محتوا 11 نوشته در سورس سافت دارد . مشاهده تمام نوشته های

دیدگاه ها


دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

logo-samandehi