برای خواندن محتوای فایل متنی در PHP توابع آمادهای وجود دارد که میتوانیم به سادگی از آنها استفاده کنیم. در این آموزش روشهای خواندن فایل در PHP را با هم بررسی کرده و با توابع کاربردی آن آشنا میشویم.
حفظ کردن این توابع ضروری نیست. در این آموزش ۳ روش و چند تابع جانبی معرفی میکنم که صرفاً با امکانات و تواناییهای زبان PHP برای خواندن فایل آشنا شوید. هر زمان در پروژهای نیاز به این توابع داشتید، اگر یادتان نبود، با یک جستجوی ساده میتوانید آنها را پیدا کنید.
در مورد فرآیند مرحله به مرحله خواندن و نوشتن روی فایل در آموزش کار با فایل در PHP بحث شده است. در این آموزش صرفاً بحث خواندن فایل را با توابع خاصتر یاد میگیریم.
فهرست محتوای آموزش
خواندن فایل در PHP
در این بخش با ۳ تابع از پیش تعریف شده آشنا شده و به کمک آنها محتوای درون فایلها را میخوانیم. در بخش بعدی علاوه بر معرفی چند تابع کمکی دیگر، مثالهای پیچیدهتری از این روشها را میخوانیم.
در تمام مثالها، فرض میکنیم یک فایل به نام data.txt در کنار کد قرار داشته و حاوی محتوای زیر است:
Hi dear user! I hope you are happy and learn good things. Thanks, SabzDanesh.com
برای آدرسدهی به فایلها از مسیردهی نسبی (relative) استفاده میکنیم. در نتیجه اگر همین فایل در فولدر files قرار داشت، آدرس ما files/data.txt
میشود.
تابع file_get_contents
این تابع همه محتوای فایل را به شکل یک رشته متنی در PHP (یا string) به ما میدهد. تابع file_get_contents()
یک پارامتر ورودی اجباری دارد که آدرس فایل است.
<?php
$data = file_get_contents("data.txt");
echo $data;
در قطعه کد بالا، همه محتویات فایل data.txt درون متغیر $data
قرار گرفته و در خط دوم آن را چاپ میکنیم. اگر این کار را انجام دهید، خروجی چیزی شبیه زیر خواهد شد:
Hi dear user! I hope you are happy and learn good things. Thanks, SabzDanesh.com
همانطور که میبینید، خطها در خروجی به درستی نمایش داده نشدهاند. اگر سورس صفحه را چک کنید، خواهید دید که خط به خط فایل به درستی نمایش داده میشود. برای اینکه این ساختار را در خروجی هم حفظ کنیم، از تگ pre
در html استفاده میکنیم. بنابراین قطعه کد زیر، خروجی مشابه محتوای درون فایل را به ما خواهد داد:
<pre>
<?php
$data = file_get_contents("data.txt");
echo $data;
?>
</pre>
تابع خواندن فایل در PHP چهار ورودی دلخواه دیگر نیز میگیرد که دو مورد مهم آنها عبارتاند از:
$offset
: کاراکتر شروع خواندن را مشخص میکند. (ورودی چهارم، پیشفرض: 0)$length
: تعداد کاراکترهایی که باید از فایل خوانده شود. (ورودی پنجم، پیشفرض: اندازه فایل)
قطعه کد زیر، محتوای فایل از اندیس (ایندکس) 11 به تعداد 24 کاراکتر را خوانده و خروجی میدهد:
<?php
$data = file_get_contents("data.txt", null, null, 10, 24);
به کمک این تابع میتوان کدهای HTML یک صفحه وب را نیز خوانده و از آن استفاده کرد. یعنی میتوانید به جای آدرس یک فایل، آدرس یک صفحه از سایت (URL) را به عنوان ورودی به تابع بدهید.
خواندن فایل به صورت یکجا با readfile
تابع readfile()
تقریباً مشابه قبلی عمل میکند یعنی همه محتویات درون یک فایل که به عنوان اولین آرگومان ورودی به آن داده میشود را به ما برمیگرداند. اما خروجی این تابع یک رشته نیست، بلکه یک عدد (int) است.
با فراخوانی این تابع، محتویات درون فایل در خروجی چاپ میشود و نیازی به دستور echo نیست. همچنین به عنوان خروجی تابع، تعداد کاراکترهای موجود در فایل که در خروجی چاپ شدهاند داده میشود.
<?php
readfile("data.txt");
تفاوت readfile()
و file_get_contents()
در نوع خروجی آنهاست. هر دو عملیات خواندن فایل در PHP را انجام میدهند. اولی مستقیماً محتوای خوانده شده را در صفحه برنامه چاپ میکند اما دومی آن را به صورت یک رشته برمیگرداند.
خواندن فایل در PHP با fopen
برای کار با فایلهای بزرگ و حجیمتر و یا بسته به نیاز برنامه، شاید بهتر باشد جزئیات باز و بسته کردن و دسترسی به محتوای فایل را خودمان مشخص کنیم.
برای این منظور از تابع fopen()
برای خواندن فایل در PHP استفاده میکنیم. این تابع دو ورودی اجباری دارد:
- ورودی اول مسیر فایل برای باز کردن را مشخص میکند.
- ورودی دوم، حالت باز کردن (mode) فایل را برای برنامه مشخص میکند. در قطعه کد زیر، r به معنای باز کردن فایل فقط برای خواندن (Read Only) است.
خروجی این تابع از نوع File Handler یا Stream است. این مقدار برای اشاره به فایل باز شده استفاده میشود. بنابراین آن را در یک متغیر (در اینجا $file
) نگهداری میکنیم تا جلوتر از آن استفاده کنیم.
<?php
$file = fopen("data.txt", "r");
پس از اینکه کارمان با فایل تمام شد، بهتر است با فراخوانی تابع fclose()
آن را میبندیم تا از بروز خطاهای احتمالی و اشغال بیهوده رم جلوگیری شود.
حال به کمک توابع مختلف میتوانیم محتوای درون فایل را به صورت بخش به بخش بخوانیم. یکی از این توابع، تابع fread()
است که دو ورودی میگیرد. ورودی اول همان متغیر فایل و ورودی دوم تعداد کاراکترهایی که میخواهیم خوانده شود.
متغیر $file
علاوه بر اینکه به فایل باز شده اشاره میکند، یک اشارهگر (pointer) به کاراکتر آخری که خوانده شده نگهداری میکند. در ابتدا که فایل باز میشود، اشارهگر روی کاراکتر اول است. وقتی مثلاً 10 کاراکتر از فایل را میخوانیم، اشارهگر روی 11 قرار میگیرد.
در قطعه کد زیر، پس از اینکه فایل برای عملیات خواندن در PHP باز شده است، 20 کاراکتر اول آن را در خروجی چاپ کردهام. مجدداً بعد از چاپ کردن تگ <br>
تعداد 25 کاراکتر بعدی فایل را در خروجی نمایش دادهام.
<?php
$file = fopen("data.txt", "r");
echo fread($file, 20);
echo '<br>';
echo fread($file, 25);
fclose($file);
در آموزش زیر با یک مثال پروژهای، با تابع fopen(
) کار کرده و modeهای کاربردی آن را در یک جدول با هم مقایسه کردهایم:
توابع کاربردی خواندن فایل
برای اینکه با متغیر $file
کارهای بیشتری انجام دهیم، توابع کاربردی بیشتری وجود دارد. در ادامه ۳ تابع دیگر برای خواندن فایل در PHP را با هم یاد میگیریم.
بررسی رسیدن به انتهای فایل
وقتی فایلی را بخش به بخش میخوانیم، ممکن است لازم باشد بررسی کنیم آیا به انتهای فایل رسیدهایم یا نه. برای این کار، کافی است متغیر فایل را به تابع feof()
بدهیم. اگر نتیجه true بود یعنی خواندن فایل به انتها رسیده است.
<?php
if( feof($file) ){
echo "Read File Operation ended!";
}
خواندن خط به خط فایل در PHP
یکی از کاربردیتری توابع خواندن فایل در PHP تابع fgets()
است. این تابع متغیر فایل را به عنوان ورودی گرفته و در هر بار اجرا، یک خط از آن را خروجی میدهد. (نوع خروجی رشته است.)
در قطعه کد زیر، فایل data.txt را باز کرده و با استفاده از یک حلقه while در PHP تا زمانی که به انتهای آن برسیم، محتویاتش را خط به خط چاپ کردهایم.
<?php
$file = fopen("data.txt", "r");
while( !feof($file) ){
echo fgets($file) . "<br>";
}
fclose($file);
?>
خواندن کاراکتر به کاراکتر از فایل
ممکن است بخواهیم فایل را به صورت کاراکتر به کاراکتر بخوانیم. با اینکه از این تابع کمتر استفاده میشود، ولی برای مواقعی که لازم است وجود علامت یا کاراکتری خاص در فایل را بررسی کنیم، میتواند برای ما بسیار کاربردی باشد.
مشابه تابع قبلی، تابع fgetc()
متغیر فایل را به عنوان ورودی گرفته و در هر بار اجرا، یک کاراکتر از فایل را به ما میدهد. قطعه کد زیر، علاوه بر چاپ فایل در خروجی، تعداد کاراکترهای sکوچک در متن را نیز شمارش میکند.
<?php
$file = fopen("data.txt", "r");
$counter = 0;
while( !feof($file) ){
$c = fgetc($file);
if($c=='s'){$counter++;}
echo $c;
}
fclose($file);
در این آموزش با ۳ تابع برای خواندن فایل در PHP آشنا شدیم. تابع file_get_contents()
همه یا بخشی از فایل را به صورت یک رشته خروجی میدهد.تابع readfile()
همه محتویات را در خروجی برنامه چاپ کرده و تعداد کاراکترهای موجود در آن را به عنوان خروجی خود در نظر میگیرد.
تابع دیگری به نام file()
وجود دارد که خط به خط فایل را درون ایندکسهای یک آرایه ریخته و یک آرایه PHP خروجی میدهد. یک مثال از این تابع را میتوانید در مستندات آن بررسی کنید.
به کمک تابع fopen()
میتوانیم یک فایل را برای انجام کارهای مختلف باز کنیم. با تابع fread()
تعداد مشخصی از کاراکترهای فایل خوانده میشود. از fgets()
و fgetc()
برای خواندن خط به خط فایل در PHP یا کاراکتر به کاراکتر استفاده میشود.
این آموزش برای همیشه رایگانه! میتونید با اشتراکگذاری لینک این صفحه از ما حمایت کنید یا با خرید یه فنجون نوشیدنی بهمون انرژی بدید!
میخوام یه نوشیدنی مهمونتون کنم
چطور از بلا فایل برزیم
تا جایی که اطلاع دارم روش مخصوصی نداره!
باید اول دیتای موجود در فایل رو بخونید و نگه دارید، سپس محتوای موردنظر رو بنوسید و در ادامهاش همون دیتای قبلی رو قرار بدید.
عالی و جامع
مرسی ازتون
خوشحالیم که براتون کاربردی بوده ریحانه عزیز
[…] و در مقاله دیگری درمورد خواندن فایل در زبان برنامه نویسی PHP صحبت کردیم و این مسئله را آموزش […]