تصميم موقع الويب الخاص بك مع PHP و MySQL


الدرس: القراءة والكتابة إلى ملف


الصفحة السابقة
المتغيرات سهلة الاستخدام ، ولكنها تحتوي فقط على معلومات مؤقتة . عمر المتغير ليس طويلًا جدًا. الآن ، ستحتاج بالتأكيد إلى تخزين المعلومات على موقعك بشكل دائم.

على سبيل المثال ، من المستحيل تخزين رسائل المنتدى في متغيرات ... حيث سيتم حذفها في نهاية تنفيذ الصفحة !   لتخزين هذه المعلومات لفترة طويلة ، يجب كتابتها على القرص الثابت. ماذا يمكن أن يكون أكثر منطقية لهذا من إنشاء ملفات؟
يسمح لك PHP بحفظ البيانات في الملفات الموجودة على القرص الصلب للخادم.

السماح لكتابة الملفات (chmod)


حتى يتمكن PHP من إنشاء ملفات ، يجب أن يكون لديه حق الوصول إلى مجلد يسمح له بإنشائها. من الضروري حقًا منح PHP الحق في إنشاء وتعديل الملفات ، وإلا فلن يكون بإمكانه فعل أي شيء.

لإنشاء هذه الحقوق ، نقول عمومًا أنه يجب علينا تعديل CHMOD للملف أو المجلد. هذا هو اسم الأمر المستخدم لتعديل الحقوق في Linux .
على نظام Windows ، ربما لم تسمع به مطلقًا ، لأنه ببساطة غير موجود. لكن خادم موقعك ، غالبًا ما يخضع لنظام Linux . وتحت نظام Linux ، نستخدم ما يسمى CHMOD لإدارة الحقوق.

CHMOD هو رقم مكون من ثلاثة أرقام يتم تعيينه لملف (على سبيل المثال 777). اعتمادًا على قيمة هذا الرقم ، سيسمح Linux (أو لا) بتعديل الملف.
المشكلة هي أن Linux بشكل عام لا يسمح بإجراء تعديلات على الملفات بواسطة برنامج نصي PHP . ومع ذلك ، هذا هو بالضبط ما نريد القيام به. إذن كيف سنخرج منه؟ عن طريق تعديل CHMOD ، بالطبع!

سيتعين عليك المرور عبر ... برنامج FTP الخاص بك !  نعم ، هو نفسه الذي تستخدمه لإرسال صفحاتك إلى الويب.
بقدر ما أشعر بالقلق ، يمكنني استخدام FileZilla ( يمكنك استخدام ما تريد ، والتعامل هو نفسه تقريبا) .

اتصل بخادمك ، وانقر بزر الماوس الأيمن على أحد الملفات ، للحصول على الشكل التالي.
web dynamique php
تغيير أذونات الملف
بشكل عام ، يجب أن يكون لديك قائمة "CHMOD" أو "أذونات الملفات" (مثلي).
يجب أن يفتح هذا نافذة تشبه الشكل التالي تقريبًا.
web dynamique php
وهنا يكمن الحل لجميع مشاكلنا! دون الخوض في التفاصيل لأنه لا يوجد شك في إجراء دورة على نظام Linux هنا ، فهذه هي الطريقة التي تعمل بها: هناك ثلاثة أنواع من الأشخاص لديهم الحق في قراءة / تعديل الملفات.
  • المالك  : قام مستخدم Linux بإنشاء الملف. لديه عمومًا كل الحقوق: القراءة والكتابة والتنفيذ. بناءً على الحقوق التي يتمتع بها ، يتغير الرقم الأول من CHMOD . إنه رقم 7: يعني أن لديه كل الحقوق.
  • المجموعة: هذا لا يهمنا كثيرًا أيضًا. هذه هي حقوق مجموعة المستخدمين التي ينتمي إليها الملف. هذا يتوافق مع الرقم الثاني من CHMOD (هنا: 7) .
  • أذونات عامة   : آه! هناك ، يصبح للاهتمام. تؤثر الأذونات العامة على الجميع ، أي ملفات PHP الخاصة بك. هذا هو الرقم الثالث من CHMOD (تلقائيا ، يجب ضبط هذه القيمة على 7) .
إذا أدخلت 777 كقيمة لـ CHMOD ، فهذا يعني أن جميع البرامج الموجودة على الخادم لها الحق في تعديل الملف ، ولا سيما PHP. يجب عليك إدخال 777 حتى يتمكن PHP من تعديل الملف المعني.

يمكنك أيضًا تعديل CHMOD لمجلد. سيحدد هذا ما إذا كان لديك الحق في القراءة / الكتابة إلى هذا المجلد.
سيكون هذا مفيدًا بشكل خاص إذا كنت بحاجة إلى إنشاء ملفات في مجلد في PHP .

افتح وأغلق الملف


قبل القراءة / الكتابة في ملف ، يجب عليك أولاً فتحه.
ابدأ بإنشاء ملف compteur.txt (على سبيل المثال) . أرسله إلى خادمك باستخدام برنامج FTP الخاص بك ، وقم بتطبيق CHMOD على 777 كما تعلمنا للتو.

الآن لنقم بإنشاء ملف PHP يعمل عليه compteur.txt .
مهمتك ، إذا قبلتها: احسب عدد المرات التي تم فيها مشاهدة الصفحة على موقعك وسجل هذا الرقم في هذا الملف.
إليك كيفية المضي قدمًا:

<?php
// 1 : on ouvre le fichier
$monfichier = fopen('compteur.txt', 'r+');

// 2 : on fera ici nos opérations sur le fichier...

// 3 : quand on a fini de l'utiliser, on ferme le fichier
fclose($monfichier);
?>
هناك ثلاث خطوات لمتابعة.
  • نفتح الملف مع fopen . هذه الوظيفة تقوم بإرجاع المعلومات التي يجب أن تضعها في متغير (هنا : $monfichier) . سيكون من المفيد لنا في وقت لاحق لإغلاق الملف. نشير أولاً إلى fopen الملف الذي نريد فتحه ( compteur.txt) ، ثم كيف نريد فتحه (أضع هنا 'r+' ) . هنا ، مجمعة في الجدول أدناه ، والاحتمالات الرئيسية المتاحة لنا.
    طريقة تفسير
    r افتح الملف للقراءة فقط. هذا يعني أنك لن تكون قادرًا على قراءة الملف.
    r+ افتح الملف للقراءة والكتابة. لن تكون قادرًا على قراءة الملف فحسب ، بل يمكنك أيضًا الكتابة إليه (سنستخدمه كثيرًا في الممارسة).
    a افتح الملف للكتابة فقط. ولكن هناك ميزة: إذا كان الملف غير موجود ، يتم إنشاؤه تلقائيًا.
    a+ افتح الملف للقراءة والكتابة. إذا كان الملف غير موجود ، يتم إنشاؤه تلقائيًا. انتباه: يجب أن يكون الدليل CHMOD في 777 في هذه الحالة! لاحظ أنه إذا كان الملف موجودًا بالفعل ، فسيتم إضافة النص في النهاية.
  • هنا ، أنشأنا الملف من قبل ، لذلك لا حاجة للاستخدام a+ .
  • نحن نقوم بعمليات القراءة / الكتابة على الملف. سوف نرى كيف يعمل أبعد من ذلك بقليل.
  • أخيرًا ، عندما ننتهي من استخدام الملف ، نقوم بعمل واحد  fclose لإغلاقه. يجب أن نحدد الملف الذي يجب إغلاقه: ضع المتغير هناك  $monfichier حتى يعرف PHP أي ملف به ، وهذا جيد.
لا يُطلب منك مطلقًا إعطاء الامتداد .txtلملفك. يمكنك أن تسميها ما تريد:  compteur.cpt ، compteur.num أو حتى compteur فقط.

قراءة وكتابة إلى ملف


الآن وبعد أن عرفنا كيفية فتح ملفنا وإغلاقه ، دعونا نتعلم كيفية قراءته وتعديله.
القراءة
للقراءة ، هناك احتمالان:
  • قراءة حرف بحرف مع وظيفة fgetc ؛
  • قراءة سطرا سطرا مع fgets .
بشكل عام ، سوف نتمكن من وضع معلومات واحدة في كل سطر في ملفنا. لذلك نحن نستخدم القليل جدًا ،  fgetc وهو أمر مرهق جدًا في الاستخدام (يجب أن نقوم بعمل حلقة لقراءة حرف بحرف).
في حالتنا ، سنفترض أن ملفنا يحتوي على سطر واحد فقط: عدد الصفحات التي تم عرضها على الموقع.
لاسترداد هذا الرقم ، تابع ما يلي:

<?php
// 1 : on ouvre le fichier
$monfichier = fopen('compteur.txt', 'r+');
 
// 2 : on lit la première ligne du fichier
$ligne = fgets($monfichier);
 
// 3 : quand on a fini de l'utiliser, on ferme le fichier
fclose($monfichier);
?>
يجب الإشارة fgets إلى الملف المراد قراءته. نحن نعطيه متغيرنا $monfichier والذي سيسمح له بالتعرف عليه.
fgets تٌرجع السطر بأكمله (تتوقف الوظيفة عن القراءة عند أول فاصل سطر). لذلك $ligne يجب أن يحتوي المتغير على السطر الأول من الملف.
وإذا كان ملفي يبلغ طوله خمسة عشر سطرًا ، فكيف يمكنني قراءتها جميعًا؟
عليك ان تجعل حلقة . الأول fgets سوف أعطيك السطر الأول. في الحلقة الثانية ، ستعيد fgets السطر الثاني ، وهكذا.
إنها ثقيلة بعض الشيء ، لكن إذا قمت بتخزين معلومات كافية في الملف ، فقد تكون كافية. خلاف ذلك ، إذا كان لدينا الكثير من المعلومات لتخزينها ، فنحن نفضل استخدام قاعدة بيانات (سنتحدث عن ذلك في الجزء التالي).
الكتابة
للكتابة ، هناك احتمال واحد فقط: الاستخدام fputs .
ستقوم هذه الوظيفة بكتابة السطر الذي تريده للملف.
يستخدم مثل هذا

<?php
fputs($monfichier, 'النص الذي تريد كتابته'); 
?>
ومع ذلك ، عليك أن تعرف أين تكتب النص. في الواقع ، تشغيل ملف غريب جدا ...
  1. يمكنك فتحه مع fopen .
  2. تقرأ على سبيل المثال السطر الأول مع fgets .
  3. نعم ولكن ها هو: الآن "PHP" المؤشر "في نهاية السطر الأول (لأنه قد قرأ للتو السطر الأول) ، كما في الشكل التالي.
  4. web dynamique php
    مؤشر PHP في نهاية السطر الأول
    إذا قمت بذلك fputsمباشرة بعد ذلك ، فستكتب بعد ذلك! لتجنب ذلك ، سوف نستخدم الوظيفة fseek التي ستحل محل المؤشر الذي نريده في الملف. في هذه الحالة ، سنستبدل المؤشر في بداية الملف للقيام بذلك: fseek($monfichier, 0);
    سيتم بعد ذلك إعادة وضع المؤشر في البداية ، لذلك انظر الشكل التالي.
    web dynamique php
    يتم استبدال مؤشر PHP في الموقع المختار
    إذا قمت بفتح الملف باستخدام الوضع 'a' أو الوضع 'a+' ، فسيتم إلحاق جميع البيانات التي تكتبها دائمًا بنهاية الملف. Fseek لن يكون لهذه الوظيفة أي تأثير في هذه الحالة.
  5. المؤشر لدينا في بداية الملف ، يمكننا الآن إنشاء واحدة fputs . سيتم كتابة السطر على السطر القديم ، بحيث تتم الكتابة فوق النص القديم (سيتم استبداله بالخط الجديد).
لرؤية أكثر وضوحًا ، أقدم شفرة المصدر هذه والتي تحسب عدد مرات مشاهدة الصفحة:

<?php
$monfichier = fopen('compteur.txt', 'r+');
 
$pages_vues = fgets($monfichier); // نقرأ السطر الأول (عدد مرات مشاهدة الصفحة)
$pages_vues += 1; // يتم زيادة عدد مرات مشاهدة الصفحة بمقدار 1
fseek($monfichier, 0); // نضع المؤشر في بداية الملف
fputs($monfichier, $pages_vues); // نكتب العدد الجديد في الصفحة
 
fclose($monfichier);
 
echo '

شٌوهدت هذه الصفحة ' . $pages_vues . ' مرة !

'; ?>
الصفحة التي تحسب عدد مرات عرض الصفحة
لم يكن ذلك صعبا ، كما ترى.
فيما يلي وصف الاسطر الأربعة (الأهم):
  • نحصل على السطر الأول من الملف ، وهو عدد الصفحات التي تمت مشاهدتها على الموقع في الوقت الحالي ؛
  • نضيف 1 إلى المتغير $pages_vues . إذا كان يساوي 15 مرة ، فسيكون 16 مرة ؛
  • نستبدل "المؤشر" في بداية الملف (لأنه بخلاف ذلك ، سيكون في نهاية السطر الأول وكنا قد كتبنا بعده) ؛
  • نكتب عددنا الجديد من المشاهدات الصفحة في الملف ، الكتابة فوق الرقم القديم.
إذا نسيت وضع CHMOD على 777 في الملف compteur.txt، فسيظهر لك الخطأ التالي:
"  Warning: fopen(compteur.txt): failed to open stream: Permission denied ".
هنا ، تحاول PHP إخبارك بأنها فشلت في فتح الملف لأنه ليس له الحق في الكتابة فيه. لذلك من الضروري وضع هذا CHMOD إذا كنت تريد أن تكون قادرًا على لمس الملف!
هنا ، لقد رأيت للتو كيف نستخدم ملفًا: فتح ، قراءة ، كتابة ، إغلاق.
بالنسبة إلى ملف كبير ، يصبح الأمر سريعًا معقدًا ، لكن بالنسبة لملف صغير مثل هذا ، فهذا جيد.
في بقية هذه الدورة ، سنكتشف طريقة أكثر فعالية لتخزين البيانات: سنستخدم قاعدة بيانات MySQL .

في الخلاصة


  • يسمح PHP بحفظ المعلومات إلى الملفات على الخادم.
  • يجب عليك أولاً التأكد من أن الملفات تسمح لـ PHP بتعديلها. للقيام بذلك ، يجب عليك تغيير أذونات الملف (نتحدث عن CHMOD ) باستخدام برنامج FTP مثل FileZilla . أعط الإذن 777 للملف للسماح لـ PHP بالعمل عليه.
  • تتيح لك الوظيفة Fopen فتح الملف و قراءة سطر بـ  fgets و fputs لكتابة سطر فيه.
  • ما لم تخزن بيانات بسيطة للغاية ، فإن استخدام الملفات ليس هو الأسلوب الأنسب لتسجيل المعلومات. يوصى بشدة باستخدام قاعدة بيانات.