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

نوشته‌شده در در کار با فایلها
Loading Likes...

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

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

  • ()fread: دو پارامتر دارد، پارامتر اول File handle و پارامتر دوم تعداد بایت ها برای خواندن را مشخص میکند.
  • ()fgets: یک پارامتر دارد و آن File handle است. لاین اول فایل را میخواند و وقتی به لاین جدید رسید متوقف میشود و اشاره گر فایل به لاین جدید منتقل میشود.
  • ()fgetc: یک پارامتر دارد و آن File handle است. یک کاراکتر از فایل را میخواند و اشاره گر به کاراکتر بعدی منتقل میشود.

همچنین توابع ()file_get_contents() ، file() ، readfile هم برای خوندن محتویا فایل وجود دارن که در قسمت PHP پیشرفته به اونها میپردازیم.

باز کردن فایل برای خواندن

در درس بازکردن و بستن فایلها به انواع مدها پرداختیم و گفتیم که برای خواندن محتویات فایل از مد r استفاده میشه فرض بر اینکه قصد ما فقط خوندن باشه و نوشتنی در کار نباشه.

فایلی که ما میخوایم بخونیم اسمش sa.txt هست و در همون جاییه که فایل php ما قرار داره محتویاتش هم این هست:

line 1
line 2
line 3
line 4
line 5

حالا فایل رو برای خوندن باز میکنیم:

<?php
$file = "sa.txt";
$fileHandler = fopen($file , 'r');
?>

 

تابع ()fread

این تابع دو پارامتر داره، پارامتر اول File handle و پارامتر دوم تعداد بایت ها برای خوندن رو مشخص میکنه. لازمه یادآوری کنم که در حرف در کامپیوتر یک بایت رو اشغال میکنه پس اگر ما بخوایم مثلا 5 کاراکتر اول فایل sa.txt رو بخونیم کدش به این صورت میشه:

<?php
$file = "sa.txt";
$fileHandler = fopen($file , 'r');
$data = fread($fileHandler, 10);
fclose($fileHandler);
echo $data;
?>

خروجی:

line 1
li

 

خواندن کل فایل با تابع ()fread

خوب! ما تو پارامتر دوم تابع ()fread باید مشخص کنیم که چند بایت از فایل رو بخونه حالا اگر بخوایم کل فایل رو بخونیم چیکار کنیم؟ باید طول یا حجم فایل رو بنویسیم درسته؟ معمولا نمیشه عدد ثابت داد چون احتمال داره حجم فایل تغییر کنه! در چنن جایی تابع دیگه ای به نام ()filesize به کارمون میاد، این تابع طول فایل رو بر حسب بایت برمیگردونه:

<?php
$file = "sa.txt";
$fileHandler = fopen($file , 'r');
$data = fread($fileHandler, filesize($file));
fclose($fileHandler);
echo $data;
?>

خروجی:

line 1
line 2
line 3
line 4
line 5

 

تابع ()fgets

از این تابع برای خوندن یک لاین از فایل استفاده میشه. البته از ورژن 4.2.0 پارامتر length هم اضافه شده که اختیاریه (یعنی میتونه مثل تابع ()fread استفاده بشه)

<?php
$file = "sa.txt";
$fileHandler = fopen($file , 'r');
$data = fgets($fileHandler);
fclose($fileHandler);
echo $data;
?>

خروجی:

line 1

 

خواندن کل فایل با تابع ()fgets لاین به لاین

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

<?php
$file = "sa.txt";
$fileHandler = fopen($file , 'r');
while(!feof($fileHandler)){
	echo fgets($fileHandler);
}
fclose($fileHandler);
?>

خروجی:

line 1
line 2
line 3
line 4
line 5

 

خواندن یک لاین مشخص از فایل با تابع ()fgets

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

<?php
$file = "sa.txt";
$fileHandler = fopen($file , 'r');
$line = 0;
while ($buffer = fgets($fileHandler)) {

   if ($line == 3) {
       echo $buffer; // fourth line
       break;
   }   
   $line++;
}
fclose($fileHandler);
?>

خروجی:

line 4

 

تابع ()fgetc

این تابع در صورت عادی فقط اولین کاراکتر فایل رو میخونه، در اینجا هم میتونیم با استفاده از تابع ()feof کل فایل رو بخونیم:

<?php
$file = "sa.txt";
$fileHandler = fopen($file , 'r');
while(!feof($fileHandler))
echo fgetc($fileHandler);
fclose($fileHandler);
?>

خروجی:

line 1
line 2
line 3
line 4
line 5

 

یک مثال کاربردی

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

<?php
$filename = 'sitevisitors.txt';
if (file_exists($filename))
    {
        $count = file('sitevisitors.txt');
        $count[0] ++;
        $fp = fopen("sitevisitors.txt", "w");
        fputs ($fp, "$count[0]");
        fclose ($fp);
        echo $count[0];
    }

else
    {
        $fh = fopen("sitevisitors.txt", "w");
        if($fh==false)
            die("unable to create file");
        fputs ($fh, 1);
        fclose ($fh);
        $count = file('sitevisitors.txt');
        echo $count[0];
    }

?>

 

آیا درباره این آموزش سوالی دارید؟



سوالی دارید؟

بدون گرفتن نتیجه اینجا رو ترک نکنید! هر سوالی دارید میتونید در عرض ۱۵ ثانیه ثبت نام و خیلی زود جواب بگیرید.

3 دیدگاه برای «خواندن فایل در PHP»

پاسخی بگذارید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

6 × = 36