کار با فایل ها در PHP – قسمت دوم

PHP   
22 سپتامبر 2014   

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

بررسی موجود بودن فایل با file_exists()

ممکن است فایلی که می خواهیم آن را باز کنیم وجود نداشته باشد، پس اگر فایلی وجود نداشته باشد در حالی که ما آن فایل را باز کرده ایم پیغام خطایی نمایش داده می شود. برای مثال اگر فایل data.txt وجود نداشته باشد و ما آن را باز کنیم پیغام خطایی مانند زیر نمایش داده می شود:

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

خروجی

پس می توان وجود فایل را بررسی کرد و سپس اقدام به باز کردن آن فایل نمود. تابع file_exists() همین کار را برای ما انجام می دهد. این تابع شامل یک پارامتر می باشد به نام filename که نام فایل مورد نظر را می گیرد و اگر این فایل وجود داشته باشد مقدار TRUE و در غیر این صورت مقدار FALSE برگردانده می شود. شکل کلی استفاده از این تابع به شکل زیر می باشد:

file_exists(filename);

برنامه ی زیر وجود فایل را بررسی کرده و پبغام مناسب را نمایش می دهد:

 

خروجی:

مثالی از استفاده از تابع file_exist() در PHP بررسی موجود بودن فایل

خروجی

 

بررسی امکان نوشتن در فایل با is_writable()

ممکن است در مواردی امکان نوشتن در یک فایل وجود نداشته باشد یعنی فایل به صورت Readonly یا فقط خواندنی باشد. در این زمان اگر ما تلاش به بازکردن فایل به شکلی که بخواهیم در آن بنویسیم با خطا روبرو می شویم. اگر فایل data.txt به شکل فقط خواندنی باشد با نوشتن کد زیر خروجی خطایی را نمایش می دهد:

 

خروجی:

مثالی از استفاده از تابع is_writable() در php برای بررسی قابلیت نوشتن در فایل

خروجی

تابعی نیز برای بررسی امکان نوشتن در یک فایل وجود دارد. این تابع is_writable() می باشد که شامل یک پارامتر به نام filename می باشد که نام فایل را دریافت کرده و اگر این فایل قابل نوشتن باشد مقدار TRUE و در غیر این صورت مقدار FALSE برگردانده می شود. شکل کلی استفاده از این تابع به شکل زیر می باشد:

is_writable(filename);

مثال زیر امکان نوشتن برای فایل data.txt را بررسی می کند و پیغام مناسب را نمایش می دهد:

 

خروجی:

مثالی از استفاده از تابع is_writable() در PHP برای بررسی قابلیت نوشتار یا readonly فایل ها

خروجی

به دست آوردن موقعیت کنونی اشاره گر با ftell()

در هرلحظه می توان موقعیت کنونی اشاره گر را با استفاده از تابع ftell() به دست آورد. این تابع شامل یک پارامتر می باشد به نام handle که فایل باز شده را مشخص می کند. با کار این تابع در مثال بیشتر آشنا خواهید شد. خروجی این تابع در صورت موفقیت عددی است که موقعیت اشاره گر را مشخص می کند و در صورت عدم موفقیت مقدار FALSE برگردانده می شود. شکل کلی استفاده از این تابع به شکل زیر می باشد:

ftell(handle);

به مثال زیر دقت کنید:

 

خروجی:

مثالی از استفاده از تابع ftell() برای بدست آوردن موقعیت کنونی اشاره گر

خروجی

همانطور که مشاهده کردید ابتدا موقعیت اشاره گر چاپ می شود (که برابر با 0 می باشد) و پس از چاپ مقادیری از فایل متنی که اشاره گر به تعداد 15 کاراکتر به جلو می رود، دوباره موقعیت اشاره گر چاپ می شود (که به تعداد کاراکترهای چاپ شده به جلو رفته یعنی 15 کاراکتر).

انتقال اشاره گر به ابتدای فایل با rewind()

تابع rewind() در هربار فراخوانی موقعیت اشاره گر را به ابتدای فایل باز شده برمی گرداند. این تابع تنها شامل یک پارامتر به نام handle می باشد که فایل باز شده را مشخص می کند. همچنین خروجی این تابع درصورت موفقیت TRUE و درصورت عدم موفقیت FALSE خواهد بود. شکل کلی استفاده از این تابع به شکل زیر می باشد:

rewind(handle);

به این مثال دقت کنید:

 

خروجی:

مثالی از استفاده از تابع rewind() برای انتقال اشاره گر به ابتدای فایل

خروجی

در این مثال ابتدا فایل data.txt را بازکزده و مقادیری از آن را خوانده و چاپ کرده ایم. سپس با استفاده از تابع rewind() اشاره گر را به ابتدای فایل برده و پس از خواندن مقادیر و چاپ محتویات مشاهده می شود که همان مقادیر قبلی چاپ شده است درصورتی که اگر از این تابع استفاده نمی کردیم مقادیر پس از عبارت ابتدایی چاپ می شدند.

انتقال اشاره گر به مکانی خاص با fseek()

با استفاده از تابع fseek() می توان موقعیت کنونی اشاره گر را به مکان دیگری از فایل متنی باز شده انتقال داد.

این تابع شامل 2 پارامتر اجباری و 1 پارامتر اختیاری می باشد. پارامتر ابتدایی handle می باشد که فایل بازشده را مشخص می کند. پارامتر دوم اجباری offset می باشد که محل جدید اشاره گر را مشخص می کند و پارامتر سوم whence می باشدکه اختیاری است و نوع حرکت را مشخص می کند. این پارامتر می تواند یکی از مقادیر زیر را دریافت کند:

  • SEEK_SET: در این حالت اشاره گر دقیقا برابر با مقدار offset (پارامتر دوم) قرار می گیرد. مقدار پیشفرض پارامتر whence این می باشد.
  • SEEK_CUR: در این حالت موقعیت جدید اشاره گر برابر با موقعیت فعلی اشاره گر به علاوه مقدار offset قرار خواهد گرفت.
  • SEEK_END: در این حالت موقعیت جدید اشاره گر برابر با آخرین کاراکتر فایل منهای مقدار offset می باشد (مقدار offset در این حالت باید مقدار منفی داشته باشد).

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

fseek(handle, offset, whence);

به مثال زیر دقت کنید:

 

خروجی:

مثالی از اسفاده از تابع fseek() برای انتقال اشاره گر به محل دلخواه

خروجی

یک بار دیگر به مقادیر موجود در فایل data.txt نگاهی بیندازید:

Hello World!!!

Welcome to PHP learning totourial…

It’s last line of test text.

 

در مثال بالا ابتدا فایل data.txt به صورت خواندنی (با استفاده از کاراکتر r) باز شده است. سپس با استفاده از تابع fseek() و مقدار SEEK_SET برای پارامتر whence اشاره گر به مقدار 15 کاراکتر از ابتدا به جلو می رود (به خط بعدی می رود). سپس با استفاده از تابع fgets() یک خط از این فایل چاپ می شود (پس از این عمل اشاره گر به خط بعد می رود). و در آخر مقدار 5 کاراکتر (از خط آخر فایل ما) با استفاده از مقدار SEEK_CUR برای پارامتر whence به جلو رفته (از عبارت It’s چشم پوشی می شود) و یک بار دیگر با استفاده از تابع fgets() تا انتهای خط چاپ می شود.

خواندن تمام محتویات فایل با fpassthru()

با استفاده از تابع fpassthru() می توان محتویات فایل بازشده را تا انتهای فایل چاپ می کند. شروع این عمل از آخرین محل اشاره گر صورت می گیرد.

تنها پارامتر این تابع handle می باشد که موقعیت اشاره گر را مشخص می کند.

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

fpassthru(handle);

مثال زیر تمام محتویات فایل data.txt را چاپ می کند:

 

خروجی:

مثالی از استفاده از تابع fpassthru() در PHP برای خواندن تمام محتویات فایل

خروجی

اما اگر خروجی این مثال را چاپ کنیم برابر با 82 می باشد (تعداد کاراکتر های چاپ شده).

می توان با استفاده از این تابع محتویات یک صفحه در اینترنت را نیز چاپ کرد. یعنی مثال زیر تمام محتویات سایت مایکروسافت را چاپ می کند: