مقدمة: لماذا تحتاج إلى العمل مع نظام الملفات في PHP
أي مطور ويب عاجلاً أم آجلاً سيواجه الحاجة إلى حفظ البيانات على الخادم، تحميل الصور، إنشاء ملفات مؤقتة أو قراءة الإعدادات. توفر PHP مجموعة قوية من الدوال للعمل مع نظام الملفات، والتي تتيح تنفيذ كل هذه المهام بسرعة وأمان.
في هذه المقالة، سنستعرض أكثر العمليات شيوعًا: قراءة وكتابة الملفات، إنشاء وحذف المجلدات، التحقق من وجود العناصر، بالإضافة إلى العمل مع المسارات. جميع الأمثلة مكتوبة بلغة PHP وجاهزة للاستخدام في مشاريعك.
الدوال الأساسية للعمل مع الملفات
لنبدأ بالعمليات الأساسية — فتح، قراءة وكتابة الملفات. تدعم PHP عدة طرق للتفاعل مع الملفات، وسنستعرض أشهرها.
فتح وإغلاق الملف: fopen و fclose
الدالة fopen() تفتح ملفًا وتعيد مؤشرًا للعمل اللاحق. تحدد أوضاع الفتح ما يمكنك فعله بالملف: القراءة (r)، الكتابة (w)، الإلحاق (a)، إلخ.
<?php// فتح ملف للقراءة$file = fopen("data.txt", "r");if ($file) { // العمل مع الملف fclose($file); // يجب إغلاقه} else { echo "فشل فتح الملف";}?>القراءة من ملف: fread، fgets، file_get_contents
لقراءة المحتوى يمكن استخدام دوال مختلفة حسب المهمة:
fread()— تقرأ عددًا محددًا من البايتات.fgets()— تقرأ سطرًا واحدًا.file_get_contents()— أسهل طريقة لقراءة الملف بأكمله.
<?php// قراءة الملف بأكمله$content = file_get_contents("example.txt");echo $content;
// القراءة سطرًا سطرًا$file = fopen("example.txt", "r");while (($line = fgets($file)) !== false) { echo $line . "<br>";}fclose($file);?>الكتابة في ملف: fwrite و file_put_contents
تتم كتابة البيانات باستخدام fwrite() (تتطلب مؤشرًا مفتوحًا) أو file_put_contents() (سطر واحد ويتم كتابة الملف).
<?php// كتابة سريعةfile_put_contents("log.txt", "إدخال جديد", FILE_APPEND);
// الكتابة عبر fwrite$file = fopen("config.ini", "w");fwrite($file, "db_host=localhost");fwrite($file, "db_user=root");fclose($file);?>العمل مع المجلدات
إنشاء، حذف والتنقل بين المجلدات — جزء مهم آخر من العمل مع نظام الملفات في PHP.
إنشاء وحذف المجلدات: mkdir و rmdir
الدالة mkdir() تنشئ مجلدًا جديدًا. المعامل الثالث recursive يسمح بإنشاء مجلدات متداخلة بأمر واحد.
<?php// إنشاء مجلد واحدmkdir("uploads", 0777);
// إنشاء مجلدات متداخلة (2025 → 03 → images)mkdir("uploads/2025/03/images", 0777, true);
// حذف مجلد فارغrmdir("uploads/temp");?>التحقق من وجود الملفات والمجلدات
قبل تنفيذ العمليات، من المفيد دائمًا التحقق مما إذا كان الملف أو المجلد موجودًا. لهذا تُستخدم الدوال file_exists()، is_file() و is_dir().
<?php$path = "data/config.php";if (file_exists($path)) { echo "الملف أو المجلد موجود";}if (is_file($path)) { echo "هذا ملف";}if (is_dir("uploads")) { echo "هذا مجلد";}?>الحصول على قائمة الملفات في مجلد
الدالة scandir() تعيد مصفوفة بجميع العناصر في المجلد. بينما glob() تسمح بالتصفية حسب النمط (مثل الصور فقط).
<?php// جميع الملفات والمجلدات$items = scandir("uploads");print_r($items);
// ملفات PHP فقط$phpFiles = glob("*.php");for