PHP إخراج البيانات إلى الملف. خيارات فتح الملف في PHP

06.05.2019

والآن سيكون هناك درس كبير إلى حد ما، ولكن ليس معقدًا حول العمل مع الملفات في PHP. بداية ما هي الملفات؟ بعد كل شيء، يمكنك تخزين كل شيء في MySQL أو PostgreSQL أو أي قاعدة بيانات أخرى. لكن في بعض الأحيان تكون هناك مهام عند استخدام قاعدة بيانات، مع كل المعالجة والاهتمام بأمان الاتصال، لا يُنصح بذلك. على سبيل المثال، نحتاج إلى عمل عداد عادي، لكن قبل ذلك لم نستخدم قاعدة بيانات في المشروع. لذا، من أجل عداد صغير، هل يجب علينا إنشاء قاعدة بيانات وتخزين بضعة أسطر فقط فيها؟ من الأسهل استخدام الملفات هنا. بالإضافة إلى ذلك، في بعض الأحيان لا تدعم الاستضافة قواعد البيانات على الإطلاق، وتكون الملفات هي الخيار الوحيد بشكل عام.

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

قم بإنشاء ملف

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

تأخذ الدالة fopen نفسها معلمتين، وكلاهما مطلوب. أولا، يجب علينا تحديد اسم الملف الذي نريد فتحه. ثانيًا، قم بتمرير معلمة تشرح للوظيفة ما نخطط للقيام به بهذا الملف (على سبيل المثال، القراءة من الملف، والكتابة، وما إلى ذلك).

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

$ourFileName = "testFile.txt"; $ourFileHandle = fopen($ourFileName, "w") أو die("can"t open file"); f Close($ourFileHandle);

السطر الأول $ourFileName = testFile.txt ينشئ ملفًا سنقوم فيه بتخزين اسم الملف.
السطر الثاني $ourFileHandle = fopen($ourFileName, 'w') أو die("can't open file") ينشئ أو يفتح ملفًا موجودًا للكتابة على التوالي. أو تقوم بإرجاع رسالة مفادها أنه لا يمكن فتح الملف.
السطر الثالث fClose($ourFileHandle) يغلق الملف. انها في الواقع بسيطة.

خيارات فتح الملف في PHP

  • المعلمة الأولى 'r' (قراءة) - تفتح الملف للقراءة فقط، ولا يمكنك الكتابة إليه.
  • المعلمة الثانية "w" (الكتابة) – تفتح للكتابة. في هذه الحالة، سيبدأ التسجيل دائمًا من بداية الملف. إذا كانت هناك بالفعل بعض المعلومات هناك، فسيتم الكتابة فوقها.
  • المعلمة الثالثة "a" (إلحاق) - تفتح الملف للكتابة، ولكنها ستلحق بنهاية الملف، على عكس w.

الخيارات المتقدمة:

  • المعلمة 'r+' - تفتح لكل من القراءة والكتابة. سيكون المؤشر في بداية الملف.
  • المعلمة 'w+' - تفتح للقراءة والكتابة، ولكنها تحذف كافة المعلومات الموجودة في الملف!!!
  • المعلمة 'a+' - تفتح للقراءة والكتابة، ولكن المؤشر سيكون في نهاية الملف.

وبطبيعة الحال، يمكن تمرير واحدة فقط من هذه المعلمات إلى وظيفة، وليس عدة. يجب استبدالها بدلاً من "X":

فوبين($ourFileName, "X")

الكتابة إلى الملف

حسنًا، لقد فتحنا الملف الآن، واخترنا المعلمة التي نحتاجها، فماذا بعد؟ تحتاج إلى كتابة شيء فيه. كيف افعلها؟ استخدام وظيفة fwrite، التي تأخذ كمعلمات مؤشرًا إلى ملف وسطرًا من النص الذي نريد كتابته. مثال:

$myFile = "testFile.txt"; $fh = fopen($myFile, "w") أو die("لا يمكن" فتح الملف"); $stringData = "السطر الأول\n"; fwrite($fh, $stringData); $stringData = "السطر الثاني\ n n"; fwrite($fh, $stringData); f Close($fh);

قمنا بإنشاء ملف testFile.txt، ويتم تخزين المؤشر إليه في المتغير $fn. لقد كتبنا فيه السطر "السطر الأول" (طبقنا رمز نهاية السطر \n في النهاية)، ثم "السطر الثاني". ثم أغلقوا الملف.

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

القراءة من ملف

لقد كتبناها، والآن دعونا نقرأها! الأمر ليس بهذه الصعوبة أيضًا. نحن نستخدم وظيفة fread. كمدخل نعطيه مؤشرًا للملف وعدد البايتات التي نريد قراءتها. على سبيل المثال، حرف واحد يساوي بايت واحد (حسب التشفير)، نريد قراءة 5 أحرف: $theData = fread($fh, 5).
ولكن إذا أردنا الحصول على جميع المعلومات الموجودة في الملف، فسنحتاج إلى وظيفة الملف، التي تُرجع عدد البايتات في الملف، وبالتالي، إذا تم تمرير نتيجة وظيفة الملف إلى fread، فسنقوم بذلك احصل على كافة المعلومات من الملف:

$myFile = "testFile.txt"; $fh = fopen($myFile, "r"); $theData = fread($fh, png($myFile)); فكلوز($fh); صدى $theData;

آمل أن أكون قد أوضحت ذلك بوضوح.
في بعض الأحيان يكون من المفيد قراءة ملف سطرًا تلو الآخر، وليس بعدد البايتات. للقيام بذلك، بدلاً من الخوف، تحتاج فقط إلى استخدام fgets:

$myFile = "testFile.txt"; $fh = fopen($myFile, "r"); $theData = fgets($fh); فكلوز($fh); صدى $theData;

ونتيجة لذلك، نحصل على السطر الأول من ملف testFile.txt. وفقًا لذلك، لتصفح جميع الخطوط التي تحتاج إلى استخدامها:

\n"; ?>

لقد تعلمت الآن كيفية فتح الملفات للقراءة أو الكتابة أو كليهما. اكتب البيانات إليها أو ألحقها بالأعلى باستخدام إلحاق، واقرأ أيضًا المعلومات منها.

PHP - العمل مع الملفات

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

ينقسم العمل مع الملفات إلى ثلاث مراحل:

  • فتح ملف.
  • التلاعب بالبيانات.
  • إغلاق الملف.

I. فتح ملف

لفتح ملف في PHP، استخدم الدالة fopen(). المعلمات المطلوبة لهذه الوظيفة هي اسم الملف ووضع الملف.

وفقًا لوثائق PHP، يتم التمييز بين الأنواع التالية من أوضاع الملفات:

  • r - فتح الملف للقراءة فقط.
  • r+ - يفتح ملف للقراءة والكتابة في نفس الوقت.
  • ث - إنشاء ملف فارغ جديد. إذا كان هذا الملف موجودًا بالفعل في وقت المكالمة، فسيتم إتلافه.
  • w+ - مشابه لـ r+، فقط إذا كان الملف موجودًا في وقت الاتصال، فسيتم حذف محتوياته.
  • أ - يفتح ملفًا موجودًا في وضع الكتابة، مع إزاحة المؤشر إلى البايت الأخير من الملف (إلى نهاية الملف).
  • a+ - يفتح ملفًا في وضع القراءة والكتابة، مع تحريك المؤشر إلى البايت الأخير من الملف (إلى نهاية الملف). لا يتم حذف محتويات الملف.

ملحوظة: قد يكون هناك معلمة اختيارية أخرى في نهاية أي سطر: b أو t. إذا تم تحديد b، فسيتم فتح الملف في وضع القراءة/الكتابة الثنائي. إذا كان t، فسيتم تعيين وضع ترجمة تغذية السطر للملف، أي. يُنظر إليه على أنه نصي.

للتوضيح، فكر في السيناريو التالي:

// يفتح ملفًا في أوضاع مختلفة

$fp = fopen("counter.txt", "r"); // الوضع الثنائي

$fp = fopen("counter.txt", "rt"); // وضع النص

$fp = fopen("http://www.yandex.ru", "r");// يفتح اتصال HTTP للقراءة

$fp = fopen("ftp://user: [البريد الإلكتروني محمي]"، "w")؛ // افتح اتصال FTP يشير إلى تسجيل الدخول وكلمة المرور

ثانيا. معالجة بيانات الملف

يمكنك كتابة البيانات إلى ملف باستخدام PHP باستخدام الدالة fwrite(). تأخذ هذه الوظيفة معلمتين مطلوبتين وواحدة اختيارية. المعلمات المطلوبة هي واصف الملف ووضع الملف:

$fp = fopen("counter.txt", "a"); // افتح الملف في وضع الكتابة

$mytext = "نحن بحاجة إلى كتابة هذا السطر\r\n"; // سلسلة المصدر

$test = fwrite($fp, $mytext); // اكتب إلى الملف

إذا (اختبار)

صدى "تم إدخال البيانات بنجاح في الملف.";

آخر

صدى "خطأ في الكتابة إلى الملف.";

فكلوز($fp); //أغلق الملف

لقراءة ملف سطرًا تلو الآخر، استخدم الدالة fgets(). تأخذ الوظيفة معلمتين مطلوبتين:

إذا ($fp)

بينما (!feof($fp))

$mytext = fgets($fp, 999);

صدى $mytext."
";

آخر

فكلوز($fp);

ملاحظة: في هذا المثال، تحدد القيمة 999 عدد الأحرف التي سيتم قراءتها حتى يصل المؤشر إلى نهاية الملف (EOF).

صدى readfile("counter.txt");

يمكنك أيضًا استخدام الدالة fpassthru() التي تأخذ معلمة واحدة مطلوبة. قبل استخدام هذه الميزة، يجب عليك فتح الملف في وضع القراءة. عند الانتهاء من قراءة الملف، تقوم الوظيفة تلقائيًا بإغلاق الملف (ويصبح واصف الملف غير صالح).

$fp = fopen("counter.txt", "r"); // افتح الملف في وضع القراءة

إذا ($fp)

صدى fpassthru($fp);

آخر

صدى "خطأ في فتح الملف"؛

في كثير من الأحيان تكون هناك مواقف عندما يكون من الضروري قراءة محتويات موقع الويب في مصفوفة. تتضمن هذه الميزة استخدام الدالة file(). عند استدعاء هذه الوظيفة، سيتم تخزين كل سطر من الملف في عنصر منفصل من المصفوفة المحددة.

ملحوظة: لا ينبغي استخدام الدالة file() على الملفات الثنائية الآمنة لأنها إنه غير آمن من حيث قراءة الملفات الثنائية، وإذا واجه حرف نهاية الملف (EOF) في مكان ما، فإنه لا يضمن أنك ستقرأ الملف الثنائي بأكمله.

$file_array = file("counter.txt"); // اقرأ الملف في $file_array

// العمل مع بيانات المصفوفة

ملحوظة: العمل مع المصفوفات موصوف بالتفصيل هنا، المؤلفون: Mukhametshin D.F.، Simdyanov I.V.

ستجد في نهاية المقالة "كتاب وصفات" جيد عن المصفوفات، والذي يقدم حلولًا للعديد من المشكلات التي يواجهها مبرمج الويب يوميًا.

لنتخيل موقفًا يحتاج فيه الملف إلى القراءة حرفًا بحرف. للقيام بذلك، يمكننا استخدام الدالة fgetc(). تأخذ الدالة معلمة واحدة. تكون الوظيفة مفيدة إذا أردنا العثور على أي حرف أو عدد الأحرف المتطابقة.

$fp = fopen("counter.txt", "r"); // افتح الملف في وضع القراءة

إذا ($fp)

بينما(!feof($fp))

$char = fgetc($fp);

إذا ($شار == ​​"ج")

$i = $i + 1;// ابحث عن الرمز "c"

صدى "عدد أحرف "c" في الملف: ". $i;

آخر صدى "خطأ في فتح الملف"؛

ثالثا. إغلاق ملف

يتم إغلاق الملف باستخدام الدالة fClose()، والتي تأخذ معلمة واحدة مطلوبة.

$fp = fopen("counter.txt", "r");

إذا ($fp)

صدى "ملف مفتوح"؛

فكلوز($fp); // إغلاق الملف

مجموعة من الوصفات

1) نحتاج إلى التحقق من وجود هذا الملف أو ذاك. للقيام بذلك، سوف نستخدم الدالة file_exists().

myfile("counter.txt"); // استخدم وظيفة myfile، لتمرير اسم الملف كوسيطة

function myfile($name) // أنشئ وظيفة للتحقق من وجود الملف

إذا كان (file_exists($name)) صدى "الملف موجود"؛

ملاحظة: لا تقوم وظيفة file_exists بالتحقق من الملفات الموجودة على خادم الويب البعيد. لكي تعمل الوظيفة بشكل صحيح، يجب أن يكون الملف الذي يحتوي على البرنامج النصي موجودًا على نفس الخادم الذي يوجد به الملف الذي يتم فحصه.

2) تحديد حجم الملف باستخدام وظيفة حجم الملف ().

myfile("counter.txt");

// أنشئ وظيفة للتحقق من وجود ملف وتحديد حجم الملف

وظيفة ملفي(اسم $)

إذا كان (file_exists($name)) صدى "حجم الملف: ".filesize($name)." بايت";

صدى آخر "الملف غير موجود"؛

3) قم بإنشاء ملف مؤقت باستخدام الدالة tmpfile()

$myfile = tmpfile();

// الكتابة إلى ملف مؤقت

Fwrite($myfile, "تمت كتابة هذا السطر في ملف مؤقت.");

Fseek($myfile, 0); // قم بتعيين مؤشر الملف

صدى فريد($myfile, 1024); // إخراج محتويات الملف

4) تحتاج إلى تحديد عدد الأسطر في الملف. للقيام بذلك نستخدم الدالة count()

$fp = file("counter.txt");

صدى "عدد الأسطر في الملف: ".count($fp);

5) نحتاج إلى استخدام آلية قفل الملفات

$fp = fopen("counter.txt", "a");

قطيع($fp, LOCK_EX); // قفل الملف للكتابة

Fwrite($fp, "سلسلة للكتابة");

قطيع($fp, LOCK_UN); // الغاء القفل

فكلوز($fp);

6) نحتاج إلى إزالة سطر معين من الملف

$num_stroka = 5; // احذف السطر 5 من الملف

$file = file("counter.txt"); // اقرأ الملف بأكمله في مصفوفة

من أجل($i = 0; $i< sizeof($file); $i++)

إذا($i == $num_stroka) unset($file[$i]);

$fp = fopen("counter.txt", "w");

Fputs($fp, Iplode(""، $file));

فكلوز($fp);

7) تحديد نوع الملف. نحن نستخدم الدالة filetype()، والتي تأخذ معلمة واحدة

$mytype = filetype("counter.txt");

صدى "نوع الملف: ".$mytype;

بعد الاستدعاء، قد تحتوي السلسلة على إحدى القيم التالية:

ملف - ملف عادي

دير - الدليل

فيفو - قناة فيفو

كتلة - جهاز موجه للكتلة

شار – جهاز موجه للأحرف

غير معروف – نوع ملف غير معروف

8) إذا كنت تريد عرض جميع معلمات الملف، فيجب عليك استخدام الدالة stat()

$filename = stat("counter.txt");

صدى صوت"

";

Print_r(اسم الملف$);

صدى صوت"

";

9) نحتاج إلى مسح الملف، واستخدام الدالة ftruncate()

$fp = fopen("counter.txt", "a"); // افتح الملف في وضع التسجيل

Ftruncate($fp, 0) // مسح الملف

10) نحتاج إلى معرفة تاريخ آخر تعديل للملف، نستخدم الدالة filectime(). تقوم الدالة بإرجاع قيمة زمنية في نموذج الطابع الزمني Unix.

صدى filectime("counter.txt");

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

التبعية العمل مع الملفات في PHPمثله:

  1. افتح الملف.
  2. تنفيذ الإجراءات اللازمة.
  3. أغلق الملف.

كما ترون، فإن تسلسل العمل مع الملفات يشبه العمل مع الملفات من خلال مستكشف عادي. هنا فقط يتم تنفيذ كل العمل تلقائيًا بأنفسنا PHP النصي.

لنبدأ بالنقطة الأولى - فتح الملف. يتم فتح الملف مع وظائف fopen(). المعلمة الأولى هي مسار الملف والمعلمة الثانية هي المعدل. دعونا نلقي نظرة على الفور على المعدلات المحتملة:

  1. أ- يفتح الملف للكتابة فقط مع وضع المؤشر في نهاية الملف.
  2. أ+ أ، ولكن الملف يفتح أيضًا للقراءة.
  3. ص- يفتح الملف للقراءة فقط، ويتم ضبط المؤشر على بداية الملف.
  4. ص+- نفس المعدل صولكن الملف مفتوح أيضًا للكتابة.
  5. ث- يفتح الملف للكتابة فقط ويضبط المؤشر على بداية الملف ويمسح محتويات الملف بالكامل.
  6. ث+- نفس المعدل ث، يتم أيضًا فتح الملف فقط للقراءة.

هناك أيضًا وضعان للعمل مع الملفات: الثنائية(يعني ب) و نص(يعني ر). إذا كنت تعمل مع ملف نصي عادي، فحدد وضع النص، وإذا، على سبيل المثال، مع صورة، فحدد الوضع الثنائي.

هذه هي جميع المعدلات الأساسية، والتي ستكون كافية بالنسبة لك. الآن دعونا نتعلم كيفية إغلاق ملف. يغلق الملف ب وظائف fClose().

الآن دعنا ننتقل إلى قراءة الملف باستخدام وظائف فريد ().. ودعوني أخيرًا أعطيكم مثالًا:

محتويات $ = "";
بينما (!feof($handle))
محتويات $ .= fread($handle, 4096);
fClose($handle);
?>

في هذا المثال، نقوم أولاً بفتح الملف للقراءة في وضع النص (modifier غ). وظيفة fopen()إرجاع ما يسمى واصف، والذي يمكنك من خلاله التواصل مع الملف وكتابته في متغير مقبض. ثم نحن في حلقة بينما()حتى نصل إلى نهاية الملف، نقرأ محتوياته في كل مرة 4096 الحروف التي نكتبها للمتغير محتويات. بعد اكتمال عملية القراءة، أغلق الملف مرة أخرى باستخدام واصف الملف.

الآن دعنا ننتقل إلى التسجيل باستخدام وظائف fwrite():

$handle = fopen("files/a.txt", "at");
$string = "هذا نص";
fwrite(مقبض $, سلسلة $);
fClose($handle);
?>

بعد تشغيل هذا البرنامج النصي، في الملف a.txtسيتم إضافة السطر " هذا نص".

اهتم القراء اليقظون بشكل خاص بالمؤشرات التي كتبت عنها أعلاه. المؤشر- هذا هو الموضع الحالي لـ "المؤشر" التخيلي في الملف. هذا هو المكان الذي يبدأ فيه العمل مع الملف. يمكنك تغيير موضع المؤشر باستخدام وظائف fseek():

$handle = fopen("files/a.txt", "rt");
صدى محتويات $."
";
fseek($handle, 0, SEEK_SET);
محتويات $ = fread($handle, 3);
صدى محتويات $."
";
?>

لذلك نقرأ أولا 3 حرف (ونتيجة لذلك، يتم إزاحة موضع المؤشر الحالي بمقدار 3 المواقف). ثم نقوم بتعيين المؤشر على بداية الملف. ونقرأ مرة أخرى 3 رمز. وكما كنت قد خمنت، فقد عددنا نفس الشيء مرتين. هذه هي المرة الأولى 3 الرمز، ثم عاد وعد مرة أخرى 3 رمز. أيضا إذا كنت وظائف fseek()يستبدل SEEK_SETعلى SEEK_CUR، فلن تقوم المعلمة الثانية بتعيين موضع المؤشر، ولكنها ستحوله بالنسبة إلى الموقع الحالي. حتى أنني أنصحك بالتدرب على المؤشرات، لأنه ليس من السهل فهمها. أوصي أيضًا بمحاولة كتابة شيء ما على الملف في موضع المؤشر، على سبيل المثال، في بداية الملف. وتأكد من شرح نتائجك.

وأخيرا، أود أن أقدم بضع وظائف أخرى تسمح لك بالعمل مع الملفات على أبسط مستوى: file_put_contens()و file_get_contents(). وظيفة file_put_contents()يكتب إلى ملف، والدالة file_get_contents()يقرأ المحتوى من ملف. هذه الوظائف سهلة الاستخدام للغاية، ولكن هناك خيارات أقل (على الرغم من عدم الحاجة إليها كقاعدة عامة):

file_put_contents("files/a.txt"، "هذا هو النص 2");
صدى file_get_contents("files/a.txt");
?>

في هذا البرنامج النصي، كتبنا السطر أولاً " هذا هو النص 2" إلى ملف، ثم نقرأ المحتوى الناتج ونخرجه. وكما ترون، من الصعب التوصل إلى طريقة أبسط القراءة من الملفو الكتابة إلى الملف.

هذا كل النقاط الرئيسية العمل مع الملفات في PHP.

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

ينقسم العمل مع الملفات إلى ثلاث مراحل:

  1. فتح ملف.
  2. التلاعب بالبيانات.
  3. إغلاق الملف.

أنا. فتح ملف

لفتح ملف في PHP، استخدم الدالة فوبين (). المعلمات المطلوبة لهذه الوظيفة هي اسم الملف ووضع الملف.

$fp = fopen("counter.txt", "r");

وفقًا لوثائق PHP، يتم التمييز بين الأنواع التالية من أوضاع الملفات:

  1. ص - فتح الملف للقراءة فقط.
  2. r+ - يفتح ملف للقراءة والكتابة في نفس الوقت.
  3. ث - إنشاء ملف فارغ جديد. إذا كان هذا الملف موجودًا بالفعل في وقت المكالمة، فسيتم إتلافه.
  4. w+ - مشابه لـ r+، فقط في حالة وجود مثل هذا الملف في وقت الاتصال، يتم حذف محتوياته.
  5. أ - يفتح ملفًا موجودًا في وضع الكتابة، مع إزاحة المؤشر إلى البايت الأخير من الملف (إلى نهاية الملف).
  6. a+ - يفتح ملفًا في وضع القراءة والكتابة، مع تحريك المؤشر إلى البايت الأخير من الملف (إلى نهاية الملف). لا يتم حذف محتويات الملف.

ملاحظة: قد يكون هناك معلمة اختيارية أخرى في نهاية أي سطر: b أو t . إذا تم تحديد b، فسيتم فتح الملف في وضع القراءة/الكتابة الثنائي. إذا كان t، فسيتم تعيين وضع ترجمة تغذية السطر للملف، أي. يُنظر إليه على أنه نصي.

للتوضيح، فكر في السيناريو التالي:

// يفتح ملفًا في أوضاع مختلفة
$fp = fopen("counter.txt", "r"); // الوضع الثنائي
$fp = fopen("counter.txt", "rt"); // وضع النص
$fp = fopen("http://www.yandex.ru", "r");// يفتح اتصال HTTP للقراءة
$fp = fopen("ftp://user: [البريد الإلكتروني محمي]"، "w")؛ // افتح اتصال FTP يشير إلى تسجيل الدخول وكلمة المرور
?>

ثانيا. معالجة بيانات الملف

يمكنك كتابة البيانات إلى ملف باستخدام PHP باستخدام الوظيفة اكتب (). تأخذ هذه الوظيفة معلمتين مطلوبتين وواحدة اختيارية. المعلمات المطلوبة هي واصف الملف ووضع الملف:

$fp = fopen("counter.txt", "a"); // افتح الملف في وضع الكتابة
$mytext = "نحن بحاجة إلى كتابة هذا السطر\r\n"; // سلسلة المصدر
$test = fwrite($fp, $mytext); // اكتب إلى الملف
إذا ($test) echo "تم إدخال البيانات بنجاح في الملف.";
else echo "خطأ في الكتابة إلى الملف.";
fClose($fp); //أغلق الملف
?>

لقراءة ملف سطرًا سطرًا، استخدم الوظيفة فجيتس (). تأخذ الوظيفة معلمتين مطلوبتين:


إذا ($fp)
{
بينما (!feof($fp))
{
$mytext = fgets($fp, 999);
صدى $mytext."
";
}
}

fClose($fp);
?>

ملاحظة: في هذا المثال، تحدد القيمة 999 عدد الأحرف التي سيتم قراءتها حتى يصل المؤشر إلى نهاية الملف (EOF).

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

echoreadfile("counter.txt");
?>

يمكنك أيضًا استخدام الدالة fpassthru() التي تأخذ معلمة واحدة مطلوبة. قبل استخدام هذه الميزة، يجب عليك فتح الملف في وضع القراءة. عند الانتهاء من قراءة الملف، تقوم الوظيفة تلقائيًا بإغلاق الملف (ويصبح واصف الملف غير صالح).

$fp = fopen("counter.txt", "r"); // افتح الملف في وضع القراءة
إذا ($fp) صدى fpassthru($fp);
elseecho "حدث خطأ أثناء فتح الملف";
?>

في كثير من الأحيان تكون هناك مواقف عندما يكون من الضروري قراءة محتويات موقع الويب في مصفوفة. تتضمن هذه الميزة استخدام الوظيفة ملف(). عند استدعاء هذه الوظيفة، سيتم تخزين كل سطر من الملف في عنصر منفصل من المصفوفة المحددة.

ملحوظة: لا ينبغي استخدام الوظيفة ملف()إلى الملفات الثنائية (ثنائية آمنة)، لأن إنه غير آمن من حيث قراءة الملفات الثنائية، وإذا واجه حرف نهاية الملف (EOF) في مكان ما، فإنه لا يضمن أنك ستقرأ الملف الثنائي بأكمله.

$file_array = file("counter.txt"); // اقرأ الملف في $file_array
// العمل مع بيانات المصفوفة
?>

ملحوظة: العمل مع المصفوفات موصوف بالتفصيل، المؤلفون: Mukhametshin D.F.، Simdyanov I.V.

ستجد في نهاية المقالة "كتاب وصفات" جيد عن المصفوفات، والذي يقدم حلولًا للعديد من المشكلات التي يواجهها مبرمج الويب يوميًا.

لنتخيل موقفًا يحتاج فيه الملف إلى القراءة حرفًا بحرف. للقيام بذلك يمكننا استخدام الدالة فجيتك (). تأخذ الدالة معلمة واحدة. تكون الوظيفة مفيدة إذا أردنا العثور على أي حرف أو عدد الأحرف المتطابقة.

$fp = fopen("counter.txt", "r"); // افتح الملف في وضع القراءة
إذا ($fp)
{
بينما(!feof($fp))
{
$char = fgetc($fp);
إذا ($char == "c") $i = $i + 1;// ابحث عن الحرف "c"
}
صدى "عدد أحرف "c" في الملف: ". $i;
}
آخر صدى "خطأ في فتح الملف"؛
?>

ثالثا. إغلاق ملف

يتم إغلاق الملف باستخدام الدالة فكلوز ()، والذي يأخذ معلمة واحدة مطلوبة.

$fp = fopen("counter.txt", "r");
إذا ($fp)
{
صدى "الملف مفتوح"؛
fClose($fp); // إغلاق الملف
}
?>

مجموعة من الوصفات

1) نحتاج إلى التحقق من وجود هذا الملف أو ذاك. للقيام بذلك سوف نستخدم الدالة الملف موجود().

myfile("counter.txt"); // استخدم وظيفة myfile، لتمرير اسم الملف كوسيطة

function myfile($name) // أنشئ وظيفة للتحقق من وجود الملف
{
إذا كان (file_exists($name)) echo "الملف موجود";

}
?>

ملحوظة: الوظيفة الملف موجودلا يتحقق من الملفات الموجودة على خادم الويب البعيد. لكي تعمل الوظيفة بشكل صحيح، يجب أن يكون الملف الذي يحتوي على البرنامج النصي موجودًا على نفس الخادم الذي يوجد به الملف الذي يتم فحصه.

2) تحديد حجم الملف باستخدام الوظيفة حجم الملف()

myfile("counter.txt");

function myfile($name) // أنشئ وظيفة للتحقق من وجود ملف وتحديد حجم الملف
{
إذا كان (file_exists($name)) echo "حجم الملف: ".filesize($name)." بايت";
آخر صدى "الملف غير موجود"؛
}
?>

3) قم بإنشاء ملف مؤقت باستخدام الوظيفة com.tmpfile()

$myfile = tmpfile();
fwrite($myfile, "تمت كتابة هذا السطر في ملف مؤقت."); // الكتابة إلى ملف مؤقت
fseek($myfile, 0); // اضبط مؤشر الملف
صدى الخوف($myfile, 1024); // إخراج محتويات الملف
?>

4) تحتاج إلى تحديد عدد الأسطر في الملف. للقيام بذلك نستخدم الدالة عدد()

$fp = file("counter.txt");
صدى "عدد الأسطر في الملف: ".count($fp);
?>

5) نحتاج إلى استخدام آلية قفل الملفات

$fp = fopen("counter.txt", "a");
قطيع($fp, LOCK_EX); // قفل الملف للكتابة
fwrite($fp, "سطر للكتابة");
قطيع($fp, LOCK_UN); // الغاء القفل
fClose($fp);
?>

6) نحتاج إلى إزالة سطر معين من الملف

$num_stroka = 5; // احذف السطر 5 من الملف
$file = file("counter.txt"); // اقرأ الملف بأكمله في مصفوفة

ل($i = 0; $i< sizeof($file); $i++)
إذا($i == $num_stroka) unset($file[$i]);

$fp = fopen("counter.txt", "w");
fputs($fp, Iplode(""، $file));
fClose($fp);
?>

7) تحديد نوع الملف. باستخدام الوظيفة

قبل محاولة العمل مع ملف ما، من المستحسن التأكد من وجوده. لحل هذه المشكلة، عادة ما يتم استخدام وظيفتين:

file_exists() و is_file().

تتحقق الدالة file_exists()‎ من وجود ملف معين. إذا كان الملف موجودًا، فسترجع الدالة TRUE، وإلا فإنها ترجع FALSE. بناء جملة الدالة file_exists() هو:

ملف منطقي_موجود (ملف سلسلة)

مثال للتحقق من وجود ملف:

إذا (! file_exists($filename)) :

طباعة "الملف $filename غير موجود!";

is_file()

تتحقق الدالة is_file() من وجود ملف معين وما إذا كان يمكن قراءته/كتابته. بشكل أساسي، is_file() هو إصدار أكثر قوة من file_exists() الذي يتحقق ليس فقط من وجود الملف، ولكن أيضًا ما إذا كان يمكنه قراءة البيانات وكتابتها:

منطقي هو ملف (ملف سلسلة)

يوضح المثال التالي كيفية التحقق من وجود ملف وإمكانية إجراء العمليات عليه:

$file = "somefile.txt";

إذا (is_file($file)) :

طباعة "الملف $file صالح وموجود!";

طباعة "الملف $file غير موجود أو أنه ليس ملفًا صالحًا!";

بعد التأكد من وجود الملف المطلوب وأنه يمكن تنفيذ عمليات القراءة/الكتابة المختلفة به، يمكنك المتابعة إلى الخطوة التالية - فتح الملف.

تقوم الدالة png () بإرجاع الحجم (بالبايت) للملف بالاسم المحدد، أو FALSE في حالة الخطأ. بناء جملة الدالة Filesize():

حجم الملف (اسم ملف السلسلة)

لنفترض أنك تريد تحديد حجم ملف Pastry.txt. للحصول على المعلومات الضرورية، يمكنك استخدام الدالة png:

$fs = png("pastry.txt"); اطبع "Pastry.txt هو بايت $fs.";

يتم عرض النتيجة التالية:

Pastry.txt هو 179 بايت.

قبل أن تتمكن من تنفيذ العمليات على ملف، يجب عليك فتحه وربطه بمعالج الملف، وبعد الانتهاء من العمل مع الملف، يجب عليك إغلاقه. يتم تناول هذه المواضيع في القسم التالي.

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

قبل أن تتمكن من إجراء الإدخال/الإخراج على ملف، يجب عليك فتحه باستخدام fopen().

تفتح الدالة fopen() ملفًا (إذا كان موجودًا) وترجع عددًا صحيحًا يسمى مناور الملف(مقبض الملف). بناء جملة الدالة fopen():

int fopen (ملف سلسلة، وضع السلسلة [، intenable_path])

يمكن أن يكون الملف الذي يتم فتحه موجودًا على نظام الملفات المحلي، أو موجودًا كدفق إدخال/إخراج قياسي، أو يمثل ملفًا على نظام بعيد مقبول عبر HTTP أو FTP.

يمكن تحديد معلمة الملف في عدة نماذج، مدرجة أدناه:

إذا كان المعامل يحتوي على اسم ملف محلي، فإن fopen()‎ يفتح هذا الملف ويعيد المقبض.

إذا تم تحديد المعلمة كـ php://stdin، أو php://stdout، أو php://stderr، فسيتم فتح دفق الإدخال/الإخراج القياسي المقابل.

إذا كانت المعلمة تبدأ بالبادئة http://، فستفتح الوظيفة اتصال HTTP بالخادم وترجع مؤشرًا للملف المحدد.

إذا كانت المعلمة تبدأ بالبادئة ftp://، فستفتح الوظيفة اتصال FTP بالخادم وترجع مؤشرًا للملف المحدد. هناك شيئان يجب الانتباه لهما بشكل خاص في هذه الحالة: إذا كان الخادم لا يدعم وضع FTP السلبي، فسيفشل استدعاء fopen(). علاوة على ذلك، يتم فتح ملفات FTP إما للقراءة أو الكتابة.

عند التشغيل في الوضع السلبي، ينتظر خادم YAR الاتصالات من العملاء. عند التشغيل في الوضع النشط، يقوم الخادم نفسه بإنشاء اتصال مع العميل. الافتراضي هو عادة الوضع النشط.

تحدد معلمة الوضع القدرة على القراءة والكتابة في الملف. في الجدول 7.1 يسرد بعض القيم التي تحدد وضع فتح الملف.

الجدول 7.1. أوضاع فتح الملفات

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

إذا كان المعامل الثالث الاختياري include_path هو 1، فإن مسار الملف يكون متعلقًا بدليل التضمين المحدد في ملف php.ini (راجع الفصل الأول).

يوجد أدناه مثال لفتح ملف باستخدام الدالة fopen(). يقدم استدعاء die()‎، المستخدم مع fopen()‎، رسالة خطأ إذا تعذر فتح الملف:

$file = "userdata.txt"; // بعض الملفات

$fh = fopen($file, "a+") أو die("الملف ($file) غير موجود!");

يفتح المقتطف التالي اتصالاً بموقع PHP (http://www.php.net):

$site = "http://www.php.net": // يمكن الوصول إلى الخادم عبر HTTP

$sh = fopen($site., "r"); // قم بربط المعالج بصفحة فهرس Php.net

بعد الانتهاء من العمل، يجب دائمًا إغلاق الملف باستخدام fclose().

تقوم الدالة fClose() بإغلاق ملف باستخدام المعالج المحدد. إذا نجح الإغلاق، فسيتم إرجاع TRUE؛ وإذا لم ينجح الإغلاق، فسيتم إرجاع FALSE. بناء جملة الدالة fClose():

كثافة العمليات FClose (معالج كثافة العمليات)

تقوم الدالة f Close () بإغلاق الملفات التي تم فتحها مسبقًا بواسطة الدالة fopen () أو fsockopen () بنجاح. مثال لإغلاق ملف:

$file = "userdata.txt";

إذا (file_exists($file)) :

$fh = fopen($file, "r");

// تنفيذ عمليات الملف

طباعة "ملف Sfile غير موجود!";

الكتابة إلى الملف

هناك عمليتان رئيسيتان يتم إجراؤهما على الملفات المفتوحة: القراءة والكتابة.

تتحقق الدالة is_writeable()‎ من وجود الملف وقابليته للكتابة. يتم التحقق من إمكانية الكتابة لكل من الملف والدليل. بناء جملة الدالة is_writeable() هو:

المنطق قابل للكتابة (ملف سلسلة)

أحد الأشياء المهمة التي يجب ملاحظتها هو أن PHP ستعمل على الأرجح تحت معرف المستخدم الذي يستخدمه خادم الويب (عادةً "لا أحد"). يوجد مثال لاستخدام is_writeable() في وصف الدالة fwrite().

تقوم الدالة fwrite() بكتابة محتويات متغير السلسلة إلى الملف المحدد بواسطة معالج الملف. fwrite() بناء جملة الدالة:

int fwrite (معالج int، متغير السلسلة [، طول int])

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

// معلومات حول حركة المرور على موقع المستخدم

$data = "08:13:00|12:37:12|208.247.106.187|Win98";

$filename = "somefile.txt";

// إذا كان الملف موجودًا ويمكن الكتابة إليه

إذا (is_writeable($filename)) :

$fh = fopen($filename, "a+");

// اكتب محتويات بيانات $ إلى ملف

نجاح $ - fwrite($fh, $data);

// إغلاق الملف

فكلوز($fh); آخر:

طباعة "تعذر فتح اسم الملف للكتابة";

الدالة fputs() هي اسم مستعار لـ fwrite() ويمكن استخدامها في أي مكان يتم فيه استخدام fwrite().

الدالة fputs() هي اسم مستعار للدالة fwrite() ولها نفس الصيغة تمامًا. بناء جملة الدالة fputs():

int fputs (معالج int، متغير السلسلة [، طول int])

أنا شخصياً أفضل استخدام fputs(). يجب أن نتذكر أن هذه مجرد مسألة أسلوب ولا علاقة لها بأي اختلافات بين الوظيفتين.

القراءة من ملف

مما لا شك فيه أن القراءة هي أهم عملية يتم إجراؤها على الملفات. وفيما يلي بعض الميزات التي تجعل القراءة من ملف أكثر كفاءة. يقوم بناء جملة هذه الوظائف تقريبًا بنسخ بناء جملة وظائف التسجيل المشابهة.

تتيح لك الدالة i s_readable()‎ التحقق من وجود الملف وقابليته للقراءة. يتم التحقق من إمكانية القراءة لكل من الملف والدليل. صيغة الدالة is_readable() هي:

بوو! is_readable (ملف سلسلة)

على الأرجح، سيتم تشغيل PHP تحت معرف المستخدم الذي يستخدمه خادم الويب (عادةً "لا أحد")، لذلك لكي تقوم الدالة is_readable() بإرجاع TRUE، يجب السماح للجميع بقراءة الملف. يوضح المثال التالي كيفية التحقق من وجود الملف وقابليته للقراءة:

إذا (is_readable($filename)) :

// افتح الملف واضبط مؤشر الموضع الحالي على نهاية الملف

$fh = fopen($filename, "r");

طباعة "اسم الملف $ غير قابل للقراءة!";

تقرأ الدالة fread() العدد المحدد من البايتات من ملف محدد بواسطة معالج الملف. fwrite() بناء جملة الدالة:

كثافة العمليات فريد (كثافة العمليات، طول كثافة العمليات)

يجب أن يشير المعالج إلى ملف مفتوح قابل للقراءة (راجع وصف الدالة is_readable()). تتوقف القراءة بعد قراءة عدد محدد من البايتات أو عند الوصول إلى نهاية الملف. خذ بعين الاعتبار الملف النصي Pastry.txt الموضح في القائمة 7.1. تتم قراءة هذا الملف وإخراجه في المتصفح من خلال الجزء التالي:

$fh = fopen("pastry.txt", "r") أو die("لا يمكن فتح الملف!");

$file = fread($fh, png($fh));

باستخدام الدالة fllesize() لتحديد حجم ملف Pastry.txt بالبايت، فإنك تتأكد من أن الدالة fread() تقرأ محتويات الملف بالكامل.

القائمة 7.1. ملف نصي Pastry.txt

الوصفة: عجينة المعجنات

1 1/4 كوب دقيق لجميع الأغراض

3/4 أصبع (6 ملاعق كبيرة) من الزبدة غير المملحة، مقطعة

2 ملعقة كبيرة سمن نباتي 1/4 ملعقة صغيرة ملح

3 ملاعق كبيرة ماء

تقوم الدالة fgetc() بإرجاع سلسلة تحتوي على حرف واحد من الملف عند موضع المؤشر الحالي، أو FALSE عند الوصول إلى نهاية الملف. بناء جملة الدالة fgetc():

سلسلة fgetc (معالج int)

يجب أن يشير المعالج إلى ملف مفتوح قابل للقراءة (راجع وصف الدالة is_readable()‎ سابقًا في هذا الفصل). يوضح المثال التالي قراءة كل حرف على حدة وإخراج ملف باستخدام الدالة fgetc():

$fh = fopen("pastry.txt", "r"); بينما (!feof($fh)) :

$شار = fgetc($fh):

طباعة شار $؛ في نهاية المطاف؛

تقوم الدالة fgets() بإرجاع سلسلة مقروءة من موضع المؤشر الحالي في الملف المحدد بواسطة معالج الملف. يجب أن يشير مؤشر الملف إلى ملف مفتوح قابل للقراءة (راجع وصف الدالة is_readable()‎ سابقًا في هذا الفصل). fgets () بناء جملة الدالة:

سلسلة fgets (معالج int، طول int)

تتوقف القراءة عند استيفاء أحد الشروط التالية:

  • القراءة من طول الملف - 1 بايت؛
  • تمت قراءة حرف السطر الجديد من الملف (المضمن في السلسلة التي تم إرجاعها)؛
  • تمت قراءة علامة نهاية الملف (EOF) من الملف.

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

$fh = fopen("pastry.txt", "r");

بينما (!feof($fh));

$line = fgets($fh, 4096);

طباعة سطر $ "
";

الدالة fgetss() تشبه تمامًا fgets() مع استثناء واحد - فهي تحاول إزالة كافة علامات HTML وPHP من النص المقروء:

سلسلة fgetss (معالج Int، طول int [، سلسلة مسموح بها_tags])

قبل الانتقال إلى الأمثلة، راجع محتويات القائمة 7.2 - يُستخدم هذا الملف في القائمتين 7.3 و7.4.

القائمة 7.2. ملف science.html

الأخبار العاجلة - العلوم

اكتشاف شكل حياة فضائي


20 أغسطس 2000

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

القائمة 7.3. إزالة العلامات من ملف HTML قبل عرضها في المتصفح

$fh = fopen("science.html", "r");

بينما (!feof($fh)) :

طباعة fgetss($fh, 2048);

وتظهر النتيجة أدناه. كما ترون، تمت إزالة جميع علامات HTML من ملف science.html، مما تسبب في فقدان التنسيق:

في بعض الحالات، تتم إزالة كافة العلامات من الملف باستثناء عدد قليل منها - على سبيل المثال، علامات فاصل الأسطر
. توضح القائمة 7.4 كيف يتم ذلك.

القائمة 7.4. إزالة العلامات بشكل انتقائي من ملف HTML

$fh = fopenC"science.html", "r");

$ المسموح به = "
";

بينما (!feof($fh)) :

طباعة fgetss($fh.2048, $allowable);

نتيجة:

أخبار عاجلة - تم اكتشاف شكل حياة كائن فضائي في 20 أغسطس 2000 في وقت مبكر من هذا الصباح، تم العثور على شكل جديد غريب من الفطريات ينمو في خزانة ثلاجة شقة دبليو جي جيلمور القديمة، ومن غير المعروف ما إذا كان الإشعاع القوي المنبعث من شاشة كمبيوتر المستأجر قد ساعد في ذلك تطور.

كما ترون، فإن الدالة fgetss() تجعل تحويل الملفات أمرًا سهلاً، خاصة عندما يكون لديك عدد كبير من ملفات HTML ذات التنسيق المماثل.

قراءة ملف في مصفوفة

تقوم الدالة file() بتحميل محتويات الملف بالكامل إلى مصفوفة قابلة للفهرسة. يتوافق كل عنصر من عناصر المصفوفة مع سطر واحد من الملف. بناء جملة الدالة File():

ملف صفيف (ملف سلسلة [، int include_path])

إذا كان المعامل الثالث الاختياري include_path هو 1، فإن مسار الملف يكون متعلقًا بدليل التضمين المحدد في ملف php.ini (راجع الفصل الأول). تستخدم القائمة 7.5 الدالة file() لتحميل ملف Pastry.txt (انظر القائمة 7.1).

$file_array = file("pastry.txt");

بينما (list($line_num.$line) = everyt($file_array)):

مطبعة " السطر $line_num:"، htmlspecialchars($line)، "
\ن"

تتم طباعة كل صف من المصفوفة مع رقم:

السطر 0: الوصفة: عجينة المعجنات

السطر 1: 1 1/4 كوب دقيق لجميع الأغراض

السطر الثاني: 3/4 إصبع (6 ملاعق كبيرة) من الزبدة غير المملحة، مقطعة

السطر الثالث: 2 ملعقة كبيرة سمن نباتي

السطر الرابع: ربع ملعقة صغيرة ملح

السطر الخامس: 3 ملاعق كبيرة ماء

إعادة توجيه ملف إلى الإخراج القياسي

تقرأ الدالة readfile() محتويات الملف وتكتبه إلى الإخراج القياسي (في معظم الحالات، إلى المتصفح). readfile () بناء جملة الدالة:

ملف قراءة int (ملف سلسلة [، int include_path])

ترجع الدالة عدد البايتات المقروءة. يمكن أن يوجد الملف على نظام الملفات المحلي، أو يوجد كمدخل/مخرج قياسي، أو يمثل الملف على نظام بعيد مقبول عبر HTTP أو FTP. يتم تعيين معلمة الملف وفقًا لنفس القواعد الموجودة في وظيفة fopen().

لنفترض أن لديك ملف latorre.txt، الذي تريد عرض محتوياته في المتصفح:

مطعم "لا توري". يقع في نيتونو، إيطاليا، ويقدم مزيجًا انتقائيًا من الأناقة. التاريخ والمأكولات البحرية الفاخرة. داخل أسوار بورجو التي تعود للقرون الوسطى المحيطة بالمدينة، يمكن للمرء تناول العشاء أثناء مشاهدة المارة وهم يتسوقون في متاجر القرية. الراحة المقترنة بالمأكولات البحرية الطازجة تجعل من مطعم La Torre واحدًا من أرقى المطاعم في إيطاليا.

عند تنفيذ المقتطف التالي، يتم إرسال محتويات ملف latorre.txt بالكامل إلى الإخراج القياسي:

$restaurant_file = "latorre.txt";

// أرسل الملف بأكمله إلى الإخراج القياسي

readfile($restaurant_file);

فتح معالج ملف العملية

إلى جانب الملفات العادية، يمكنك فتح معالجات الملفات للتفاعل مع العمليات الموجودة على الخادم. تم حل المشكلة عن طريق الدالة popen()، والتي تحتوي على الصيغة التالية:

int popen (أمر السلسلة، وضع السلسلة)

تحدد معلمة الأمر أمر النظام الذي سيتم تنفيذه، وتصف معلمة الوضع وضع الوصول:

// افتح ملف "spices.txt" للكتابة

$fh = fopen("spices.txt"،"w");

// أضف بعض الأسطر من النص

fputs($fh, "بقدونس، حكيم، إكليل الجبل\n");

fputs($fh, "بابريكا، ملح، فلفل\n");

fputs($fh, "ريحان, حكيم, زنجبيل\n");

// أغلق المناور

// افتح عملية grep الخاصة بـ UNIX للبحث عن كلمة Basil في ملف Spice.txt

$fh - popen("grep Basil< spices.txt", "r");

// اطبع نتيجة grep

تبدو النتيجة كما يلي:

ريحان، حكيم، زنجبيل

الدالة fpassthru()‎ تشبه الدالة passthru()‎ التي تمت مناقشتها في قسم "تشغيل البرامج الخارجية" في هذا الفصل.

بعد الانتهاء من جميع العمليات، يجب إغلاق الملف أو العملية. تقوم الدالة pClose() بإغلاق الاتصال بالعملية المحددة بواسطة المعالج، على غرار الطريقة التي تغلق بها الدالة fclose() ملفًا مفتوحًا بواسطة الدالة fopen(). بناء جملة الدالة pClose():

int p Close (معالج int)

في المعلمة مناوريتم إرسال المناور الذي تم تلقيه مسبقًا بمكالمة ناجحة لـ popen().

فتح اتصال مأخذ التوصيل

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

تقوم الدالة fsockopen() بإنشاء اتصال مأخذ توصيل بخادم على الإنترنت

عبر بروتوكول TCP أو UDP. بناء جملة الدالة fsockopen():

int fsockopen (عقدة السلسلة، منفذ int [، int error_code [، string error_text [، int timeout]]])

تحتوي المعلمات الاختيارية error_code وerror_text على معلومات سيتم عرضها في حالة فشل الاتصال بالخادم. يجب أن يتم تمرير كلا المعلمتين حسب المرجع. تحدد المعلمة الاختيارية الثالثة، المهلة، طول الفترة الزمنية لانتظار الاستجابة من الخادم (بالثواني). توضح القائمة 7.6 استخدام الدالة fsockopen()‎ للحصول على معلومات الخادم. ومع ذلك، قبل النظر إلى القائمة 7.6، هناك وظيفة أخرى تحتاج إلى التعرف عليها: المقبس_set_blocking().

UDP (بروتوكول مخطط بيانات المستخدم) هو بروتوكول اتصال بدون اتصال.

المقبس_set_blocking()

تتيح لك وظيفة المقبس_set_b1ocki ng() ضبط التحكم في المهلة لعمليات الخادم:

المقبس_set_blocking (معالج int، الوضع المنطقي)

تحدد معلمة المعالج المقبس المفتوح مسبقًا، وتحدد معلمة الوضع الوضع الذي تم تحويل المقبس إليه (TRUE لوضع الحظر، FALSE لوضع عدم الحظر). يظهر مثال لاستخدام الدالتين fsockopen() وsocket_set_blocking() في القائمة 7.6.

القائمة 7.6. استخدام fsockopen() للحصول على معلومات الخادم

وظيفة getthehost($host.$path) (

// فتح الاتصال بالعقدة

$fp - fsockopen($host, 80, &$errno, &$errstr, 30);

// انتقل إلى وضع الحظر

المقبس_set_blocking($fp, 1),

// إرسال الرؤوس

fputs($fp,"GET $path HTTP/1.1\r\n");

fputs($fp, "Host: $host\r\n\r\n"); $س = 1;

// احصل على الرؤوس

بينما($x< 10) :

$headers = fgets($fp, 4096);

// أغلق المناور

getthehost("www.apress.com", "/");

يؤدي تشغيل القائمة 7.6 إلى إنتاج المخرجات التالية:

HTTP/1.1 200 OK الخادم: موقع محتوى Microsoft-IIS/4.0:

2000 20:25:06 بتوقيت جرينتش ETag: "f0a61666dbff1bf1:34a5" طول المحتوى: 1311

الدالة pfsockopen() هي نسخة ثابتة من fsockopen(). وهذا يعني أنه لن يتم إغلاق الاتصال تلقائيًا عند انتهاء البرنامج النصي الذي تم استدعاء الوظيفة فيه. بناء جملة الدالة pfsockopen() هو:

int pfsockopen (عقدة السلسلة، منفذ int [، int error_code [، string error_text [، int timeout]]])

اعتمادًا على الأهداف المحددة لتطبيقك، قد تجد أنه من الملائم أكثر استخدام pfsockopen() بدلاً من fsockopen().

إطلاق البرامج الخارجية

يمكن لبرامج PHP النصية أيضًا تنفيذ البرامج الموجودة على الخادم. تُستخدم هذه الميزة غالبًا بشكل خاص عند إدارة النظام عبر متصفح الويب، وكذلك للحصول على معلومات موجزة حول النظام بسهولة أكبر.

تقوم الدالة exec() بتشغيل برنامج معين وإرجاع السطر الأخير من مخرجاته. بناء جملة الدالة exec():

سلسلة exec (أمر السلسلة [، صفيف السلسلة [، int return]])

يرجى ملاحظة أن الدالة exec() تنفذ الأمر فقط ولا تطبع نتائجه. يمكن تخزين كل مخرجات الأوامر في معلمة صفيف اختيارية. بالإضافة إلى ذلك، إذا تم تحديد متغير إرجاع أيضًا عند تحديد معلمة المصفوفة، فسيتم تعيين رمز الإرجاع الخاص بالأمر الذي تم تنفيذه إلى الأخير.

توضح القائمة 7.7 كيفية استخدام الدالة exec() لتنفيذ وظيفة نظام UNIX ping.

القائمة 7.7. التحقق من الاتصال بالخادم باستخدام الدالة exec()

exec("ping -from 5 www.php.net", $ping);

// في نظام التشغيل Windows - exec("ping -n 5 www.php.net.$ping);

لـ ($i=0; $i< count($ping);$i++) :

مطبعة "
$ping[$i]";

نتيجة:

PING www.php.net (208.247.106.187): 56 بايت بيانات

64 بايت من 208.247.106.187: icmp_seq=0 ttl=243 time=66.602 مللي ثانية

64 بايت من 208.247.106.187: icmp_seq=1 ttl=243 time=55.723 مللي ثانية

64 بايت من 208.247.106.187: icmp_seq=2 ttl=243 time=70.779 مللي ثانية

64 بايت من 208.247.106.187: icmp_seq=3 ttl=243 مرة=55.339 مللي ثانية

64 بايت من 208.247.106.187: icmp_seq=4 ttl=243 time=69.865 مللي ثانية

www.php.net إحصائيات بينغ -

تم إرسال 5 حزم. تم استلام 5 حزم. فقدان الحزمة 0%

رحلة ذهابًا وإيابًا دقيقة/متوسط/حد أقصى/قياسي - 55.339/63.662/70.779/6.783 مللي ثانية

عودة الفواصل العليا

هناك طريقة أخرى لتنفيذ أوامر النظام التي لا تتطلب وظائف الاستدعاء - الأمر الذي يتم تنفيذه محاط بعلامات التحديد الخلفية (``)، ويتم عرض نتائج تشغيله في المتصفح. مثال:

مطبعة "

$ الإخراج
";

يعرض هذا المقتطف محتويات الدليل الذي يوجد به البرنامج النصي في المتصفح.

تحدد المعلمة الداخلية ping -c 5 (-p 5 في نظام التشغيل Windows) عدد استقصاءات الخادم.

إذا كنت تريد فقط إرجاع النتائج غير المنسقة لأمر ما، فاستخدم الدالة passthru() الموضحة أدناه.

تعمل الدالة passthru() تقريبًا بنفس طريقة عمل exec()، مع استثناء واحد - فهي تطبع نتائج الأمر تلقائيًا. بناء جملة الدالة passthru() هو:

تمرير باطل (أمر السلسلة [، int return])

إذا تم تمرير معلمة إرجاع اختيارية عند استدعاء passthru()، فسيتم تعيين هذا المتغير على رمز الإرجاع للأمر الذي تم تنفيذه.

الهروبشيلكمد ()

تتجنب الدالة escapeshellcmd() أي أحرف قد تكون خطرة قد يدخلها المستخدم (على سبيل المثال، في نموذج HTML) لتنفيذ أوامر exec()، أو passthru()، أو system()، أو popen(). بناء الجملة:

سلسلة escapeshellcmd (أمر سلسلة)

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

$user_input = `rm -rf *`; // احذف الدليل الأصلي وجميع أدلةه الفرعية

exec($user_input); // تنفيذ $user_input !!!

إذا لم يتم اتخاذ أي احتياطات، فإن مثل هذا الأمر سيؤدي إلى كارثة. ومع ذلك، يمكنك استخدام وظائف escapeshellcmd() للهروب من إدخال المستخدم:

$user_input = `rm - rf *`; // احذف الدليل الأصلي وجميع أدلةه الفرعية

ex(escapeshellcmd($user_input)); // الهروب من الشخصيات الخطرة

تفلت الدالة escapeshellcmd() من الحرف *، مما يمنع الأمر من حدوث عواقب كارثية.

يعد الأمان أحد أهم جوانب برمجة الويب، لذلك خصصت فصلاً كاملاً لهذا الموضوع ومدى ارتباطه ببرمجة PHP. انظر الفصل 16 لمزيد من المعلومات.

العمل مع نظام الملفات

لدى PHP وظائف لعرض وتنفيذ عمليات مختلفة على الملفات الموجودة على الخادم. غالبًا ما تكون المعلومات حول سمات ملف الخادم (الموقع والمالك والامتيازات) مفيدة.

تقوم الدالة basename() باستخراج اسم الملف من الاسم الكامل الذي تم تمريره. بناء جملة الدالة Basename():

الاسم الأساسي للسلسلة (الاسم الكامل للسلسلة)

يتم استخراج اسم الملف الأساسي من الاسم الكامل كما يلي:

$path = "/usr/local/phppower/htdocs/index.php"; $file = الاسم الأساسي($path); // ملف $ = "index.php"

في الواقع، تقوم هذه الوظيفة بإزالة المسار من الاسم الكامل وتترك اسم الملف فقط.

تقوم الدالة getlastmod() بإرجاع تاريخ ووقت آخر تعديل للصفحة التي تم استدعاء الدالة منها. بناء جملة الدالة Getlastmod():

إنت getlastmod (باطل)

تتبع القيمة المرجعة تنسيق التاريخ/الوقت في UNIX، ويمكنك استخدام الدالة date() لتنسيقها. يعرض المقتطف التالي تاريخ آخر تعديل للصفحة:

echo "آخر تعديل: ".date("H:i:s a".getlastmod());

تقوم الدالة stat() بإرجاع مصفوفة قابلة للفهرسة تحتوي على معلومات تفصيلية حول الملف بالاسم المحدد:

إحصائيات الصفيف (اسم ملف السلسلة)

يتم إرجاع المعلومات التالية في عناصر المصفوفة:

0 جهاز

2 وضع حماية عقدة الفهرس

3 عدد الروابط

4 معرف المستخدم المالك

5 معرف مجموعة المالك

6 نوع جهاز عقدة الفهرس

7 الحجم بالبايت

8 وقت آخر مكالمة

9 وقت التعديل الأخير

10 آخر مرة تم تعديلها

11 حجم الكتلة لنظام الإدخال/الإخراج

12 عدد القطع المخصصة

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

ملف $ - "datafile.txt"؛

قائمة($dev, $inode, $inodep, $nlink, $uid, $gid, $inodev, $size, $atime, $mtime, $ctime,

$bsize) = stat($file);

اطبع "ملف $ هو بايت بحجم $.
";

اطبع "آخر وقت وصول: $atime
";

اطبع "وقت التعديل الأخير: $mtime
";

نتيجة:

popen.php هو 289 بايت.

آخر وقت للوصول: 15 أغسطس 2000 الساعة 12:00:00

وقت التعديل الأخير: 15 أغسطس 2000 10:07:18

في هذا المثال، استخدمت بنية القائمة () لتعيين أسماء لكل قيمة إرجاع. بالطبع، يمكنك بسهولة إرجاع مصفوفة، والتنقل بين العناصر وعرض جميع المعلومات الضرورية. كما ترون، تتيح لك الدالة stat()‎ الحصول على معلومات مفيدة متنوعة حول ملف ما.

عرض وتغيير خصائص الملف

يتمتع كل ملف في أنظمة عائلة UNIX بثلاث خصائص مهمة:

  • الانتماء إلى مجموعة؛
  • مالك؛
  • الأذونات.

يمكن تغيير كل هذه الخصائص باستخدام وظائف PHP المناسبة. الميزات الموضحة في هذا القسم لا تعمل على أنظمة عائلة Windows.

إذا لم تكن لديك خبرة في أنظمة التشغيل UNIX، فيمكن العثور على معلومات حول خصائص نظام الملفات UNIX على http://sunsite.auc.dk/linux-newbie/FAQ2.htm. تمت مناقشة موضوعات عضوية المجموعة والملكية والأذونات في القسم 3.2.6.

تحاول الدالة chgrp() تغيير المجموعة التي ينتمي إليها الملف المحدد. chgrp () بناء جملة الدالة:

int chgrp (اسم ملف السلسلة، المجموعة المختلطة)

تقوم الدالة filegroup() بإرجاع معرف المجموعة لمالك الملف بالاسم المحدد، أو FALSE في حالة الخطأ. بناء جملة الدالة Filegroup():

مجموعة الملفات int (اسم ملف السلسلة)

تقوم الدالة chmod() بتغيير أذونات الملف بالاسم المحدد. بناء جملة الدالة chmod():

int chmod (اسم ملف السلسلة، أذونات int)

يتم تحديد الأذونات في التدوين الثماني. يتم توضيح تفاصيل إعداد معلمة للدالة chmod() في المثال التالي:

chmod("data_file.txt", g+r); // لا يعمل

chmod("data_file.txt", 766); // لا يعمل

chmod("data_file.txt", 0766); // يعمل

تقوم الدالة fileperms() بإرجاع أذونات الملف بالاسم المحدد، أو FALSE في حالة الخطأ. بناء جملة الدالة Fileperms():

int fileperms (اسم ملف السلسلة)

تحاول الدالة chown() تغيير مالك الملف. يقتصر الحق في تغيير مالك الملف على المستخدم المميز. بناء جملة الدالة chown():

int chown (اسم ملف السلسلة، المستخدم المختلط)

تقوم الدالة fileowner() بإرجاع معرف المستخدم لمالك الملف بالاسم المحدد. بناء جملة الدالة Fileowner():

مالك الملف int (اسم ملف السلسلة)

نسخ وإعادة تسمية الملفات

تتضمن وظائف النظام المفيدة الأخرى التي يمكن تنفيذها في نصوص PHP نسخ الملفات وإعادة تسميتها على الخادم. يتم تنفيذ هذه العمليات بواسطة وظيفتين: Copy() و rename().

لا يعد نسخ ملف في برنامج PHP النصي أكثر صعوبة من استخدام أمر UNIX cf. تم حل المشكلة عن طريق وظيفة PHP Copy(). بناء جملة الدالة soru() هو:

نسخة int (مصدر السلسلة، وجهة السلسلة)

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

$data_file = "data.txt";

Copy($data_file.$data_file".bak") أو die("تعذر نسخ $data_file");

تقوم الدالة rename() بإعادة تسمية الملف. في حالة النجاح، يتم إرجاع TRUE، وإذا لم ينجح، يتم إرجاع FALSE. إعادة تسمية () بناء جملة الدالة:

إعادة تسمية منطقية (سلسلة الاسم القديم، سلسلة اسم_الجديد)

مثال على إعادة تسمية ملف باستخدام الدالة rename():

$data_file = "data.txt";

rename($data file, $datafile".old") أو die("تعذر إعادة تسمية ملف البيانات $");

حذف الملفات

تقوم الدالة unlink() بحذف ملف بالاسم المحدد. بناء الجملة:

int إلغاء الارتباط (ملف سلسلة)

إذا كنت تعمل باستخدام PHP على نظام Windows، فقد تواجه أحيانًا مشكلات في استخدام هذه الميزة. في هذه الحالة، يمكنك استخدام وظيفة النظام () الموضحة أعلاه وحذف الملف باستخدام أمر DOS del:

نظام ("ديل filename.txt")؛

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

تتيح لك وظائف PHP عرض محتويات الدلائل والتنقل فيها. تُظهر القائمة 7.8 بنية دليل نموذجية على نظام UNIX.

القائمة 7.8. هيكل الدليل النموذجي

تكمل وظيفة dirname() اسم القاعدة() - فهي تستخرج المسار من اسم الملف المؤهل بالكامل. بناء جملة الدالة dirname() هو:

اسم السلسلة (مسار السلسلة)

مثال على استخدام dirname() لاستخراج مسار من الاسم الكامل:

$path = "/usr/locla/phppower/htdocs/index.php";

$file = dirname($path); // $file = "usr/local/phppower/htdocs"

تُستخدم الدالة dirname() أحيانًا مع المتغير $SCRIPT_FILENAME للحصول على المسار الكامل للبرنامج النصي الذي يتم تنفيذ الأمر منه:

$dir - dirname($SCRIPT_FILENAME);

تتحقق الدالة is_dir() ما إذا كان الملف الذي يحمل الاسم المحدد هو دليل:

منطقي is_dir (اسم ملف السلسلة)

يستخدم المثال التالي بنية الدليل من القائمة 7.8:

$ isdir = is_dir("index.html"); // إرجاع خطأ

$isdir = is_dir("كتاب"); // إرجاع صحيح

تقوم الدالة mkdir() بنفس الشيء الذي يقوم به أمر UNIX الذي يحمل نفس الاسم - فهي تقوم بإنشاء دليل جديد. بناء جملة الدالة mkdir():

int mkdir (مسار السلسلة، الوضع int)

تحدد معلمة المسار المسار لإنشاء الدليل الجديد. لا تنس إنهاء المعلمة باسم الدليل الجديد! تحدد معلمة الوضع الأذونات المعينة للدليل الذي تم إنشاؤه.

تمامًا كما تفتح الدالة fopen() مناورًا للعمل مع ملف معين، تفتح الدالة opendir() مناورًا للعمل مع الدليل. بناء جملة الدالة opendir() هو:

int opendir (مسار السلسلة)

تقوم الدالة Closedir() بإغلاق مؤشر الدليل الذي تم تمريره كمعلمة. بناء جملة الدالة Closedir() هو:

باطل مغلق (int Directory_manipulator)

تقوم الدالة readdir() بإرجاع العنصر التالي للدليل المحدد. بناء الجملة:

سلسلة readdir (int Directory_manipulator)

باستخدام هذه الوظيفة، يمكنك بسهولة إدراج جميع الملفات والأدلة الفرعية الموجودة في الدليل الحالي:

$dh = opendir(" .);

بينما ($file = readdir($dh)) :

طباعة "ملف $
"؛ في نهاية المطاف؛

تعمل الدالة chdir() تمامًا مثل أمر UNIX cd؛ فهي تتغير إلى الدليل المحدد بواسطة المعلمة. بناء جملة الدالة chdir():

int chdir (دليل السلسلة)

في المثال التالي، ننتقل إلى الكتاب/الدليل الفرعي ونطبع محتوياته:

$newdir = "كتاب";

chdir($newdir) أو die("تعذر التغيير إلى الدليل ($newdir)"); $dh = opendir(" . ");

بينما ($file = readdir($dh)) ؛

طباعة "ملف $
";

تقوم الدالة rewlnddir() بنقل مؤشر الموضع الحالي إلى بداية الدليل المفتوح بواسطة الدالة opendir(). صيغة الدالة rewinddir() هي:

الترجيع الفارغ (int Directory_manipulator)

المشروع 1: عداد ضربات بسيط

يقوم البرنامج النصي المعروض في هذا القسم بحساب عدد الزيارات إلى الصفحة الموجودة فيه. قبل الانتقال إلى الكود في القائمة 7.9، راجع الخوارزمية المكتوبة بالكود الزائف:

  1. قم بتعيين متغير الوصول $ اسم الملف الذي سيتم تخزين قيمة العداد فيه.
  2. استخدم الدالة file() لقراءة محتويات $access في مصفوفة $visits. تعمل البادئة @ قبل اسم الوظيفة على منع الأخطاء المحتملة (على سبيل المثال، لا يوجد ملف بالاسم المحدد).
  3. قم بتعيين المتغير $current_visitors على قيمة العنصر الأول (والوحيد) في المصفوفة $visits.
  4. قم بزيادة قيمة $current_visitors بمقدار 1.
  5. افتح ملف الوصول $ للكتابة واضبط مؤشر الموضع الحالي على بداية الملف.
  6. اكتب قيمة $current_visitors في ملف الوصول $.
  7. أغلق المعالج الذي يشير إلى ملف الوصول $.

القائمة 7.9. عداد ضرب بسيط

// البرنامج النصي: عداد ضربات بسيط

// الغرض: حفظ عدد الزيارات في الملف

$access = "hits.txt"; // يتم اختيار اسم الملف بشكل تعسفي

$current_visitors = $visits; // استرداد العنصر الأول (والوحيد).

+$current_visitors; // زيادة عداد الضربات

$fh = fopen($access."w"); // افتح ملف hits.txt وقم بتثبيته

// مؤشر إلى الموضع الحالي في بداية الملف

@fwrite($fh, $current_visitors);// اكتب قيمة عداد جديدة

// إلى الملف "hits.txt"

فكلوز($fh); // إغلاق معالج الملف "hits.txt"

المشروع الثاني: بناء خريطة الموقع

يبني البرنامج النصي في القائمة 7.10 خريطة موقع، وهي عرض هرمي لجميع المجلدات والملفات الموجودة على الخادم، بدءًا من دليل معين. يستخدم حساب المساحة المتروكة للعناصر التي تشكل خريطة الموقع الوظائف المحددة في هذا الفصل والفصول السابقة. قبل الانتقال إلى البرنامج، راجع الخوارزمية المكتوبة بالكود الزائف:

  1. قم بتعريف متغيرات الخدمة لتخزين الدليل الأصلي واسم الملف الرسومي مع صورة المجلد واسم الصفحة وعلامة نظام تشغيل الخادم (Windows أو نظام آخر).
  2. قم بتعريف وظيفة Display_directory () التي تقرأ محتويات الدليل وتنسيقه للعرض في المتصفح.
  3. أنشئ مسار الدليل من خلال دمج الاسم الذي تم تمريره في المتغير $dir1 مع $dir.
  4. افتح الدليل واقرأ محتوياته. تنسيق أسماء الدليل والملفات وعرضها في المتصفح.
  5. إذا كان الملف الحالي عبارة عن دليل، فاستدعاء Display_di Rectory() بشكل متكرر وقم بتمرير اسم الدليل الجديد لعرضه. حساب المسافة البادئة المستخدمة عند تنسيق الإخراج.

إذا لم يكن الملف دليلاً، فسيتم تنسيقه لعرضه كارتباط تشعبي (ويُحسب أيضًا المسافة البادئة المستخدمة في التنسيق).

القائمة 7.10. برنامج Sitemap.php

// الملف: sitemap.php

// الغرض: بناء خريطة الموقع

// الدليل الذي يبدأ منه بناء الخريطة

$beg_path = "C:\Program FilesVApache Group\Apache\htdocs\phprecipes";

// ملف به صورة رسومية للمجلد.

// يجب أن يكون المسار نسبيًا* للدليل الجذر لخادم Apache

$folder_location = "C:\My Documents\PHP for Programmers\FINAL CHPS\graphics\folder.gif";

// النص الموجود في النافذة title $page_name = "PHPRecipes SiteMap";

// على أي نظام سيتم استخدام البرنامج النصي - Linux أم Windows؟

// (0 - ويندوز؛ 1 - لينكس)

$usingjinux = 0;

// الوظيفة: Display_directory

// الغرض: قراءة محتويات الدليل المحدد بواسطة المعلمة

// $dir1، متبوعًا بتنسيق الدليل والتسلسل الهرمي للملفات.

// يمكن استدعاء الوظيفة بشكل متكرر.

وظيفة عرض_الدليل ($dir1، $folder_location، $using_linux، $init_عمق) (

// تحديث المسار

Sdh = opendir($dir);

بينما($file = readdir($dh)) :

// عناصر الدليل "." و".." ليسا مخرجين.

إذا (($file != "."") && ($file != "..")) :

إذا ($using_linux == 0):

$العمق = تنفجر("\\"، $dir): آخر:

$عمق = تنفجر("/", $dir); إنهاء إذا ؛ $curtent_عمق = حجم($عمق);

// أنشئ المسار وفقًا لقواعد نظام التشغيل المستخدم. إذا ($using_linux == 0):

$tab_عمق = $current_deptn - $init_عمق؛

ملف $ = $dir. "\\"، ملف $؛ آخر:

ملف $ = $dir. "/"، ملف $؛ إنهاء إذا؛

// هل يحتوي الملف $ على دليل؟ إذا (هو دير(ملف $)) :

// حساب المسافة البادئة

بينما ($س< ($tab_depth * 2)) :

$x++; في نهاية المطاف؛

مطبعة "

".basename($file)."
";

// عداد الزيادة

// استدعاء متكرر لوظيفة Display_directory ().

Display_directory($file, $folder_location, $using_linux, $init_عمق);

// ليس دليلا

// أنشئ مسارًا وفقًا لقواعد الاستخدام

// نظام التشغيل.

إذا ($using_linux == 0):

$tab_عمق = ($current_عمق - $init_عمق) - 2؛ $س = 0;

// حساب المسافة البادئة

بينما ($س< (($tab_depth * 2) + 5)) :

مطبعة " ".basename($file)."
";

مطبعة " ".basename($file)."
";

إنهاء إذا؛ // Is_dir(ملف) endif: // If ! "." أو ".."

// أغلق الدليل Closeir($dh);

<? print "$page_name"; ?>

// حساب الحشو الأولي

إذا ($using_linux == 0):

$عمق = تنفجر("\\"، $beg_path)؛

$عمق = تنفجر("/", $beg_path);

$init_عمق = حجم($عمق);

Display_directory($beg_path, $folder_location, $using_linux, $init_عمق);

في التين. يوضح الشكل 7.1 نتيجة تشغيل البرنامج النصي مقابل دليل يحتوي على عدة فصول من هذا الكتاب.

أرز. 7.1. إخراج بنية الدليل على الخادم باستخدام البرنامج النصي sitemap.php

نتائج

قدم هذا الفصل العديد من أدوات PHP للتعامل مع الملفات. وعلى وجه الخصوص، نظرنا في القضايا التالية:

  • التحقق من وجود الملفات؛
  • فتح وإغلاق الملفات وتدفقات الإدخال/الإخراج؛
  • الكتابة إلى الملف والقراءة منه؛
  • إعادة توجيه الملف إلى دفق الإخراج؛
  • إطلاق برامج خارجية؛
  • عمليات نظام الملفات.

تمهد المواد الموجودة في هذا الفصل الطريق للفصل التالي، "السلاسل والتعبيرات العادية"، لأنه عند تطوير تطبيقات الويب، ترتبط معالجة السلاسل وعمليات الإدخال/الإخراج ارتباطًا وثيقًا.