🧾 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");
PHPrename("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سترجع
.
و..
ضمن النتيجة، لذا تأكد من تجاهلهما.