کار با فایل ها ( خواندن ، نوشتن و ساخت 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
ارسال نظر