در هنگام برنامه نویسی با زبان PHP نیاز داریم تا محتوای یک فایل مشخص را خوانده یا اطلاعاتی را در آن بنویسیم.

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

در این مطلب قصد داریم تا روش های خواندن فایل و کار با محتوای فایل ها را بررسی کنیم.

خواندن فایل در PHP

 

تابع file_get_contents() یک تابع از پیش تعریف شده در PHP است که با کمک آن به راحتی میتوانید محتویات درون یک فایل متنی با فرمت های txt یا ini و … را بخوانید.

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

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

استفاده از این تابع بسیار ساده است؛ تابع file_get_contents() یک ورودی میگیرد که آدرس فایل است و پس از پردازش، محتوای فایل را به عنوان خروجی خود باز میگرداند.

 

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

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

 

در قطعه کد بالا، متن های درون فایل مورد نظر از ایندکس شماره 10 تا 24 ایندکس (حرف) بعد از آن به عنوان خروجی بازگردانده میشود.

لازم به ذکر است که از تابع file_get_contents() برای دریافت یک URL (کدهای HTML یک آدرس اینترنتی) نیز استفاده میشود.

 

برای کار با فایل های بزرگتر و حجیم تر و یا بسته به نیاز برنامه شما، ممکن است بهتر باشد تا جزئیات باز و بسته کردن و دسترسی به محتوای فایل را خودتان مشخص کنید.

با مشخص کردن جزئیات میتوانید در هنگام باز کردن یک فایل، در آن تغییراتی ایجاد کنید یا دقیقا همان محتوایی که از درون فایل نیاز دارید را در یک لحظه بخوانید.

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

 

برای استفاده از تابع fopen() نیاز است تا دو آرگومان ورودی برای آن تعریف شود؛ اول فایل مورد نظر و پارامتر دوم نوع یا حالت باز شدن فایل؛ که در کد مثال بالا از r به معنای باز کردن برای خواندن استفاده شده است.

تابع یک Handle یا Stream را به عنوان خروجی باز میگرداند که از آن میتوان برای کار روی محتویات فایل استفاده کرد.

 

برخی از حالت (Mode) های رایج که برای باز کردن فایل ها مورد استفاده قرار میگیرد به شرح زیر است:

– حالت r : فایل را به صورت فقط خواندنی (Read Only) و از ابتدای آن باز کرده و محتویات آنرا تغییر نمیدهد. در صورتی که فایل وجود نداشته باشد، اجرای دستور منجر به خطا میشود.

– حالت w : فایل را به صورت فقط نوشتنی (Write Only) و از ابتدای آن باز کرده و با انجام تغییر، محتویات فعلی فایل حذف خواهد شد. در صورتی که فایل وجود نداشته باشد، دستور سعی میکند فایلی با همان نام در مسیر داده شده ایجاد کند.

– حالت a : فایل را به صورت فقط نوشتنی (Write Only) و از انتهای آن باز کرده و با انجام تغییر، محتوای اضافه شده به انتهای فایل موجود اضافه میشود. در صورتی که فایل وجود نداشته باشد، اقدام به ایجاد فایل با همان نام و در مسیر داده شده میکند.

 

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

 

توابع مختلفی را میتوان روی متغیری که تابع fopen() بازگردانده اجرا کرد.

برای مثال اگر بخواهیم محتوای فایل را به صورت خط به خط خوانده و چاپ کنیم، میتوانیم تابع fgets() را روی متغیر صدا بزنیم.

برای درک بهتر موضوع به مثال زیر توجه کنید:

 

با استفاده از صدا زدن تابع feof() روی متغیر فایل میتوانیم بفهمیم که آیا به انتهای فایل رسیده ایم یا خیر.

درون حلقه مثال فوق، میتوان هر گونه عملیات دلخواهمان را انجام دهیم. (شمارش خطوط موجود در فایل، جستجو در محتوا و …)

 

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