نوشتن فایل در PHP

در پیاده سازی پروژه با زبان برنامه نویسی PHP معمولاً نیاز پیدا میکنیم تا یک فایل را خوانده، بر اساس اطلاعات موجود در آن تصمیم گیری کرده و یا اطلاعاتی را داخل فایل بنویسیم.

روش های مختلفی برای خواندن و نوشتن محتوای یک فایل در زبان PHP وجود دارد؛ در ادامه این مقاله به بررسی نحوه استفاده روش های نوشتن و ایجاد یک فایل خواهیم پرداخت.

 

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

 

ایجاد و باز کردن فایل با PHP

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

$file = fopen("options.ini", "w");

 

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

تابع fopen() دو پارامتر ورودی میگیرد؛ اولین ورودی مسیر و نام فایل و دومین ورودی سطح دسترسی که روی هندلر فایل ایجاد خواهد شد را مشخص خواهد کرد.

 

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

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

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

$file = fopen("options.ini", "w") or die("در کار با فایل خطایی رخ داده است!");

 

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

 

نوشتن متن در فایل

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

این تابع دو مقدار ورودی دریافت میکند، مقدار ورودی اول یک شی از نوع File handler (هندلر) بوده و مقدار دوم رشته ای (String) که میخواهیم درون فایل نوشته شود را مشخص میکند.

$txt = "This is a test text!";
fwrite($file, $txt);

 

نوشتن درون فایل با تابع fwrite

میتوانیم تابع fwrite() را روی یک فایل باز شده چندین بار صدا بزنیم و در ادامه اطلاعات نوشته شده قبلی، اطلاعات دیگری بنویسیم. برای مثال قطعه کد زیر یک متن را در دو خط پشت سر هم درون فایل مینویسد.

$txt = "This is a test text!";
fwrite($file, txt);
fwrite($file, "\n");
fwrite($file, $txt);

 

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

برای بستن فایل باز شده از تابع fclose() استفاده میکنیم که به عنوان تنها ورودی، متغیر مربوط به File Handler را ورودی میگیرد.

fclose($file);

 

اکنون فایل options.ini ما محتوایی مشابه زیر خواهد داشت.

This is a test text!
This is a test text!

 

نوشتن در ادامه محتوای فایل

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

برای اینکه بتوانیم دیتاهای خود را در ادامه اطلاعات قبلی در فایل ثبت کنیم، می بایست فایل را در حالت append (به معنای الحاق کردن) باز کنیم.

به جهت باز کردن فایل برای افزودن محتوای جدید به آن، تابع fopen() را به جای w با a به عنوان آرگومان دوم صدا میزنیم.

$aFile = fopen("options.ini", "a");
fwrite($aFile, "\n");
fwrite($aFile, "www.SabzElco.ir");
fclose($aFile);

 

با اجرای قطعه کد فوق، به انتهای فایل قبلی، یک خط جدید و با محتوای www.SabzElco.ir اضافه خواهد شد.

 

نوشتن رشته با طول مشخص

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

تابع fputs() به عنوان یک تابع کمکی برای fwrite() استفاده میشود. این تابع سه ورودی میگیرد که دو ورودی اول اجباری و ورودی سوم اختیاری است.

ورودی اول این تابع همان متغیر فایل هندلر و ورودی دوم دیتا (رشته) مورد نظر ما جهت ثبت در فایل می باشد.

این تابع تا زمانی نوشتن را ادامه میدهد که به پایان فایل یا یک اندازه مشخص (length که در پارامتر سوم مشخص میشود) برسد.

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

همانطور که در ابتدا نیز گفته شد، از این تابع معمولاً استفاده نمیشود و در اکثر کدها از تابع fwrite() برای نوشتن روی فایل استفاده شده است.

 

توجه داشته باشید که هر دو تابع fwrite() و fputs() دارای ویژگی binary-safe هستند، به این معنا که با استفاده از این توابع میتوان فایل های binary نظیر تصاویر، فرمت های خاص، فایل های متنی خاص و … را ایجاد کرد.