انتقل إلى محتوى الدرس
الدرس 55
دورة PHP

صلاحيات الملفات ومساحة القرص والنسخ والنقل والحذف في PHPPHP Filesystem Permissions Disk Space Copy Rename and Unlink

افحص مساحة القرص وأحجام الملفات وتواريخ تعديلها، وأدر الصلاحيات بـ chmod وfileperms، وانسخ وانقل واحذف الملفات بأمان في PHP 8.
أقسام الدرس
6
الأمثلة
6
اللغة
العربية
تاريخ النشر
غير محدد
المشاهدات
0
محتوى الدرس
في هذا الدرس 6تصفّح المواضيع

قبل توليد النسخ الاحتياطية الكبيرة أو تصدير الملفات الضخمة، افحص سعة القسم المتاحة والكلية عبر disk_free_space() وdisk_total_space().

  • تُرجع كلتا الدالتين عدد البايتات كعدد عشري float لضمان عدم حدوث طفح رقمي في الأقراص التي تبلغ سعتها عدة تيرابايت.
  • اقسم عدد البايتات على 1024 ** 3 (أو 1073741824) لتحويل البايتات الخام إلى جيجابايت مقروء (GiB).
  • تحقق دائماً من أن المساحة الحرة تتجاوز حداً آمناً قبل البدء بكتابة ملفات كبيرة.

تُرجع disk_free_space() وdisk_total_space() عدد البايتات العشري لنظام الملفات الذي يستضيف المجلد __DIR__.

مخطط توضيحي: محاكي صلاحيات الملفات والبيانات الوصفية التفاعلي (chmod / fileperms / unlink)
PHP
<?php
$dir = __DIR__;
$freeBytes = disk_free_space($dir);
$totalBytes = disk_total_space($dir);
$usedPct = round((1 - ($freeBytes / $totalBytes)) * 100, 1);
$freeGb = round($freeBytes / (1024 ** 3), 2);
echo "Free: " . ($freeGb > 0 ? "OK" : "LOW") . " | UsedPct: " . ($usedPct >= 0 ? "VALID" : "ERR") . "\n";

يوفر PHP دوال سريعة لقراءة البيانات الوصفية مثل filesize() وfiletype() وfilemtime() لفحص الملفات دون تحميل محتواها في الذاكرة.

  • تُرجع filesize($path) الحجم الدقيق بالبايت، بينما تُرجع filetype($path) نوع العنصر مثل "file" أو "dir" أو "link".
  • تُرجع filemtime($path) الطابع الزمني (Unix Timestamp) لآخر تعديل على المحتوى، وهو مثالي لتحديث الكاش وإصدارات الملفات.
  • نسّق الرقم الصحيح الناتج عن filemtime() باستخدام date("Y-m-d H:i:s", $mtime) لعرضه بصيغة مقروءة.

النص المكون من 16 بايت يعطي حجماً قدره 16 ونوع "file" وطابعاً زمنياً صالحاً لوقت التعديل.

PHP
<?php
$tmp = sys_get_temp_dir() . '/ct_meta.txt';
file_put_contents($tmp, "CloseTag PHP 8.4");
$size = filesize($tmp);
$type = filetype($tmp);
$hasMtime = filemtime($tmp) > 1700000000 ? 'yes' : 'no';
echo "Size: $size B | Type: $type | Recent: $hasMtime\n";
unlink($tmp);

تُضبط صلاحيات الملفات عبر الدالة chmod() باستخدام رقم ثماني (Octal)، وتُفحص عبر fileperms() مع تحديث ذاكرة الحالة بـ clearstatcache().

  • مرّر دائماً رقماً ثمانياً يبدأ بصفر على اليسار (مثل 0644 أو 0600)، ولا تمرّره كنص "0644" أو رقم عشري 644.
  • نسّق القيمة الناتجة من fileperms($path) عبر substr(sprintf("%o", fileperms($path)), -4) لاستخراج الأرقام الثمانية الأربعة.
  • نظراً لأن PHP يخزن بيانات حالة الملفات مؤقتاً لتسريع الأداء، استدعِ clearstatcache(true, $path) بعد تعديل الصلاحيات أو الحجم.

تضبط chmod($tmp, 0644) صلاحيات القراءة والكتابة، وتنعش clearstatcache(true, $tmp) الذاكرة المؤقتة، وتنسق sprintf("%o", ...) الصلاحيات الثمانية.

PHP
<?php
$tmp = sys_get_temp_dir() . '/ct_perm.txt';
file_put_contents($tmp, "secret");
chmod($tmp, 0644);
clearstatcache(true, $tmp);
$octal = substr(sprintf('%o', fileperms($tmp)), -4);
echo "Octal length: " . strlen($octal) . " | Readable: " . (is_readable($tmp) ? 'yes' : 'no') . "\n";
unlink($tmp);

استخدم الدالة copy() لإنشاء نسخة مطابقة من الملف في مسار احتياطي، وrename() لنقل الملف أو استبداله ذرياً.

  • تنسخ الدالة copy($source, $dest) محتوى الملف بالكامل وتستبدل الملف الهدف $dest إذا كان موجوداً مسبقاً.
  • تُعيد الدالة rename($oldPath, $newPath) تسمية الملف أو تنقله بين المجلدات على نفس نظام الملفات كعملية ذرية (Atomic).
  • الكتابة في ملف مؤقت أولاً ثم استدعاء rename($tmpFile, $liveFile) تضمن عدم قراءة أي مستخدم لملف غير مكتمل الكتابة.

تنسخ copy() المسودة إلى $bak، وتنقل rename() الملف الأصلي إلى $live بحيث يختفي مسار المسودة القديم.

مخطط تدفق التنفيذ العملي لقسم نسخ ونقل وإعادة تسمية الملفات بـ copy و rename في لغة PHP
PHP
<?php
$dir = sys_get_temp_dir();
$src = "$dir/ct_draft.txt";
$bak = "$dir/ct_backup.txt";
$live = "$dir/ct_live.txt";
file_put_contents($src, "v2.0");
copy($src, $bak);
rename($src, $live);
echo "Live: " . file_get_contents($live) . " | Draft exists: " . (file_exists($src) ? 'yes' : 'no') . "\n";
unlink($bak);
unlink($live);

اجمع بين دوال فحص البيانات الوصفية وتفريغ ذاكرة الحالة المؤقتة والعمليات الذرية للحفاظ على موثوقية التخزين على الخادم.

  • الدوال مثل filesize() وfilemtime() وfileperms() وis_file() تُحفظ نتائجها مؤقتاً حتى تستدعي clearstatcache().
  • استخدم الصلاحية الثمانية 0644 للملفات العادية غير التنفيذية، و0600 لملفات الإعدادات والمفاتيح السرية الخاصة.
  • اعتمد على الاستبدال الذري بالدالة rename() عند تحديث ملفات الكاش أو الإعدادات الحية التي يقرؤها الزوار في نفس الوقت.

استدعاء clearstatcache(true, $tmp) يضمن أن القراءة الثانية للدالة filesize($tmp) تجلب الحجم المحدث (18 بايت) من نظام التشغيل.

الدالةالوظيفة الأساسيةنوع الإرجاعتُخزن في Stat Cache؟
disk_free_space($dir)Available bytes on partitionfloat|falseNo
filesize($path) / filemtime($path)Byte size / Last modified timestampint|falseYes
chmod($path, 0644)Set octal permissionsboolClears automatically
copy($s, $d) / rename($s, $d) / unlink($p)Duplicate / Move / Delete fileboolClears target stat

PHP
<?php
$tmp = sys_get_temp_dir() . '/ct_stat_demo.txt';
file_put_contents($tmp, "v1");
$s1 = filesize($tmp);
file_put_contents($tmp, "version-2-expanded");
clearstatcache(true, $tmp);
$s2 = filesize($tmp);
echo "Before: $s1 B -> After: $s2 B\n";
unlink($tmp);
خلاصة المعرفة ومحطة الانتقال

ملخص الدرس

حصاد الدرس

مراجعة مركّزة لأهم المفاهيم والقواعد الهندسية التي أتقنتها في هذا الدرس قبل التطبيق العملي

ماذا تعلّمت في هذا الدرس؟

اجمع بين دوال فحص البيانات الوصفية وتفريغ ذاكرة الحالة المؤقتة والعمليات الذرية للحفاظ على موثوقية التخزين على الخادم. الدوال مثل filesize() وfilemtime() وfileperms() وis_file() تُحفظ نتائجها مؤقتاً حتى تستدعي clearstatcache(). استخدم الصلاحية الثمانية 0644 للملفات العادية غير التنفيذية، و0600 لملفات الإعدادات والمفاتيح السرية الخاصة. اعتمد على الاستبدال الذري بالدالة rename() عند تحديث ملفات الكاش أو الإعدادات الحية التي يقرؤها الزوار في نفس الوقت.

مشاركة

هل كان هذا الدرس مفيدًا؟

جارٍ تحميل الآراء…

ابنِ لغتك البرمجية

المصطلحات4

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 4 مفهومةأول بطاقة، أول خطوة
01 Permissions & Disk I/O الصلاحيات والنسخ والحذف
افحص مساحة القرص وأحجام الملفات وتواريخ تعديلها، وأدر الصلاحيات بـ chmod وfileperms، وانسخ وانقل واحذف الملفات بأمان في PHP 8.
للمراجعة
02 Checking Disk Free and Total Space قياس المساحة الكلية والمتاحة بـ disk_free_space
المفهوم الأساسي لقسم قياس المساحة الكلية والمتاحة بـ disk_free_space في لغة PHP الحديثة.
للمراجعة
03 Inspecting File Size Type and mtime فحص حجم الملف ونوعه ووقت آخر تعديل filesize و filemtime
الصياغة البرمجية والتطبيق العملي المباشر لقسم فحص حجم الملف ونوعه ووقت آخر تعديل filesize و filemtime.
للمراجعة
04 Managing Octal Permissions with chmod تعديل وقراءة الصلاحيات بـ chmod و fileperms و clearstatcache
قواعد التحقق وأفضل الممارسات القياسية الخاصة بقسم تعديل وقراءة الصلاحيات بـ chmod و fileperms و clearstatcache.
للمراجعة

اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.

حروف قليلة. معنى كامل.

الاختصارات4

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 4 مفهومةأول بطاقة، أول خطوة
01 PHP PHP
PHP: Hypertext Preprocessor
لغة البرمجة النصية على جانب الخادم لبناء تطبيقات الويب الديناميكية وواجهات البرمجة.
للمراجعة
02 CLI CLI
Command-Line Interface
واجهة سطر الأوامر التي تتيح تشغيل ملفات PHP مباشرة عبر الطرفية.
للمراجعة
03 FPM FPM
FastCGI Process Manager
مدير عمليات FastCGI عالي الأداء لمعالجة طلبات خادم الويب في PHP.
للمراجعة
04 HTML HTML
HyperText Markup Language
لغة الترميز القياسية التي يولدها محرك PHP ويرسلها إلى متصفح العميل بعد التنفيذ.
للمراجعة

اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.

من الفهم للتطبيق

مهامك قبل الاختبار

خطوة صغيرة كل مرة. وإنجاز تقدر ترجع له.

0/2مهام منجزة
  1. أنشئ ملف PHP محلياً ونفّذ المثال البرمجي المشروح في قسم قياس المساحة الكلية والمتاحة بـ disk_free_space للتحقق من المخرجات.

  2. بدّل بين الحالات الثلاث في المحاكي التفاعلي ضمن قسم فحص حجم الملف ونوعه ووقت آخر تعديل filesize و filemtime وقارن مخرجات التنفيذ.

تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.

مساحة التحدي

اختبر فهمك.
ووصلها للإتقان.

كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.

8أسئلة 1أنواع تحديات 100%هدف الإتقان
تصحيح تلقائي. فرص بلا حدود.

أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.

الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.

لمحة عن التحدي8 أسئلة تنتظرك
01

ما نوع البيانات الذي تُرجعه الدالتان disk_free_space() وdisk_total_space() عند النجاح؟

إرجاع float يمنع تجاوز سعة الأعداد الصحيحة في الأقراص الكبيرة.

02

كيف يجب تمرير معامل الصلاحيات في chmod($path, $permissions) لمنح المالك القراءة والكتابة والبقية القراءة فقط؟

تتطلب chmod() عدداً صحيحاً مكتوباً بالنظام الثماني.

03

لماذا قد تُرجع filesize($path) حجماً قديماً بعد تعديل الملف أثناء نفس دورة تنفيذ السكريبت؟

يحفظ PHP البيانات الوصفية مؤقتاً لتسريع الأداء، وتقوم clearstatcache(true, $path) بتحديثها.

04

ما الدالة المدمجة في PHP المسؤولة عن حذف ملف عادي من نظام الملفات؟

تحذف الدالة unlink() الملف من نظام الملفات.

05

ماذا تُرجع الدالة filemtime($path)؟

تُرجع filemtime() وقت آخر تعديل بالثواني منذ عصر يونكس.

06

كيف يمكنك تحديث ملف إعدادات حي بشكل ذري (Atomic) بحيث لا يقرأ أي زائر ملفاً ناقص الكتابة؟

عملية rename() على نفس نظام الملفات تبدل مؤشر الملف ذرياً في خطوة واحدة.

07

ماذا تفعل الدالة copy($source, $dest) إذا كان الملف الهدف $dest موجوداً مسبقاً وقابلاً للكتابة؟

تقوم copy() بالكتابة فوق الملف الهدف الموجود وإرجاع true.

08

أي تعبير برمجي يستخرج نص الصلاحيات الثماني المكون من 4 أرقام (مثل "0644") من الدالة fileperms($path)؟

تحول sprintf("%o", ...) الرقم إلى النظام الثماني وتقتطع substr(..., -4) آخر 4 أرقام للصلاحيات.