مدیریت و کار با فایل ها بخش بسیار مهمی از هر برنامه ای است. در بسیاری از برنامه ها نیاز به باز کردن و ویرایش برخی از فایل ها داریم. همانطور که حدس میزدید PHP نیز توابع مختلفی برای کار با فایل ها دارد البته باید به شما هشدار بدهم که در هنگام کار با فایل ها به شدت مراقب باشید! کوچکترین اشتباهات می توانند منجر به بزرگترین ضررها و هزینه ها شوند. معمولا رایج ترین اشتباهات هنگام کار با فایل ها عبارت اند از:
تابع ()readfile
در PHP یک فایل را می خواند و آن را به output buffer میفرستد. فرض کنید فایلی به نام webdictionary.txt داشته باشیم که محتوای زیر را داشته باشد:
AJAX = Asynchronous JavaScript and XML CSS = Cascading Style Sheets HTML = Hyper Text Markup Language PHP = PHP Hypertext Preprocessor SQL = Structured Query Language SVG = Scalable Vector Graphics XML = EXtensible Markup Language
حالا برای خواندن این فایل می توان گفت:
<!DOCTYPE html> <html> <body> <?php echo readfile("webdictionary.txt"); ?> </body> </html>
نکته: در آخر این فایل عدد 236 را مشاهده می کنید. این عدد حجم فایل به بایت است که توسط تابع ()readfile در آخر خروجی برگردانده می شود. البته در صورتی که عملیات خواندن موفقیت آمیز باشد.
اما این روش آنقدرها هم جالب نیست. روش بهتر برای باز کردن فایل ها و خواند محتویاتشان استفاده از تابع ()fopen
است چرا که گزینه های بیشتری به شما می دهد. برای نمایش قدرت دوباره تابع ()fopen
با همان فایل webdictionary.txt کار خواهیم کرد.
اولین پارامتر ()fopen
نام فایلی است که باید باز شود و پارامتر دوم می گوید از کدام mode برای باز کردن آن استفاده شود. در مثال زیر از تابع die نیز استفاده کرده ایم تا در صورت مواجهه با خطا پیامی مبنی بر عدم موفقیت نمایش داده شود:
<!DOCTYPE html> <html> <body> <?php $myfile = fopen("webdictionary.txt", "r") or die("Unable to open file!"); echo fread($myfile,filesize("webdictionary.txt")); fclose($myfile); ?> </body> </html>
نگران نباشید! در مورد توابع fread و fclose توضیح خواهیم داد.
همانطور که می بینید در این مثال به پارامتر دوم fopen حرف r
را داده ایم که یکی از mode (حالت) های آن است. لیست کامل mode های این تابع را در جدول زیر مشاهده می کنید:
Mode | توضیحات |
r | فایل را فقط برای خواندن (read) باز می کند. pointer از اول فایل شروع می شود. |
w | فایل را فقط برای نوشتن (write) باز می کند. pointer از اول فایل شروع می شود. همچنین محتوای فایل را پاک کرده و اگر فایل را پیدا نکند یک فایل دیگر می سازد. |
a | فایل را فقط برای نوشتن (write) باز می کند. pointer از آخر فایل شروع می شود. محتوای قبلی فایل را پاک نمیکند و اگر فایل را پیدا نکند یک فایل دیگر می سازد. |
x | یک فایل جدید برای نوشتن (Write) می سازد. اگر فایل از قبل وجود داشته باشد FALSE و یک پیام خطا را به ما برمیگرداند. |
+r | فایل را برای خواندن (read) و نوشتن (write) باز می کند. pointer از اول فایل شروع می شود. |
+w | فایل را برای خواندن (read) و نوشتن (write) باز می کند. pointer از اول فایل شروع می شود. همچنین محتوای فایل را پاک کرده و اگر فایل را پیدا نکند یک فایل دیگر می سازد. |
+a | فایل را برای خواندن (read) و نوشتن (write) باز می کند. pointer از آخر فایل شروع می شود. محتوای قبلی فایل را پاک نمیکند و اگر فایل را پیدا نکند یک فایل دیگر می سازد. |
+x | یک فایل جدید برای خواندن (read) و نوشتن (Write) می سازد. اگر فایل از قبل وجود داشته باشد FALSE و یک پیام خطا را به ما برمیگرداند. |
1. fread
تابع ()fread
محتوای یک فایل باز شده (قبلا با دستور fopen باز شده باشد) را می خواند. اولین پارامتر آن نام فایل و دومین پارامتر حداکثر تعداد بایت هایی است که باید خوانده شوند. به طور مثال اگر بخواهیم فایل webdictionary.txt را با این دستور بخوانیم می گوییم:
fread($myfile,filesize("webdictionary.txt"));
2. fclose
تابع ()fclose
برای بستن یک فایل باز شده استفاده می شود. همیشه بعد از اتمام کارتان با یک فایل آن را ببندید و گرنه آن فایل در پس زمینه ی برنامه باز مانده و منابع سیستمی شما را هدر می دهد. مثال زیر فایل webdictionary.txt را می بندد:
<?php $myfile = fopen("webdictionary.txt", "r"); // some code to be executed.... fclose($myfile); ?>
3. fgets
تابع ()fgets
فقط یک خط از یک فایل را می خواند. مثال زیر اولین خط از فایل webdictionary.txt را برای ما می خواند:
<!DOCTYPE html> <html> <body> <?php $myfile = fopen("webdictionary.txt", "r") or die("Unable to open file!"); echo fgets($myfile); fclose($myfile); ?> </body> </html>
نکته ی مهم: حواستان باشد که پس از صدا زدن ()fgets موقعیت pointer فایل به خط بعدی منتقل می شود. pointer فایل نقطه ای فرضی است که برای درک بهتر می توانید آن را دقیقا معادل علامت Caret navigation یا text cursor در نظر بگیرید (تعیین مکان فعلی).
4. feof
تابع ()feof
چک می کند تا ببیند به EOF (همان end-of-file) رسیده ایم یا خیر. از این تابع معمولا برای گردش در فایل هایی استفاده می شود که نمی دانیم حجمشان چقدر است. مثال زیر فایل webdictionary.txt را خط به خط می خواند تا به end-of-file برسد:
<!DOCTYPE html> <html> <body> <?php $myfile = fopen("webdictionary.txt", "r") or die("Unable to open file!"); // Output one line until end-of-file while(!feof($myfile)) { echo fgets($myfile) . "<br>"; } fclose($myfile); ?> </body> </html>
5. fgetc
تابع ()fgetc
تنها یک کاراکتر از یک خط را می خواند. مثال زیر فایل webdictionary.txt را کاراکتر به کاراکتر می خواند تا زمانی که به end-of-file برسیم:
<!DOCTYPE html> <html> <body> <?php $myfile = fopen("webdictionary.txt", "r") or die("Unable to open file!"); // Output one character until end-of-file while(!feof($myfile)) { echo fgetc($myfile); } fclose($myfile); ?> </body> </html>
نکته: پس از یک بار صدا کردن ()fgetc موقعیت pointer ما به کاراکتر بعدی منتقل می شود.
امیدوارم از مقاله کار با فایل ها در php لذت برده باشید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.