تعداد بازدید: 44

FileSystem در PHP

رفتار تابعی در مقابله با فایل ها و دایرکتوری ها دقیقا مثل رفتار نرم افزار های FileManager ها در سیستم عامل هاست. Action ها و ویژگی های یک فایل یا دایرکتوری و همچنین نحوه ویرایش و یا ساخت فایل.

در سیستم عامل های مبتنی بر Unix ما File و Directory داریم. در زبان PHP نیز توابعی مرتبط با فایل ها و دایرکتوری ها داریم.

برای دسترسی به فایل ها ما به مسیر آن فایل در سیستم عامل نیاز داریم. برای آدرس دهی باید از مسیر جاری اقدام کنیم که برای بدست آوردن مسیر جاری از ثابت __DIR__ استفاده می کنیم. دقت داشته باشید که PATH با URL متقاوت است.

برای ساخت ، نوشتن ، بروزرسانی و خواندن فایل باید سه مرحله را انجام دهید:

  • fopen: باز کردن فایل . در این مرحله باید mod فایل را مشخص کنید.
  • ACTION : هر عملیاتی با توجه به mod که با آن فایل را باز کرده اید انجام دهید مثل نوشتن ، الحاق ، ایجاد و …
  • fclose : بستن فایل . در این مرحله cursor با توجه به ACTION هر تغییری کرده باشد به حالت اولیه بر می گردد.

فایل را از روی مسیر آن باز می کنیم و محتوای آن را می خوانیم و بعد آن را می بندیم. در این مثال handler فایل بعد از باز شدن و همچنین mod باز شدن آن در طی ادامه مسیر مهم می باشد.

mod های باز کردن فایل با شکل زیر خلاصه شده است :

نام مد عملیات موقعیت CURSOR اگر فایل موجود نباشد اگر فایل از قبل موجود باشد
r خواندن ابتدای فایل خطا می دهد الزامی است
r+ خواندن/نوشتن ابتدای فایل خطا می دهد الزامی است
w نوشتن ابتدای فایل یک فایل ایجاد می کند فایل را باز می کند و محتویات را پاک می کند
w+ خواندن/نوشتن ابتدای فایل یک فایل ایجاد می کند فایل را باز می کند و محتویات را پاک می کند
a افزودن انتهای فایل یک فایل ایجاد می کند فایل را باز کرده و محتویات جدید را به آن اضافه می کند
a+ خواندن/افزودن انتهای فایل یک فایل ایجاد می کند فایل را باز کرده و محتویات جدید را به آن اضافه می کند
x نوشتن ابتدای فایل یک فایل ایجاد می کند FALSE بر میگرداند
x+ خواندن/نوشتن ابتدای فایل یک فایل ایجاد می کند FALSE برمیگرداند

ACTION که در مرحله قبل توضیح دادیم می تواند یکی از موارد زیر باشد:

fwrite : این تابع برای نوشتن در فایل استفاده می گردد که محتویات جدید و handler قبلی را می گیرد و با توجه به mode عملیات نوشتن را انجام می دهد.

نکته : این که محتوای جدید را الحاق کند یا این که روی محتوای قبل بنویسد(محتوای قبل را پاک کند) بسته به نوع مد باز شدن فایل در مرحله قبل دارد.

fread : در این تابع محتویات فایل را می خوانیم :

نکته : همچنین ما توابعی داریم که با استفاده از آن ها می توان به صورت کاراکتری یا رشته ای خواند. با استفاده از تابع fgetc کاراکتری و تابع fgets رشته ای محتویات فایل را می توان گرفت. در استفاده از این توابع ما تا زمانی که فایل را نبسته باشیم موقعیت cursor تغییری نمی کند.

توابع ACTION در ابتدای خود f دارند و باید file pointer را به آن ها بدهیم . همچنینم mod کنترل ACTION در آن ها مهم می باشد.

Files Magic constants

__DIR__ : فرض کنید که یک کلاس در مسیر inc با نام controller.php دارید. در روت پروژه فایلی با نام index.php دارید . حال در یکی از متد های فایل کلاس controller می خواهید فایلی با نام assets.json را بخوانید.

این کلاس در فایل index.php فراخوانی می شود. مسیری که می دهید باید از روت باشد مگر این که در متد کلاس از ثابت __DIR__ استفاده کرده باشید. این ثابت مسیر فایل جاری را از ابتدای هاست (کاربر سیستم عامل سرور) می دهد و شما نیاز به در نظر گرفتن محل فراخوانی فایل جاری برای مسیر دهی ندارید.

داخل متد controller کافیست به این شکل فایل assets.json را بخوانیم:

__FILE__ : مسیر کامل فایل جاری را می دهد (full path and filename) همچنین تابع dirname مسیر را از روی مسیر فایل بر میگرداند که مرتبط با این ثابت است.

Files and Directory Fucntions

file_exists : برای چک کردن این که فایل موجود است یا خیر . معمولا قبل از باز کردن فایل برای جلوگیری از خطا برای مد هایی که در صورت نبود فایل خطا می دهند با این تابع چک می کنیم.

is_dir , is_file : برای چک کردن این که وردی داده شده فایل یا دایرکتوری است.

mkdir , rmdir : برای ایجاد یا حذف یک دایرکتوری.

filetype , filesize , filemtime : این توابع برای دریافت اطلاعات فایل ها نظیر size , type , created date , modified date می باشند.

rename : این تابع برای تغییر نام و جابجایی فایل استفاده می شود و عملکردی مشابه دستور mv در BashScript دارد.

copy : برای کپی فایل . برای cut کردن فایل باید از تابع renmae استفاده کنیم.

unlink : برای حذف فایل استفاده می شود.


disk_free_space , disk_total_space : برای محاسبه فضای باقیمانده و فضای کل یک مسیر .

glob : این تابع پر کاربرد لیست فایل هایی مسیر جاری را با استفاده از یک pattern بر می گرداند.


readfile : این فایل برای خواندن و چاپ محتویات فایل می باشد.

file_get_content , file_put_content : این توابع برای خواندن و نوشتن روی کل فایل می باشد. این توابع باز و بستن فایل را در خود دارند و نیازی به مد و handler ندارند.

نکته : گاها از تابع file_get_content برای کار بار وب سرویس ها استفاده می شود. مثلا درخواست ها را از طریق url به آن می دهیم و خروجی را می گیریم.

move_uploaded_file : این تابع برای انتقال فایل از مسیر موقت به مسیر اصلی می باشد. این تابع و دو تابع قبل عملکردی حدودا مشابه دارند. در زمان آپلود فایل از طریق درخواست های FILES از این تابع استفاده می کنیم.

FILES Predefined Variable

زمانی که یک فرم برای آپلود فایل به صورت single , multiple می سازید باید ابتدا enctype آن را به فرم با مقدار multipart/form-data بدهید که برای file handling از متغیر $_FILES استفاده می کنید و برای سایر فیلد ها (اعم از متنی و رادیو چک باکس) از متغیر $_POST استفاده می کنیم.

خروجی متغیر $_FILES را که print بگیریم به شکل زیر است :

  • name : نام فایل آپلود شده
  • type : نوع فایل آپلود شده
  • tmp_name : مسیری که موقتا فایل در آن قرار گرفته است.
  • error : خطاهایی که به صورت یک عدد از 0 تا 8 می باشد که هر کدام معنی خود را دارد و به یک رشته خاص مپ می گردد.مثلا 0 یعنی UPLOAD_ERR_OK
  • size : اندازه فایل آپلود شده به بایت (Byte)

در نهایت باید با استفاده از تابع move_uploaded_file فایل را از مسیر موقت به مسیر فایل های خود در پروژه منتقل کنیم.

به ازای هر فایل آپلود شده باید مسیر ، نوع ، سایز و نام آن را در پایگاه داده ذخیره کنید تا بعد بتوانید به آن دسترسی پیدا کنید.

مطالب مشابه

هدر های Http در درخواست و پاسخ

Http Headers (قسمت سوم)

Http Request و Http Response درخواست و پاسخ بر اساس پروتکل Http می باشند و می توان از این ها برای ارتباط میان نرم افزار...

عبارات منظم یا عبارات باقاعده

عبارات منظم RegularExpression

در این قسمت قصدداریم تا با یکی از مباحث پیشرفته یعنی عبارات منظم یا عبارات باقاعده (regular expression) آشنا بشیم....

کار با gdLibrary در php

کتابخانه gd برای کار بار تصاویر به صورت پویا در زبان های برنامه نویسی نظیر PHP می باشد که توسط زبان C نوشته شده است....

اشتراک گذاری :

برنامه نویسی رو با زبان C در هفده سالگی شروع کردم . در حال حاضر به برنامه نویسی php برپایه معماری MVC , HMVC و همچنین سیستم مدیریت محتوای WordPress و فریم ورک محبوب لاراول علاقه مند هستم و دوست دارم اطلاعاتم رو با شما به اشتراک بگذارم.

۰ دیدگاه برای FileSystem در PHP

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

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