بسم الله الرحمن الرحيم



السلام عليكم و رحمة الله و بركاته ,, تحدثنا في الدرس السابق عن الأصناف و كيفية التعامل معها و تحدثنا عن انشاء الوظائف و الدوال و دالة انشاء الصنف و بإمكانكم الإطلاع على الدروس السابقة من خلال الفهرس التالي :





اما في درسنا اليوم فسوف نتحدث عن الملفات و كيفية التعامل معها ,, فالملفات موضوع مهم في لغات البرمجة و في كثير من الأحيان يلزم المبرمج ملفات لتخزين بعض الملفات للتعامل معها في برنامجه و لغة php كالعادة تدعمنا بهذه الخاصية القوية , سنبدأ بدراستها الآن بإذن الله ...

ما هي الملفات ؟؟ و ما هي انواع الملفات التي نستطيع التعامل معها في لغة php ؟؟

يقصد بالملفات هنا ملفات نصية و الملفات النصية هي ملفات نستطيع تخزين الكلام النصي فيها اي اننا نستطيع الكتابة عليها و القراءة منها و نستطيع التعامل مع اجزائها و الكلام المخزن فيها .. اما انواع الملفات النصية فلا قيود عليها على عكس الكلام الشائع ,, فمن الأخطاء الشائعة بين الذين يتعاملون مع الحاسوب و المبتدئين في البرمجة ان الملف النصي الذي يكون امتداده xxx.txt وهنا اقصد .txt وهذا خطأ لأن المبرمج يقوم بصنع امتداد لملفاته كيفما يريد فمثلا اذا كان برنامج يتعامل مع الملفات و اريد تخزين كلمات عن الرياضيات فأستطيع تخزين الملف على صيغة xxx.cal و هكذا عموما سوف نتعامل هنا مع الصيغة txt و سيكون بعض الأمثلة التي تحتوي على امتدادات اخرى ...

كالعادة لغة php تدعمنا بالعديد من الدوال الخاصة للتعامل مع الملفات و لكل واحدة من هذه الدوال وظيفة محددة للتعامل مع الملفات و سنتعرف على هذه الدوال من خلال ذكرها اولا ثم نذكر خوارزمية التعامل مع هذه الدوال ثم نقوم بكتابة عدة امثلة لنقوم بترسيخ الفكرة و سنبدأ بذكر الدوال و تعريفها و كيفية كتابتها و استخدامها

الدالة fopen

هذه الدالة هي الدالة المسؤولة عن فتح الملف و تجهيز مقبض الملف للتعامل معه و هذه الدالة يجب ان تخزن القيمة العائدة منها في متغير و هذه الدالة تأخذ باراميترين الأول هو مسار الملف الذي نود التعامل معه و الثاني هو الذي يحدد طبيعة التعامل مع الملف اي هل اننا نود القرائة فقط من هذا الملف او اننا نريد القرائة و الكتابة ام هل نريد الكتابة فقط و هذا الباراميتر يحدد من خلال حرف او حرف و رمز حيث ان لكل حرف له وظيفة خاصة ,, لاحظ معي الملف التالي :
كود PHP:
<?php
    $handle 
fopen("f.txt" "r");
?>


تلاحظ اننا قمنا بتمرير مسار الملف الذي نريد فتحه للتعامل معه و قمنا ايضا بتمرير الحرف r الذي يعني اننا نريد القرائة فقط ,, لاحظ في السطور التالية ما هي الأحرف و الرموز التي نستخدمها للتحكم بنسق التعامل مع الفايل :

r: القراءة من الملف من بدايته.

r+: القراءة والكتابة من الملف من بدايته.
w:الكتابة بالملف من بدايته مع حذف المحتويات الموجودة مسبقاً إن وجدت، وإذا لم يكن الملف موجوداً يتم إنشاءه.
w+:الكتابة والقراءة من الملف من بدايته مع حذف المحتويات الموجودة مسبقاً إن وجدت، وإذا لم يكن الملف موجوداً يتم إنشاءه.
a:الكتابة بالملف بدءاً من نهاية محتوياته، وإذا لم يكن الملف موجوداً يتم إنشاءه.
a+:الكتابة والقراءة من الملف بدءاً من نهاية محتوياته، وإذا لم يكن الملف موجوداً يتم إنشاءه.


الدالة feof

و هذه الدالة تستخدم لفحص الملف و التأكد من الوصول الى نهاية الملف فالحروف eof تعني end of file و هذه الدالة تأخذ باراميتر واحد و هو اسم المتغير الذي فتحنا به الملف و تستخدم كالتالي :

كود PHP:
<?php
    $handle 
fopen("f.txt" "r");
    while( !
feof($handle) )
    {
      
// do some thing
    
}
?>


هنا قمنا بفتح ملف في السطر الأول
و في السطر الثاني قمنا بعمل دوران و شرط التوقف هو فحص اذا ما كنا قد وصلنا الى نهاية الملف اي كأننا نقول اذا لم نصل الى نهاية الملف افعل كذا و كذا

الدالة fgetc

هذه الدالة تقوم بقرائة حرف واحد من الملف في كل دوران و هي تأخذ باراميتر واحد و هو مقبض الملف الذي نريد القرائة منه handle و تعود لنا هذه الدالة بالحرف و تخزنه في متغير ,, لاحظ المثال التالي :

كود PHP:
<?php
    $handle 
fopen("f.txt" "r");
    while( !
feof($handle) )
    {
      
$char fgetc($handle);
      echo 
$char."<br/>";
    }
?>


هنا في داخل الدوران قمنا بجلب حرف واحد من الملف و قمنا بتخزينه في المتغير char$ ثم قمنا بطباعته على سطر مستقل ,, لاحظ نتيجة تنفيذه كما في الصورة التالية :



الدالة fgets

و هذه الدالة تقوم بجلب سطر كامل من الملف للتعامل معه و تأخذ هذه الدالة ايضا باراميتر واحد و هو مقبض التعامل مع الملف handle .. لاحظ المثال التالي :

كود PHP:
<?php
    $handle 
fopen("f.txt" "r");
    while( !
feof($handle) )
    {
      
$line fgets($handle);
      echo 
"Line : ".$line."<br/>";
    }
?>

هذا هنا قمنا بنفس المثال السابق لكن يقوم بجلب و طباعة سطر كامل .. لاحظ الصورة التالية :



الدالة fwrite

هذه الدالة تستخدم للكتابة على ملف و هي تأخذ باراميترين الأول هو متغير مقبض الملف و الثاني هو النص الذي نريد كتابته في الملف ,, لاحظ المثال التالي :

كود PHP:
<?php
    $handle 
fopen("f.txt" "w+");
    for(
$i=1;$i<=10;$i++)
    {
      
fwrite($handle,$i);
    }
?>


في هذا المثال قمنا بعمل دوران و في مل مرة داخل الدوران نكتب على الملف قيمة العداد ليظهر لنا النتيجة كما في الصورة التالية :


ملاحظة مهمة بالنسبة الى دالة الكتابة على الملف ,, عند الكتابة على الملف يجب ان يكون نسق التعامل مع الملف اي شيء عدا r و +r و عادة يكون w او +w لكن انا افضل النسق +a

الدالة fclose

هذه الدالة تقوم بإغلاق مقبض التعامل مع الملف الذي تم فتحه في بداية البرنامج اي ان جملة كتابة او قرائة من هذا الملف بعد استخدام هذه الدالة سيكون مصيرها الفشل و اظهار خطأ و هذه الدالة تأخذ باراميتر واحد وهو متغير مقبض التعامل مع الملف handle و تكتب عادة في نهاية استخدام الملفات اي عندما ينتهي المبرمج من التعامل مع الملفات و تكتب كالتالي :

كود PHP:
<?php
    $handle 
fopen("f.txt" "w");
    for(
$i=1;$i<=10;$i++)
    {
      
fwrite($handle,$i);
    }
    
fclose($handle);
?>


لاحظ كيف تم كتابتها في السطر الأخير

اذا الخوارزمية للتعامل مع الملفات هي كالتالي :
1 - فتح و تعريف و تحديد مقابض الملفات التي سيتم التعامل معها خلال البرنامج
2 - فحص اذا ما كنا قد وصلنا الى نهاية الملف في حال اردنا القرائة من ملف
3 - القرائة او الكتابة على الملف داخل الدوران و اجراء العمليات المطلوبة داخل هذا الدوران
4 - اغلاق مقابض الملفات المفتوحة

و في الدرس القادم سنطرح 3 امثلة مع الشرح التفصيلي للتعامل مع الملفات مثل الكتابة و القرائة و اجراء العمليات الحسابية و سنطرح بعض الأمثلة على الأستخدام في المشاريع الكبيرة و البرمجيات العملاقة

و تحياتي لكم جميعا