العمل مع نظام الملفات في PHP: الدوال والأمثلة

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

العمل مع نظام الملفات في PHP: الوظائف الأساسية والأمثلة



العمل مع نظام الملفات هو أحد المهام الرئيسية في تطوير الويب. توفر PHP مجموعة قوية ومرنة من الوظائف لإنشاء وقراءة وكتابة وحذف الملفات والمجلدات، بالإضافة إلى إدارة صلاحيات الوصول. في هذه المقالة، سنستعرض الإمكانيات الأساسية لـ PHP للعمل مع نظام الملفات، ونقدم أمثلة عملية، ونناقش الأخطاء الشائعة.



1. قراءة الملفات في PHP



تدعم PHP عدة طرق لقراءة البيانات من الملفات. يعتمد اختيار الطريقة على حجم الملف ومستوى التحكم المطلوب.



1.1. الدالة file_get_contents()

أبسط طريقة لقراءة ملف كامل في سلسلة نصية هي استخدام file_get_contents(). هذه الدالة مناسبة للملفات الصغيرة (الإعدادات، القوالب).



<?php// قراءة الملف بأكمله في سلسلة نصية$content = file_get_contents('data.txt');if ($content !== false) {    echo "محتوى الملف: " . htmlspecialchars($content);} else {    echo "خطأ في قراءة الملف";}?>


1.2. الدالة file()

إذا كنت بحاجة للحصول على محتوى الملف كمصفوفة من السلاسل النصية (سطر واحد لكل عنصر)، استخدم file().



<?php$lines = file('log.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);foreach ($lines as $lineNum => $line) {    echo "السطر " . ($lineNum + 1) . ": " . htmlspecialchars($line) . "<br>";}?>


1.3. القراءة سطراً بسطر باستخدام fopen() + fgets()

للملفات الكبيرة (مثل ملفات السجلات)، من الأفضل استخدام القراءة التدفقية لتجنب تحميل الملف بأكمله في الذاكرة.



<?php$handle = fopen('large_file.csv', 'r');if ($handle) {    while (($buffer = fgets($handle, 4096)) !== false) {        echo $buffer . "<br>";    }    fclose($handle);} else {    echo "فشل فتح الملف";}?>


2. كتابة البيانات إلى الملفات



يمكن إجراء الكتابة أيضاً بطرق مختلفة. الفرق الرئيسي هو إما استبدال محتوى الملف أو الإضافة إلى نهايته.



2.1. الدالة file_put_contents()

طريقة سريعة لكتابة سلسلة نصية إلى ملف. إذا كان الملف غير موجود، سيتم إنشاؤه. بشكل افتراضي، يتم استبدال محتوى الملف.



<?php$data = "إدخال جديد: " . date('Y-m-d H:i:s') . "";// استبدال الملفfile_put_contents('log.txt', $data);// الإضافة إلى النهاية (العلم FILE_APPEND)file_put_contents('log.txt', $data, FILE_APPEND);?>


2.2. الكتابة اليدوية عبر fopen() + fwrite()

للتحكم الدقيق (مثل قفل الملف)، استخدم الزوج fopen() / fwrite().



<?php$filename = 'counter.txt';$handle = fopen($filename, 'c+'); // 'c+' — ينشئ الملف إذا لم يكن موجوداًif (flock($handle, LOCK_EX)) { // قفل حصري    $current = (int) fread($handle, filesize($filename) ?: 1);    $current++;    ftruncate($handle, 0); // مسح الملف    rewind($handle);    fwrite($handle, $current);    flock($handle, LOCK_UN); // إلغاء القفل}fclose($handle);echo "العداد: $current";?>


3. العمل مع الدلائل



تتيح PHP ليس فقط إدارة الملفات، بل أيضاً إنشاء وحذف وعرض المجلدات.



3.1. إنشاء المجلدات (mkdir)

<?php// إنشاء مجلد واحدif (!is_dir('uploads')) {    mkdir('uploads', 0755);}// إنشاء مجلدات متداخلة بشكل تكراري (PHP 5.4+)mkdir('images/2024/12', 0755, true);?>


3.2. حذف المجلدات (rmdir)

rmdir() يحذف فقط المجلد الفارغ. لحذف مجلد بكل محتوياته، نحتاج إلى دالة تكرارية.



<?phpfunction deleteDirectory($dir) {    if (!file_exists($dir)) {        return true;    }    if (!is_dir($dir)) {        return unlink($dir);    }    $items = array_diff(scandir($dir), ['.', '..']);    foreach ($items as $item) {                

المدونات

توصيات الكتب