Directories in PHP

1. ✅ مقدمة عن التعامل مع المجلدات في PHP

في PHP يمكننا إنشاء، حذف، تعديل، قراءة، وتصفية المجلدات باستخدام دوال مدمجة. هذا مفيد جدًا في تطبيقات مثل:

  • أنظمة إدارة الملفات.
  • تحميل الملفات وتخزينها.
  • قراءة ملفات المشاريع تلقائيًا.
2. 📂 إنشاء مجلد جديد باستخدام mkdir()
الصيغة:
mkdir("اسم_المجلد", الصلاحيات, $recursive);
PHP
مثال 1:
mkdir("uploads");
PHP
مثال 2:
mkdir("data/files", 0777, true); // ينشئ مجلدات متداخلة
PHP
✅ نصائح:
  • استخدم 0777 فقط إذا كنت بحاجة لصلاحيات كاملة (اختبر ذلك محليًا، لا في السيرفر).
  • تأكد من أن المجلد لا يوجد مسبقًا.
⚠️ محاذير:
  • mkdir() يعطي تحذيرًا إذا كان المجلد موجودًا.
  • تحقق من وجود المجلد باستخدام file_exists().
3. 🗑️ حذف مجلد باستخدام rmdir()
rmdir("uploads");
PHP

لا يحذف إلا المجلدات الفارغة.

مثال 1:
if (is_dir("test") && count(scandir("test")) <= 2) {
    rmdir("test");
}
PHP
مثال 2:
$dir = "backup";
if (is_dir($dir)) {
    rmdir($dir);
}
PHP
⚠️ محاذير:
  • لا يعمل إذا كان المجلد يحتوي ملفات.
  • لحذف مجلد غير فارغ، استخدم وظيفة مخصصة (سنشرحها لاحقًا).
4. 📃 قراءة محتويات مجلد باستخدام opendir() و readdir()
$dir = opendir("uploads");
while (($file = readdir($dir)) !== false) {
    echo "File: $file <br>";
}
closedir($dir);
PHP
✅ فوائد:
  • يعطيك تحكم كامل على المجلد.
  • يمكنك فلترة الملفات يدويًا.
⚠️ ملاحظات:
  • . و .. تمثل المجلد الحالي والأبوي، تجاهلها.
5. 🔄 التحقق من وجود مجلد: is_dir() و file_exists()
مثال 1:
if (is_dir("uploads")) {
    echo "المجلد موجود";
}
PHP
مثال 2:
if (!file_exists("uploads")) {
    mkdir("uploads");
}
PHP
6. 🔐 صلاحيات المجلدات (chmod)
مثال:
chmod("uploads", 0755); // قراءة وتنفيذ للمستخدمين
PHP
❗ محاذير:
  • لا تستخدم 0777 إلا عند الضرورة.
  • في بعض الخوادم، لن يتم تنفيذ الأمر بدون صلاحيات root.
7. 📁 التعامل مع المسارات (Relative vs Absolute)
// Relative
$path = "uploads/file.txt";

// Absolute
$path = $_SERVER['DOCUMENT_ROOT'] . "/uploads/file.txt";
PHP

✅ استخدم __DIR__ أو realpath() لتفادي المشاكل.

8. 📑 قراءة مجلد باستخدام scandir()
$files = scandir("uploads");
print_r($files);
PHP
❗ ملاحظة:
  • يحتوي على . و ...
  • أسهل من opendir() في معظم الحالات.
9. 🔍 استخدام glob() للبحث عن ملفات
$images = glob("images/*.jpg");
PHP
أمثلة:
$phpFiles = glob("*.php");
$allFiles = glob("folder/*");
PHP

✅ مفيدة للفلترة مثل *.txt.

10. 🧹 حذف مجلد غير فارغ (كود مخصص)
function deleteFolder($folder) {
    $files = array_diff(scandir($folder), ['.', '..']);
    foreach ($files as $file) {
        $path = "$folder/$file";
        is_dir($path) ? deleteFolder($path) : unlink($path);
    }
    return rmdir($folder);
}
PHP
✅ استخدام:
deleteFolder("old_backup");
PHP
11. 🔧 تغيير اسم مجلد باستخدام rename()
rename("old_name", "new_name");
PHP
12. 🧭 getcwd() – معرفة المجلد الحالي
echo getcwd(); // current working directory
PHP
13. 🔁 chdir() – تغيير المجلد الحالي
chdir("uploads");
echo getcwd(); // داخل مجلد uploads الآن
PHP
14. 💡 sys_get_temp_dir()
echo sys_get_temp_dir(); // مجلد الملفات المؤقتة في النظام
PHP
15. ⚠️ التعامل مع الأخطاء
مثال باستخدام try/catch:
try {
    if (!is_dir("my_dir")) {
        mkdir("my_dir");
    }
} catch (Exception $e) {
    echo "حدث خطأ: " . $e->getMessage();
}
PHP

✅ الأفضل استخدام @ أو التحقق يدويًا لتفادي ظهور أخطاء على المستخدم.