File System

🧾 1. مقدمة عن نظام الملفات في PHP
✅ ما المقصود بـ File System في PHP؟

نظام الملفات (File System) هو الطريقة التي يتعامل بها نظام التشغيل مع تخزين الملفات وقراءتها.
في PHP، تستطيع من خلال أوامر ودوال محددة فتح ملفات، قراءتها، تعديلها، حذفها، أو إنشاؤها.

📌 لماذا نحتاج التعامل مع الملفات في PHP؟
  • قراءة بيانات من ملف (مثل ملف إعدادات أو قاعدة بيانات بصيغة JSON).
  • تخزين بيانات المستخدم (مثل سجل الزوار أو تعليقات).
  • حفظ ملفات مؤقتة أو تقارير.
  • بناء أنظمة إدارة ملفات أو تحميل ملفات.
📄 2. فتح الملفات (فتح / قراءة / كتابة)
🔹 fopen() – فتح ملف
$handle = fopen("file.txt", "r");
PHP
الوضعالوظيفة
"r"قراءة فقط، الملف يجب أن يكون موجودًا
"w"كتابة فقط، ينشئ الملف إذا لم يكن موجودًا، ويمسح محتواه إذا كان موجود
"a"الإلحاق، يكتب في نهاية الملف دون مسح محتواه
"x"إنشاء ملف جديد فقط، إذا الملف موجود يظهر خطأ
"r+"قراءة وكتابة، دون حذف المحتوى
"w+"قراءة وكتابة، يمسح المحتوى
"a+"قراءة وكتابة، لكن لا يمسح المحتوى
"x+"قراءة وكتابة، بشرط أن الملف غير موجود
⚠️ ملاحظات ومحاذير:
  • تأكد من أن الملف موجود عند استخدام "r".
  • "w" و "w+" يحذفان كل محتوى الملف.
  • الأفضل دائمًا استخدام file_exists() قبل محاولة الفتح إن كان الملف حساس.
🔹 fclose() – إغلاق الملف
fclose($handle);
PHP

دائمًا اغلق الملفات بعد الانتهاء لتوفير الموارد وتجنب تلف البيانات.

🧑‍💻 3. قراءة محتوى الملفات
🔹 fread() – قراءة حجم معين من البيانات
$handle = fopen("file.txt", "r");
$content = fread($handle, filesize("file.txt"));
fclose($handle);
echo $content;
PHP
🔹 fgets() – قراءة سطر واحد فقط
$handle = fopen("file.txt", "r");
$line = fgets($handle);
fclose($handle);
echo $line;
PHP

مفيد عند قراءة ملفات سطرًا بسطر، مثل السجلات أو الإعدادات.

🔹 file() – قراءة كل سطر كعنصر في مصفوفة
$lines = file("file.txt");
foreach ($lines as $line) {
    echo $line . "<br>";
}
PHP

مفيد لمعالجة كل سطر على حدة.

🔹 file_get_contents() – قراءة كامل الملف دفعة واحدة كنص
$content = file_get_contents("file.txt");
echo $content;
PHP

الأكثر استخدامًا وسهولة، مفيد لقراءة ملفات نصية أو JSON.

✍️ 4. الكتابة داخل الملفات
🔹 fwrite() – كتابة محتوى إلى ملف
$handle = fopen("file.txt", "w");
fwrite($handle, "مرحبا بالعالم!");
fclose($handle);
PHP

إذا كان الملف غير موجود، سيتم إنشاؤه. إذا كان موجودًا وتم فتحه بـ "w"، سيتم مسح محتواه.

🔹 file_put_contents() – الطريقة الأسرع والأبسط
file_put_contents("file.txt", "أهلاً وسهلاً بك!");
PHP
💡 إضافة محتوى دون مسح القديم:
file_put_contents("file.txt", "سطر جديد\n", FILE_APPEND);
PHP
✅ ملاحظات عامة (نصائح ومحاذير):
  • 🔒 تحقق من أذونات الملف (permissions)، خصوصًا عند الكتابة.
  • ⚠️ لا تستخدم fopen() على ملفات يرفعها المستخدم دون التحقق من الاسم والمحتوى.
  • 🧠 استخدم file_get_contents() و file_put_contents() إذا لم تكن بحاجة لتحكم دقيق.
🧹 5. التحقق من وجود الملفات أو المجلدات
🔹 file_exists() – التحقق من وجود ملف أو مجلد
if (file_exists("file.txt")) {
    echo "الملف موجود";
} else {
    echo "الملف غير موجود";
}
PHP

✅ مفيد قبل أي عملية قراءة أو حذف حتى لا يحدث خطأ.

🔹 is_file() – هل المسار يشير إلى ملف
if (is_file("file.txt")) {
    echo "هذا ملف";
}
PHP
🔹 is_dir() – هل هو مجلد
if (is_dir("uploads")) {
    echo "هذا مجلد";
}
PHP
🔐 6. التحقق من أذونات الوصول للملفات
🔹 is_readable() – هل الملف قابل للقراءة؟
phpCopyEdit<code>if (is_readable("file.txt")) {
    echo "يمكن قراءة الملف";
}
</code>
PHP
🔹 is_writable() – هل الملف قابل للكتابة؟
if (is_writable("file.txt")) {
    echo "يمكن الكتابة على الملف";
}
PHP

⚠️ مهم جدًا قبل محاولة كتابة ملف، خصوصًا إذا كان مرفوعًا من السيرفر.

🔹 chmod() – تغيير أذونات الملف
chmod("file.txt", 0644);
PHP

🛡️ لا يُستخدم كثيرًا من داخل PHP إلا في التطبيقات الخاصة، ويفضل تغييره من إعدادات السيرفر أو FTP.

🧰 7. معلومات عن الملفات
🔹 filesize() – حجم الملف بالبايت
phpCopyEdit<code>echo filesize("file.txt"); // مثلاً: 1024
</code>
PHP
🔹 basename() – اسم الملف فقط
echo basename("/path/to/file.txt"); // file.txt
PHP
🔹 dirname() – اسم المجلد
echo dirname("/path/to/file.txt"); // /path/to
PHP
🔹 pathinfo() – تفاصيل المسار
$info = pathinfo("file.txt");
print_r($info);
PHP

يعيد مصفوفة تحتوي على dirname و basename و extension.

🔹 filemtime() – آخر وقت تم تعديل الملف فيه
echo date("Y-m-d H:i:s", filemtime("file.txt"));
PHP

مفيد في أنظمة النسخ الاحتياطي أو التحقق من التحديثات.

🔄 8. نسخ / إعادة تسمية / حذف الملفات
🔹 copy() – نسخ الملف
copy("file.txt", "copy.txt");
PHP
🔹 rename() – إعادة تسمية أو نقل ملف
rename("old.txt", "new.txt");
PHP
rename("file.txt", "folder/file.txt"); // نقل لداخل مجلد
PHP
🔹 unlink() – حذف الملف
if (file_exists("delete.txt")) {
    unlink("delete.txt");
}
PHP

⚠️ حذف الملفات باستخدام unlink() لا يمكن التراجع عنه.

📁 9. التعامل مع المجلدات (Directories)
🔹 mkdir() – إنشاء مجلد
mkdir("new_folder");
PHP

يمكن تمرير ثاني باراميتر للأذونات مثل:

mkdir("new_folder", 0755, true);
PHP
🔹 rmdir() – حذف مجلد فارغ فقط
rmdir("empty_folder");
PHP

لحذف مجلد فيه ملفات، يجب حذف الملفات أولًا باستخدام scandir().

🔹 scandir() – قراءة محتويات المجلد
$files = scandir("uploads");
foreach ($files as $file) {
    echo $file . "<br>";
}
PHP

سترجع . و .. ضمن النتيجة، لذا تأكد من تجاهلهما.