کار با فایل ها ( خواندن ، نوشتن و ساخت file ) در PHP

کار با فایل ها ( خواندن ، نوشتن و ساخت file ) در PHP

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


در این مقاله توابع زیر را یاد خواهیم گرفت :

1- fopen : برای دسترسی گرفتن از فایل و مدیریت آن
2- fread : برای خواندن محتوای فایل
3- fwrite : نوشتن محتوا بر روی فایل
4- fclose : برای بستن منبعی که با fopen باز شده


همچنین چند تابع اضافی دیگر که در مدیریت و کار با فایل ها به ما کمک می کنند :

1- filesize : دریافت اندازه فایل بر حسب بایت ( byte )
2- file_get_contents : مشابه fread با این تفاوت که نیازی به fopen و فایل پوینتر ندارد و در دریافت اطلاعات از آدرس http (stream) بهتر عمل می کند .


تابع fopen

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

4 ورودی دارد که 2 ورودی اول ( اجباری ) است :

1- filename : مسیر فایلی که می خواهید از آن دسترسی بگیرید
2- mode : حالت استفاده از فایل
3- use_include_path : این که از include_path استفاده شود ( پیشفرض false ) توصیه می شود روی false باشد .
4- context : در صورتی که خواستیم از stream برای خواندن اطلاعات استفاده کنیم یک منبع stream می دهیم مرتبط با http request ( پیشفرض null )


و پس از این که تابع با موفقیت اجرا شد خروجی resource برمی گرداند که از آن برای ورودی های اجباری fread , fwrite , fclose استفاده می کنیم .

تابع fread

دارای 2 ورودی و اجباری :

1- resource : خروجی که از fopen حاصل می شود
2- length : چه مقدار از فایل را بخواند ( بر حسب بایت )


تابع fwrite

3 ورودی 2 ورودی اول اجباری :

1- resource : خروجی که از fopen حاصل می شود
2- string : محتوایی که می خواهید وارد فایل شود
3- length : این که چند کاراکتر از محتوای داده شده را وارد فایل کند ( پیشفرض تا آخر ورودی 2 )


تابع fclose

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

دارای 1 ورودی اجباری :

1- resource : خروجی که از fopen حاصل می شود

تابع filesize

دریافت اندازه فایل برحسب byte
تابع 1 ورودی اجباری دارد :
1- filename : مسیر فایل مورد نظر


تابع file_get_contents

این تابع در خواندن و stream اطلاعات خیلی بهتر از fread عمل می کند و نیازی به file pointer ندارد .

تابع دارای 5 ورودی است که فقط ورودی اول اجباری است :

1- filename : آدرس یا مسیر فایل
2- توضیح ورودی 3 fopen
3- توضیح ورودی 4 fopen
4- offset : این که از چه موقعیتی در رشته به بعد خوانده شود یا پرش محتوا ( پیشفرض 0 )
5- maxlen : چه تعداد کاراکتر خوانده شود ( پیشفرض تا آخر رشته )


کار با تابع fopen و توابع مرتبط با آن

حالت w

برای نوشتن محتوای از ابتدای فایل و در صورت عدم وجود فایل آن را می سازد .

$handle = fopen("demo.txt" , "w");

fwrite($handle , "rapidcode.ir\nکتابخانه مجازی برنامه نویسان");

/*
rapidcode.ir
کتابخانه مجازی برنامه نویسان
*/

fclose($handle);

در صورتی که برای تابع fwrite ورودی 3 مقدار 12 را در نظر بگیریم فقط 12 کاراکتر ورودی 2 را می نویسد :

rapidcode.ir


حالت r

فقط برای خواندن محتوای فایل در صورت عدم وجود فایل خطای Warning با پیغام :

failed to open stream: No such file or directory in

مواجه خواهید شد .

$handle = fopen("demo.txt" , "r");

$length = filesize('demo.txt') ? filesize('demo.txt') : 1;

$content_file = fread($handle , $length);

fclose($handle);

لاین 3 برای این است در صورتی که فایل demo.txt وجود داشت ولی خالی بود با خطای Warning :

Length parameter must be greater than 0 in

مواجه نشود .

حالت +r

برای خواندن و نوشتن محتوای ( در صورتی که محتوا از قبل وجود داشته باشد محتوای جدید به آن اضافه می گردد )

$handle = fopen("demo.txt" , "r+");
 
$length = filesize('demo.txt') ? filesize('demo.txt') : 1;
 
echo fread($handle , $length); // require to append

/*
rapidcode.ir
کتابخانه مجازی برنامه نویسان
*/
 
$content_to_write = "\ncontent line three";
 
fwrite($handle, $content_to_write);

/*
rapidcode.ir
کتابخانه مجازی برنامه نویسان
content line three
*/
 
fclose($handle);

لاین 5 : در صورتی که نباشد به جای محتوای قبلی فضا خالی در نظر گرفته می شود . بهتر است از آن استفاده شود تا با نتیجه ی غیرمنتظره مواجه نشوید . ( البته نیازی به echo نیست )

حالت a+

قابلیت های +r به همراه ساخت فایل در صورتی که وجود نداشت ، در ضمن مثل +r ( لاین 5 کد بالا ) نیازی به استفاده از fread قبل از fwrite نیست .

$handle = fopen("demo.txt" , "a+");
 
$length = filesize('demo.txt') ? filesize('demo.txt') : 1;
 
echo fread($handle , $length);

/*
rapidcode.ir
کتابخانه مجازی برنامه نویسان
*/
 
$content_to_write = "\ncontent line three";
 
fwrite($handle, $content_to_write);

/*
rapidcode.ir
کتابخانه مجازی برنامه نویسان
content line three
*/
 
fclose($handle);


کار با تابع file_get_contents

فایلی با نام file.txt داریم که دارای محتوای زیر است :

rapidcode.ir
let's learn coding


اکنون با تابع file_get_contents بیشتر آشنا می شوید :

$content = file_get_contents("file.txt");

echo $content; // ↓
/*

rapidcode.ir
let's learn coding

*/


حال اگر به آن offset و maxlen دهیم :

$content = file_get_contents("file.txt" , false , null , 3 , 7); 

echo $content; // idcode.

عدد 3 یعنی 3 کاراکتر بیا جلو و عدد 7 یعنی 7 کاراکتر از موقعیت فعلی به بعد بخوان و جلو برو . که میشود . idcode.


در صورتی که offset را عدد منفی دهیم مثل :

$content = file_get_contents("file.txt" , false , null , -3);  

echo $content; // ing

یعنی 3 کاراکتر آخر را بخوان .

اگر ورودی maxlen هم بدهیم :

$content = file_get_contents("file.txt" , false , null , -3 , 2); 

echo $content; // in

یعنی از 3 کاراکتر بدست آمده 2 کاراکتر آن را بخوان .

دقت داشته باشید که maxlen نباید کوچک تر از 0 باشد در صورتی که عدد منفی باشد با خطای زیر مواجه خواهید شد .

Warning: file_get_contents(): length must be greater than or equal to zero in

کار با فایل ها در PHP

Filesystem Functions

ارسال نظر

جهت استفاده از کد حتما از تگ pre استفاده نمایید .

contact us