سی ام اس نویسسی ام اس نویسیاد بگیر، سیستم خودتو بنویس
مجلهتماس با ما
سی ام اس نویسسی ام اس نویس

CMS نویس مرجعی برای آموزش برنامه نویسی وب و PHP، توسعه افزونه‌های اختصاصی وردپرس، طراحی ورک‌فلو و اتوماسیون با n8n و توسعه CMS های اختصاصی است. هدف ما ارائه آموزش‌های کاربردی و راهکارهای حرفه‌ای برای توسعه‌دهندگان، کسب‌وکارها و علاقه‌مندان به دنیای برنامه‌نویسی است.

پیوندهای سریع
محصولات فیزیکیمحصولات دیجیتالدوره‌های آموزشی
سی ام اس نویس
مجله سی ام اس نویستماس با ماپنل کاربری
سی ام اس نویس — تمامی حقوق برای سی ام اس نویس محفوظ است. © 1406 تماس با ما09307711941
کار با فایل در PHP؛ آموزش خواندن، نوشتن و مدیریت فایل با مثال

کار با فایل در PHP؛ آموزش خواندن، نوشتن و مدیریت فایل با مثال

ممدیر کل سیستم ۱۸ شهریور ۱۴۰۵ ۲۰ دقیقه مطالعه ۱ بازدید
کار با فایل در PHP؛ آموزش خواندن، نوشتن و مدیریت فایل با مثال

کار با فایل در PHP یکی از مباحث پایه و در عین حال کاربردی در برنامه‌نویسی PHP است. بسیاری از پروژه‌های وب علاوه بر Database، نیاز دارند اطلاعاتی را در فایل‌های مختلف ذخیره، خوانده یا پردازش کنند.

برای مثال ممکن است در یک پروژه PHP نیاز داشته باشیم:

  • محتوای یک فایل متنی را بخوانیم.
  • یک فایل جدید ایجاد کنیم.
  • اطلاعاتی داخل فایل بنویسیم.
  • به انتهای یک فایل متن اضافه کنیم.
  • یک فایل را حذف کنیم.
  • وجود یک فایل را بررسی کنیم.
  • فایل CSV را پردازش کنیم.
  • فایل JSON را بخوانیم.
  • فایل را از کاربر دریافت و روی Server ذخیره کنیم.
  • حجم و نوع فایل آپلودشده را بررسی کنیم.

PHP توابع و ابزارهای مختلفی برای این کار در اختیار ما قرار می‌دهد؛ از توابع ساده‌ای مانند file_get_contents() و file_put_contents() گرفته تا APIهایی مانند fopen()، fread()، fwrite() و fclose().

در این آموزش ابتدا با مفاهیم پایه کار با فایل در PHP آشنا می‌شویم و سپس سراغ عملیات خواندن، نوشتن، حذف، آپلود و نکات امنیتی می‌رویم.


# کار با فایل در PHP چه کاربردی دارد؟

فایل‌ها در پروژه‌های مختلف کاربردهای زیادی دارند.

برای مثال:


logs/

uploads/

backups/

exports/

imports/

storage/

ممکن است شامل فایل‌های مختلف باشند.

برخی کاربردهای رایج:

  • ذخیره Log
  • نگهداری فایل‌های Upload شده
  • تولید فایل CSV
  • Import و Export اطلاعات
  • ذخیره تنظیمات
  • تولید فایل گزارش
  • پردازش JSON
  • خواندن فایل‌های متنی
  • ایجاد فایل‌های موقت

البته برای داده‌های ساختاریافته و تراکنشی، Database معمولاً انتخاب مناسب‌تری است و نباید از فایل به عنوان جایگزین Database استفاده کرد مگر اینکه نیاز پروژه چنین چیزی را توجیه کند.


# مسیر فایل در PHP چیست؟

برای کار با فایل ابتدا باید مسیر آن را مشخص کنیم.

مثلاً:


$file = 'data.txt';

یا:


$file = '/var/www/html/data.txt';

در پروژه‌های PHP بهتر است برای مسیرهای داخلی Application تا حد امکان از مسیرهای مطمئن و قابل پیش‌بینی استفاده کنیم.

مثلاً:


$file = __DIR__ . '/data/data.txt';

__DIR__ مسیر Directory فعلی فایل PHP را در اختیار ما قرار می‌دهد.


# بررسی وجود فایل با file_exists

قبل از خواندن یا حذف یک فایل ممکن است بخواهیم بررسی کنیم که فایل واقعاً وجود دارد.

برای این کار:


$file = __DIR__ . '/data.txt';



if (file_exists($file)) {

    echo 'فایل وجود دارد';

} else {

    echo 'فایل پیدا نشد';

}

این تابع یک مقدار Boolean برمی‌گرداند.


# خواندن فایل در PHP با file_get_contents

یکی از ساده‌ترین روش‌های خواندن فایل در PHP استفاده از file_get_contents() است.

فرض کنید فایل data.txt شامل این محتوا باشد:


Hello PHP

می‌توانیم بنویسیم:


$file = __DIR__ . '/data.txt';



$content = file_get_contents($file);



echo $content;

این روش برای فایل‌های نسبتاً کوچک و زمانی که می‌خواهیم کل محتوا را یکجا بخوانیم بسیار ساده و کاربردی است.


# خواندن فایل خط به خط

گاهی لازم است فایل را خط‌به‌خط پردازش کنیم.

برای این کار می‌توان از fopen() و fgets() استفاده کرد:


$file = fopen(__DIR__ . '/data.txt', 'r');



while (($line = fgets($file)) !== false) {

    echo $line;

}



fclose($file);

این روش زمانی مفید است که بخواهیم فایل را به صورت تدریجی پردازش کنیم.


# تابع fopen در PHP

تابع fopen() یک فایل را برای عملیات مختلف باز می‌کند.

ساختار کلی:


fopen(filename, mode);

مثلاً:


$file = fopen('data.txt', 'r');

پارامتر دوم مشخص می‌کند فایل با چه حالتی باز شود.


# حالت‌های مهم fopen

برخی Modeهای پرکاربرد:

Modeکاربرد
rخواندن فایل
r+خواندن و نوشتن
wنوشتن و ایجاد/بازنویسی فایل
w+خواندن و نوشتن با بازنویسی
aافزودن اطلاعات به انتهای فایل
a+خواندن و افزودن اطلاعات
xایجاد فایل جدید در صورت نبودن فایل
x+ایجاد فایل جدید برای خواندن و نوشتن

یکی از نکات مهم این است که w می‌تواند محتوای قبلی فایل را از بین ببرد؛ بنابراین باید هنگام استفاده از آن دقت کنید.


# خواندن فایل با fread

بعد از باز کردن فایل می‌توان از fread() برای خواندن تعداد مشخصی از Byteها استفاده کرد.


$file = fopen('data.txt', 'r');



$content = fread($file, filesize('data.txt'));



fclose($file);



echo $content;

در این مثال ابتدا اندازه فایل را دریافت کرده‌ایم و سپس همان مقدار را خوانده‌ایم.

برای خواندن کل فایل‌های معمولی، file_get_contents() اغلب ساده‌تر است.


# خواندن یک خط با fgets

اگر بخواهیم فقط یک خط را بخوانیم:


$file = fopen('data.txt', 'r');



$line = fgets($file);



fclose($file);



echo $line;

برای خواندن تمام خطوط:


$file = fopen('data.txt', 'r');



while (($line = fgets($file)) !== false) {

    echo $line;

}



fclose($file);


# نوشتن فایل در PHP با file_put_contents

یکی از ساده‌ترین روش‌های نوشتن فایل در PHP استفاده از file_put_contents() است.


$file = __DIR__ . '/data.txt';



file_put_contents($file, 'Hello PHP');

اگر فایل وجود نداشته باشد، PHP می‌تواند آن را ایجاد کند؛ در صورت وجود، محتوای قبلی به طور معمول جایگزین می‌شود.


# افزودن اطلاعات به انتهای فایل

اگر نمی‌خواهیم محتوای قبلی حذف شود، می‌توانیم از FILE_APPEND استفاده کنیم:


$file = __DIR__ . '/data.txt';



file_put_contents(

    $file,

    "New line\n",

    FILE_APPEND

);

در این حالت اطلاعات جدید به انتهای فایل اضافه می‌شود.


# نوشتن فایل با fwrite

روش دیگر برای نوشتن فایل استفاده از fopen() و fwrite() است:


$file = fopen('data.txt', 'w');



fwrite($file, 'Hello PHP');



fclose($file);

این روش زمانی مفید است که کنترل بیشتری روی فرآیند باز کردن و نوشتن فایل نیاز داشته باشیم.


# تفاوت file_put_contents و fwrite

برای عملیات ساده:


file_put_contents()

کد کوتاه‌تر و خواناتری دارد.

اما وقتی نیاز داریم فایل را باز نگه داریم و چند عملیات روی آن انجام دهیم، استفاده از:


fopen()

fwrite()

fread()

fclose()

می‌تواند کنترل بیشتری در اختیار ما قرار دهد.


# ایجاد فایل جدید در PHP

مثلاً:


$file = __DIR__ . '/new-file.txt';



file_put_contents($file, 'New file');

اگر مسیر و Permission مناسب باشد، فایل ایجاد خواهد شد.


# حذف فایل در PHP با unlink

برای حذف فایل می‌توان از unlink() استفاده کرد:


$file = __DIR__ . '/data.txt';



if (file_exists($file)) {

    unlink($file);

}

قبل از حذف فایل بهتر است وجود آن را بررسی کنیم.


# بررسی اندازه فایل

برای دریافت اندازه فایل می‌توان از filesize() استفاده کرد:


$file = __DIR__ . '/data.txt';



echo filesize($file);

مقدار برگشتی بر حسب Byte است.

مثلاً اگر فایل 1024 Byte باشد:


1024


# دریافت اطلاعات فایل با stat

PHP تابع stat() را نیز برای دریافت اطلاعات مختلف فایل ارائه می‌کند.

مثلاً:


$fileInfo = stat(__DIR__ . '/data.txt');



print_r($fileInfo);

این اطلاعات می‌تواند شامل مواردی مانند اندازه و زمان‌های مربوط به فایل باشد.


# دریافت زمان آخرین تغییر فایل

برای دریافت زمان آخرین تغییر فایل:


$file = __DIR__ . '/data.txt';



$modified = filemtime($file);



echo date('Y-m-d H:i:s', $modified);

در اینجا از filemtime() برای دریافت زمان آخرین تغییر استفاده کرده‌ایم.


# بررسی Permission فایل

در برخی سناریوها ممکن است لازم باشد دسترسی فایل را بررسی کنیم.

مثلاً:


if (is_readable($file)) {

    echo 'فایل قابل خواندن است';

}

یا:


if (is_writable($file)) {

    echo 'فایل قابل نوشتن است';

}

این توابع هنگام عیب‌یابی مشکلات Permission کاربرد زیادی دارند.


# ایجاد Directory در PHP

برای ایجاد یک پوشه می‌توان از mkdir() استفاده کرد:


$directory = __DIR__ . '/uploads';



if (!is_dir($directory)) {

    mkdir($directory, 0755, true);

}

پارامتر true باعث می‌شود در صورت نیاز Directoryهای والد نیز ایجاد شوند.


# بررسی وجود Directory


if (is_dir(__DIR__ . '/uploads')) {

    echo 'پوشه وجود دارد';

}


# حذف Directory

برای حذف Directory خالی می‌توان از rmdir() استفاده کرد:


rmdir(__DIR__ . '/uploads');

اگر Directory دارای فایل یا پوشه باشد، ابتدا باید محتویات آن مدیریت شود.


# کار با فایل CSV در PHP

یکی از کاربردهای مهم فایل در PHP، پردازش CSV است.

فرض کنید فایل زیر را داریم:


id,name,email

1,Ali,ali@example.com

2,Sara,sara@example.com

می‌توان از fgetcsv() استفاده کرد:


$file = fopen('users.csv', 'r');



while (($row = fgetcsv($file)) !== false) {

    print_r($row);

}



fclose($file);

این روش برای Import داده‌های CSV کاربرد زیادی دارد.


# نوشتن CSV در PHP

برای ایجاد CSV می‌توان از fputcsv() استفاده کرد:


$file = fopen('users.csv', 'w');



fputcsv($file, ['id', 'name', 'email']);

fputcsv($file, [1, 'Ali', 'ali@example.com']);

fputcsv($file, [2, 'Sara', 'sara@example.com']);



fclose($file);

این روش برای Export اطلاعات از Database به فایل CSV بسیار کاربردی است.


# آپلود فایل در PHP

یکی از مهم‌ترین کاربردهای مدیریت فایل در PHP، آپلود فایل توسط کاربر است.

فرم HTML ساده:


<form method="POST" enctype="multipart/form-data">

    <input type="file" name="document">

    <button type="submit">Upload</button>

</form>

ویژگی زیر بسیار مهم است:


enctype="multipart/form-data"

بدون آن، فایل به شکل صحیح در Request ارسال نمی‌شود.


# دریافت فایل آپلود شده

بعد از ارسال فرم، PHP اطلاعات فایل را در $_FILES قرار می‌دهد.

مثلاً:


if (isset($_FILES['document'])) {

    $file = $_FILES['document'];



    echo $file['name'];

}

اطلاعاتی مانند موارد زیر در اختیار شما قرار می‌گیرد:


name

type

tmp_name

error

size


# ذخیره فایل آپلود شده

برای انتقال فایل موقت به مسیر موردنظر می‌توان از move_uploaded_file() استفاده کرد:


if (

    isset($_FILES['document']) &&

    $_FILES['document']['error'] === UPLOAD_ERR_OK

) {

    $tmpName = $_FILES['document']['tmp_name'];



    $destination = __DIR__ . '/uploads/document.pdf';



    move_uploaded_file($tmpName, $destination);

}

اما این مثال برای Production کافی نیست؛ قبل از ذخیره فایل باید Validation و کنترل امنیتی انجام شود.


# چرا نباید به نام فایل آپلودشده اعتماد کنیم؟

فرض کنید کاربر فایلی با نام:


invoice.pdf

آپلود می‌کند.

نباید نام فایل را مستقیماً برای ساخت مسیر ذخیره‌سازی استفاده کنیم.

همچنین نباید به Extension فایل به تنهایی اعتماد کنیم.

بهتر است:

  • نام تصادفی ایجاد کنیم.
  • Extension مناسب را از نوع معتبر استخراج کنیم.
  • حجم فایل را محدود کنیم.
  • MIME Type را بررسی کنیم.
  • Extensionهای خطرناک را مسدود کنیم.
  • فایل‌های آپلودی را در محل مناسب ذخیره کنیم.

# ایجاد نام تصادفی برای فایل

مثلاً:


$filename = bin2hex(random_bytes(16));

سپس می‌توان Extension معتبر را به آن اضافه کرد.

مثلاً:


$filename = bin2hex(random_bytes(16)) . '.pdf';

در پروژه واقعی، Extension نباید صرفاً از نام فایل کاربر گرفته شود؛ ابتدا باید نوع فایل اعتبارسنجی شود.


# بررسی حجم فایل آپلودی

مثلاً می‌توان حداکثر حجم را تعیین کرد:


$maxSize = 5 * 1024 * 1024;



if ($_FILES['document']['size'] > $maxSize) {

    die('File is too large');

}

در این مثال حداکثر حجم ۵ مگابایت در نظر گرفته شده است.

البته محدودیت‌های PHP مانند upload_max_filesize و post_max_size نیز باید با نیاز پروژه هماهنگ باشند.


# بررسی خطای آپلود

قبل از پردازش فایل باید Error Code را بررسی کنیم:


if ($_FILES['document']['error'] !== UPLOAD_ERR_OK) {

    die('Upload failed');

}

PHP برای خطاهای Upload ثابت‌هایی مانند UPLOAD_ERR_OK، UPLOAD_ERR_INI_SIZE و موارد دیگر ارائه می‌کند.


# بررسی MIME Type فایل

برای بررسی نوع واقعی فایل می‌توان از ابزارهایی مانند finfo استفاده کرد.

مثلاً:


$finfo = new finfo(FILEINFO_MIME_TYPE);



$mimeType = $finfo->file(

    $_FILES['document']['tmp_name']

);



echo $mimeType;

این روش بهتر از اعتماد صرف به مقدار $_FILES['document']['type'] است.


# چرا آپلود فایل می‌تواند خطرناک باشد؟

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

اگر Application اجازه دهد کاربر هر فایلی را Upload کند، مهاجم ممکن است فایل خطرناکی روی Server قرار دهد.

به همین دلیل باید:

  • Extension را محدود کنید.
  • MIME Type را بررسی کنید.
  • حجم فایل را محدود کنید.
  • نام فایل را تغییر دهید.
  • مسیر ذخیره‌سازی را کنترل کنید.
  • از اجرای فایل‌های Upload شده جلوگیری کنید.
  • دسترسی Directory را درست تنظیم کنید.

# جلوگیری از Path Traversal

یکی از مشکلات امنیتی مهم هنگام کار با فایل، Path Traversal است.

فرض کنید کاربر بتواند مسیر فایل را به صورت زیر ارسال کند:


../../config.php

اگر این ورودی بدون کنترل استفاده شود، ممکن است Application خارج از مسیر موردنظر به فایل دسترسی پیدا کند.

بنابراین نباید مسیر فایل را مستقیماً از ورودی کاربر دریافت و استفاده کرد.

بهتر است مسیرهای مجاز را خود Application تعیین کند.


# آیا باید فایل‌های Upload شده را داخل public ذخیره کنیم؟

این موضوع به نوع فایل و نیاز پروژه بستگی دارد.

برای فایل‌هایی که نباید مستقیماً از طریق URL عمومی قابل دسترسی باشند، بهتر است فایل خارج از Web Root ذخیره شود و Download از طریق Application و پس از بررسی Permission انجام شود.

برای فایل‌های عمومی مانند برخی تصاویر، می‌توان از Storage عمومی استفاده کرد، اما همچنان باید Validation و کنترل امنیتی انجام شود.


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

از آنجا که در مقاله قبلی درباره JSON صحبت کردیم، می‌توانیم یک فایل JSON را نیز با PHP بخوانیم.

فرض کنید:


{

    "name": "Ali",

    "age": 25

}

داخل user.json قرار دارد.

کد:


$json = file_get_contents(__DIR__ . '/user.json');



$data = json_decode($json, true);



echo $data['name'];

در اینجا ابتدا فایل را خواندیم و سپس JSON را به Array تبدیل کردیم.


# نوشتن JSON در فایل

برعکس این عملیات نیز امکان‌پذیر است:


$data = [

    'name' => 'Ali',

    'age' => 25

];



$json = json_encode(

    $data,

    JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT

);



file_put_contents(

    __DIR__ . '/user.json',

    $json

);

این الگو برای فایل‌های Configuration یا داده‌های ساده کاربرد دارد.

برای داده‌های حساس یا ساختاریافته و همزمان چندکاربره، باید ملاحظات بیشتری در نظر گرفته شود.


# ذخیره Log در فایل

یکی از کاربردهای رایج فایل در PHP، ذخیره Log است.

مثلاً:


$message = date('Y-m-d H:i:s') . " - User logged in\n";



file_put_contents(

    __DIR__ . '/app.log',

    $message,

    FILE_APPEND

);

در پروژه‌های حرفه‌ای بهتر است از سیستم Logging مناسب Application یا Framework استفاده شود.


# مدیریت Lock هنگام نوشتن فایل

اگر چند Request همزمان یک فایل را تغییر دهند، ممکن است Race Condition ایجاد شود.

در چنین شرایطی می‌توان از:


LOCK_EX

استفاده کرد:


file_put_contents(

    __DIR__ . '/app.log',

    $message,

    FILE_APPEND | LOCK_EX

);

این گزینه می‌تواند برای برخی سناریوهای همزمانی ساده مفید باشد.

البته Lock فایل راه‌حل همه مشکلات همزمانی نیست و برای داده‌های پیچیده و تراکنشی بهتر است از Database یا سیستم مناسب‌تری استفاده شود.


# کار با فایل‌های بزرگ در PHP

برای فایل‌های کوچک می‌توان از:


file_get_contents()

استفاده کرد.

اما اگر فایل بسیار بزرگ باشد، خواندن کل آن در حافظه ممکن است مصرف RAM را افزایش دهد.

در چنین شرایطی بهتر است فایل را به صورت Stream و بخش‌بخش پردازش کنیم:


$file = fopen('large-file.txt', 'r');



while (($line = fgets($file)) !== false) {

    // Process line

}



fclose($file);

این روش می‌تواند برای پردازش فایل‌های بزرگ مناسب‌تر باشد.


# Stream در PHP چیست؟

PHP از مفهوم Stream برای کار با منابع مختلف داده استفاده می‌کند.

فایل یکی از رایج‌ترین Streamها است.

برای مثال:


$handle = fopen('data.txt', 'r');

این Handle امکان خواندن داده را در اختیار ما قرار می‌دهد.

Streamها فقط محدود به فایل‌های معمولی نیستند و PHP Wrapperهای مختلفی نیز دارد.


# کار با php://input

یکی از Streamهای مهم PHP:


php://input

است.

برای مثال در APIهایی که Body آنها JSON است:


$input = file_get_contents('php://input');

سپس:


$data = json_decode($input, true);

این موضوع ارتباط مستقیمی با مبحث JSON در PHP دارد.


# تفاوت فایل و Database

گاهی برنامه‌نویس تازه‌کار تصور می‌کند می‌توان همه اطلاعات را داخل فایل ذخیره کرد.

اما فایل و Database کاربردهای متفاوتی دارند.

فایل

مناسب برای:

  • Log
  • CSV
  • فایل‌های Export
  • فایل‌های Configuration
  • فایل‌های Upload
  • برخی Cacheها

Database

مناسب برای:

  • کاربران
  • سفارش‌ها
  • تراکنش‌ها
  • محصولات
  • روابط بین داده‌ها
  • Queryهای پیچیده
  • داده‌های تراکنشی

برای سیستم‌های چندکاربره و داده‌های حساس، Database معمولاً انتخاب مناسب‌تری است.


# نکات امنیتی مهم هنگام کار با فایل در PHP

هنگام کار با فایل‌ها این موارد را جدی بگیرید:

۱. ورودی کاربر را مستقیماً به عنوان Path استفاده نکنید

از Path Traversal جلوگیری کنید.

۲. به Extension اعتماد نکنید

نوع فایل را به شکل مناسب بررسی کنید.

۳. نام فایل را کنترل کنید

نام فایل کاربر را مستقیماً برای ذخیره‌سازی استفاده نکنید.

۴. Permission مناسب تنظیم کنید

فایل‌ها و Directoryها نباید دسترسی بیش از نیاز داشته باشند.

۵. فایل‌های حساس را Public نکنید

فایل‌هایی مانند:


.env

config.php

database credentials

private backups

نباید به صورت عمومی قابل دانلود باشند.

۶. حجم فایل را محدود کنید

از Uploadهای بسیار بزرگ جلوگیری کنید.

۷. محتوای فایل را اعتبارسنجی کنید

خصوصاً برای فایل‌هایی که قرار است پردازش شوند.


# مثال کامل: ایجاد و خواندن فایل

یک مثال ساده:


<?php



$file = __DIR__ . '/data.txt';



$content = "Hello PHP\n";

$content .= "Learning file handling";



file_put_contents(

    $file,

    $content

);



if (file_exists($file)) {

    $data = file_get_contents($file);



    echo $data;

}

این مثال ابتدا فایل را ایجاد و سپس محتوای آن را می‌خواند.


# مثال کامل: افزودن اطلاعات به فایل


<?php



$file = __DIR__ . '/app.log';



$message = date('Y-m-d H:i:s');

$message .= " - New request\n";



file_put_contents(

    $file,

    $message,

    FILE_APPEND | LOCK_EX

);



echo 'Log saved';

این الگو برای یک Log ساده مناسب است.


# مثال کامل: آپلود امن‌تر فایل

نمونه ساده زیر برخی کنترل‌های پایه را نشان می‌دهد:


<?php



if ($_SERVER['REQUEST_METHOD'] === 'POST') {



    if (

        !isset($_FILES['document']) ||

        $_FILES['document']['error'] !== UPLOAD_ERR_OK

    ) {

        die('Invalid upload');

    }



    $file = $_FILES['document'];



    $maxSize = 5 * 1024 * 1024;



    if ($file['size'] > $maxSize) {

        die('File is too large');

    }



    $finfo = new finfo(FILEINFO_MIME_TYPE);



    $mimeType = $finfo->file($file['tmp_name']);



    $allowedTypes = [

        'application/pdf' => 'pdf',

        'image/jpeg' => 'jpg',

        'image/png' => 'png',

    ];



    if (!isset($allowedTypes[$mimeType])) {

        die('Invalid file type');

    }



    $extension = $allowedTypes[$mimeType];



    $filename = bin2hex(random_bytes(16)) . '.' . $extension;



    $uploadDirectory = __DIR__ . '/uploads';



    if (!is_dir($uploadDirectory)) {

        mkdir($uploadDirectory, 0755, true);

    }



    $destination = $uploadDirectory . '/' . $filename;



    if (!move_uploaded_file(

        $file['tmp_name'],

        $destination

    )) {

        die('Unable to save file');

    }



    echo 'File uploaded successfully';

}

این کد صرفاً یک نمونه آموزشی است و برای Production باید متناسب با معماری Application، Server، Web Server و نوع فایل‌های مجاز سخت‌گیرانه‌تر بررسی شود.


# توابع مهم کار با فایل در PHP

تابعکاربرد
file_exists()بررسی وجود فایل
file_get_contents()خواندن محتویات فایل
file_put_contents()نوشتن محتوا در فایل
fopen()باز کردن فایل
fclose()بستن فایل
fread()خواندن تعداد مشخصی از Byte
fgets()خواندن یک خط
fwrite()نوشتن در فایل
unlink()حذف فایل
filesize()دریافت اندازه فایل
filemtime()زمان آخرین تغییر
is_readable()بررسی قابلیت خواندن
is_writable()بررسی قابلیت نوشتن
mkdir()ایجاد Directory
rmdir()حذف Directory خالی
fgetcsv()خواندن CSV
fputcsv()نوشتن CSV
move_uploaded_file()انتقال فایل Upload شده

# جمع‌بندی

کار با فایل در PHP یکی از مباحث پایه‌ای اما بسیار کاربردی در توسعه وب است.

در این آموزش با موارد مهمی مانند:

  • خواندن فایل
  • نوشتن فایل
  • ایجاد فایل
  • حذف فایل
  • fopen()
  • fread()
  • fwrite()
  • fgets()
  • file_get_contents()
  • file_put_contents()
  • unlink()
  • مدیریت Directory
  • کار با CSV
  • آپلود فایل
  • بررسی MIME Type
  • محدود کردن حجم فایل
  • امنیت آپلود
  • Path Traversal
  • کار با فایل‌های بزرگ
  • Stream
  • ذخیره JSON در فایل
  • ذخیره Log

آشنا شدیم.

برای پروژه‌های ساده، file_get_contents() و file_put_contents() معمولاً کافی هستند. اما زمانی که نیاز به کنترل دقیق‌تر فرآیند خواندن و نوشتن یا پردازش فایل‌های بزرگ دارید، استفاده از Streamها و توابعی مانند fopen()، fread() و fwrite() اهمیت بیشتری پیدا می‌کند.

همچنین در بخش Upload باید همیشه امنیت را در اولویت قرار دهید و هیچ فایل یا مسیر ارسالی از سمت کاربر را بدون Validation و کنترل مناسب روی Server ذخیره نکنید.

در ادامه مسیر یادگیری PHP، یکی از مباحث مهم بعدی Exception در PHP است؛ زیرا در Applicationهای واقعی باید بتوانیم خطاها و شرایط غیرمنتظره را به شکل اصولی مدیریت کنیم.


# سوالات متداول

چگونه یک فایل را در PHP بخوانیم؟

برای فایل‌های معمولی می‌توان از file_get_contents() استفاده کرد:


$content = file_get_contents('data.txt');

چگونه یک فایل در PHP ایجاد کنیم؟

با file_put_contents() می‌توان فایل را ایجاد و داخل آن اطلاعات ذخیره کرد:


file_put_contents('data.txt', 'Hello PHP');

چگونه به انتهای فایل اطلاعات اضافه کنیم؟

از FILE_APPEND استفاده کنید:


file_put_contents(

    'data.txt',

    "New line\n",

    FILE_APPEND

);

چگونه فایل را در PHP حذف کنیم؟

از unlink() استفاده می‌شود:


unlink('data.txt');

البته بهتر است قبل از آن وجود فایل بررسی شود.

fopen در PHP چیست؟

fopen() برای باز کردن فایل و ایجاد یک Handle جهت خواندن یا نوشتن استفاده می‌شود.

تفاوت fopen و file_get_contents چیست؟

file_get_contents() برای خواندن ساده کل محتوای فایل مناسب است، در حالی که fopen() کنترل بیشتری برای کار با فایل به صورت Stream در اختیار برنامه‌نویس قرار می‌دهد.

چگونه فایل را در PHP آپلود کنیم؟

ابتدا باید فرم با multipart/form-data ایجاد شود و سپس فایل از طریق $_FILES دریافت و با move_uploaded_file() در مسیر مناسب ذخیره شود.

آیا می‌توان JSON را در فایل PHP ذخیره کرد؟

بله. می‌توان Array را با json_encode() به JSON تبدیل کرد و سپس با file_put_contents() در فایل ذخیره کرد.

چگونه فایل بزرگ را در PHP پردازش کنیم؟

برای فایل‌های بزرگ بهتر است آن را به صورت Stream و بخش‌بخش پردازش کنید، مثلاً با fopen() و fgets()، تا کل فایل همزمان وارد حافظه نشود.

آیا ذخیره اطلاعات کاربران در فایل مناسب است؟

برای داده‌های ساختاریافته و تراکنشی مانند کاربران، سفارش‌ها و پرداخت‌ها معمولاً Database انتخاب مناسب‌تری است. فایل بیشتر برای مواردی مانند Log، CSV، Export، فایل‌های Upload و برخی داده‌های کم‌حجم کاربرد دارد.


# مقالات مرتبط

برای ادامه مسیر یادگیری PHP، این مقالات را نیز مطالعه کنید:

  • PHP چیست و چه کاربردی دارد؟
  • آموزش PHP از صفر
  • متغیرها در PHP
  • انواع داده در PHP
  • آرایه‌ها در PHP
  • رشته‌ها در PHP
  • کار با تاریخ و زمان در PHP
  • کار با JSON در PHP
  • Exception در PHP
  • Namespace در PHP
  • Composer چیست؟
  • OOP در PHP
  • PHP و MySQL
  • REST API با PHP

نظرات (0)

نظرات پس از تأیید مدیر نمایش داده می‌شوند

هنوز نظری ثبت نشده است؛ اولین نفر باشید!

مقالات مرتبط

ساخت CMS با Laravel 12؛ آموزش ساخت سیستم مدیریت محتوا از صفر

ساخت CMS با Laravel 12؛ آموزش ساخت سیستم مدیریت محتوا از صفر

۲۴ دقیقه
ساخت فروشگاه اینترنتی با Laravel 12؛ آموزش پروژه‌محور از صفر تا طراحی هسته فروشگاه

ساخت فروشگاه اینترنتی با Laravel 12؛ آموزش پروژه‌محور از صفر تا طراحی هسته فروشگاه

۲۲ دقیقه
ساخت Marketplace با Laravel؛ آموزش طراحی فروشگاه چندفروشندگی

ساخت Marketplace با Laravel؛ آموزش طراحی فروشگاه چندفروشندگی

۲۲ دقیقه
مدیریت Queueهای سنگین در Laravel؛ آموزش پردازش کارهای طولانی

مدیریت Queueهای سنگین در Laravel؛ آموزش پردازش کارهای طولانی

۲۲ دقیقه