دوره‌ها / آموزش جامع PHP (از صفر تا استادی) / بازکردن/خواندن فایل (PHP Open/Read)

بازکردن/خواندن فایل (PHP Open/Read)

30 دقیقه Article

باز کردن و خواندن: مدیریتِ هندلرها 🔓📖

روشِ readfile() ساده است اما منعطف نیست. برایِ کنترلِ بیشتر (مثلاً خواندنِ خط به خط)، از تابعِ fopen() استفاده می‌کنیم که یک "ارتباط" یا Handler با فایل برقرار می‌کند.

مودهایِ باز کردن (Modes):

  • r: فقط خواندن (از ابتدایِ فایل).
  • w: فقط نوشتن (پاک کردنِ محتوایِ قبلی).
  • a: اضافه کردن به انتهایِ فایل (Append).
  • r+: خواندن و نوشتن.

خواندنِ خط به خط (fgets):

این روش برایِ فایل‌هایِ حجیم حیاتی است چون RAM را اشغال نمی‌کند:

{code_block('$myfile = fopen("test.txt", "r");\nwhile(!feof($myfile)) {\n echo fgets($myfile) . "
";\n}\nfclose($myfile);')}
feof(): مخفف End Of File. این تابع چک می‌کند که آیا به انتهایِ فایل رسیده‌ایم یا خیر.
بستنِ فایل: همیشه بعد از اتمامِ کار، از fclose() استفاده کنید. باز ماندنِ هندلرهایِ فایل می‌تواند باعث شود سیستم‌عامل دیگر اجازه ندهد فایل‌هایِ جدید باز کنید.

خواندنِ کاراکتر به کاراکتر:

{code_block('echo fgetc($myfile); // خواندن فقط یک حرف')}
fread(): اگر می‌خواهید مقدارِ مشخصی بایت (مثلاً کلِ حجم فایل) را یکجا بخوانید، از این تابع استفاده کنید.
<hr style="margin: 50px 0; border: 0; border-top: 1px dashed rgba(255,255,255,0.1);">

بخش تخصصی: مهندسی پیشرفته و امنیت در PHP 🐘⚙️

درکِ عمیقِ مفاهیمِ پیشرفته، تفاوتِ بینِ یک کدنویسِ معمولی و یک معمارِ نرم‌افزار را رقم می‌زند.

۱. بهینه‌سازی I/O و بافرینگ

در هنگامِ کار با فایل‌هایِ حجیم، هرگز کلِ فایل را به یکباره در حافظه (RAM) بارگذاری نکنید. استفاده از Streams و توابعِ fopen/fgets به شما اجازه می‌دهد فایل را خط به خط پردازش کنید که باعث می‌شود مصرفِ حافظه همیشه در کمترین سطحِ ممکن باقی بماند.

۲. امنیتِ نشست‌ها (Session Security)

مهم‌ترین خطر در مدیریتِ کاربران، Session Hijacking است. همیشه بعد از لاگین کردنِ کاربر، از session_regenerate_id(true) استفاده کنید تا شناسه‌یِ نشستِ قبلی باطل شود. همچنین فلگ‌هایِ HttpOnly و Secure را برای کوکی‌ها فعال کنید.

۳. استانداردهایِ مدرن و Autoloading

در پروژه‌هایِ بزرگ، استفاده از include دستی فاجعه‌بار است. استانداردِ PSR-4 و استفاده از Composer به شما اجازه می‌دهد کلاس‌ها را فقط در زمانی که واقعاً نیاز هستند بارگذاری کنید (Lazy Loading)، که سرعتِ لود شدنِ کلِ اپلیکیشن را به شدت بالا می‌برد.

نکته استراتژیک: به جایِ استفاده از توابعِ سنتی، سعی کنید به سمتِ Object-Oriented Programming (OOP) حرکت کنید. اکثرِ کتابخانه‌هایِ پیشرفته‌یِ PHP مثل DateTime و PDO از این پارادایم استفاده می‌کنند.

تمرین‌های عملی

برای تثبیت یادگیری این درس تمرین‌های زیر را حل کنید

باز کردن فایل برای خواندن Easy
سوال تمرین

فایلی به نام "test.txt" را فقط برای خواندن باز کنید و هندلر را در متغیر $h ذخیره کنید.

پاسخ تمرین
PHP
<?php
$h = fopen("test.txt", "r");
?>

آماده رفتن به درس بعدی هستید؟

این درس را به پایان رساندید و می‌توانید به درس بعدی بروید.