أجهزة الكمبيوتر شبابيك إنترنت

قراءة php سطر من ملف. العمل مع الملفات في php: فتح ، كتابة ، قراءة. الملفات: أوضاع التشغيل

بي أتش بي

file_exists ("test.txt") // هل الملف موجود؟ ملف ("test.txt") ؛ // اكتشف حجم الملف // إرجاع الطابع الزمني: fileatime ("test.txt") ؛ // تاريخ آخر وصول إلى الملف // التاريخ ("d MY" ، $ atime) ؛ filemtime ("test.txt") ؛ // تاريخ تعديل الملف // التاريخ ("d M Y"، $ mtime) ؛ filectime ("test.txt") ؛ // تاريخ إنشاء الملف (Windows) // التاريخ ("d M Y" ، $ ctime) ؛

الملفات: أوضاع التشغيل

بي أتش بي

مورد fopen (اسم ملف سلسلة ، وضع سلسلة) // مورد - إرجاع مؤشر ملف عند النجاح ، أو خطأ عند الخطأ
ساعات العمل وصف
ص فتح ملف للقراءة فقط ؛
ص + فتح ملف للقراءة والكتابة ؛
ث فتح ملف للكتابة فقط. إذا كان موجودًا ، فسيتم إتلاف المحتوى الحالي للملف. تم تعيين الوضع الحالي على البداية ؛
ث + افتح الملف للقراءة والكتابة. إذا كان موجودًا ، فسيتم إتلاف المحتوى الحالي للملف. تم تعيين الوضع الحالي على البداية ؛
أ افتح الملف للكتابة. يتم تعيين الوضع الحالي على نهاية الملف ؛
أ + افتح الملف للقراءة والكتابة. يتم تعيين الوضع الحالي على نهاية الملف ؛
ب معالجة ملف ثنائي. هذه العلامة مطلوبة عند العمل مع الثنائيات على Windows.

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

بي أتش بي

$ fi = fopen ("test.html"، "w +") أو die ("Error")؛ // أمثلة $ fi = fopen ("http://www.you/test.html"، "r")؛ $ fi = fopen ("http://ftp.you/test.html"، "r")؛ // إغلاق fclose ($ fi)

قراءة الملفات في PHP

بي أتش بي

// اقرأ الملف fread (int fi، int length) $ str = fread ($ fi، 5)؛ // اقرأ أول 5 أحرف echo $ str؛ // منذ أن تحرك المؤشر $ str = fread ($ fi، 12)؛ // اقرأ الأحرف الـ 12 التالية echo $ str؛ fgets (int fi [، int length]) // قراءة سطر من ملف fgets (int fi، int length [، string allowable]) // اقرأ سطرًا من ملف وتجاهل علامات HTML // string allowable - العلامات التي يجب ترك fgetc (int fi) // يقرأ حرف من ملف

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

التلاعب بالمؤشر في ملفات PHP

بي أتش بي

int fseek (int fi، int offset [، int whence]) // إعداد المؤشر // int fi - مؤشر إلى الملف // offset - عدد الأحرف المراد نقلها. // من أين: // SEEK_SET - تبدأ الحركة من بداية الملف ؛ // SEEK_CUR - تبدأ الحركة من الموضع الحالي ؛ // SEEK_END - تبدأ الحركة من نهاية الملف. fseek ($ fi، -10، SEEK_END) ؛ // اقرأ آخر 10 أحرف $ s = fread ($ fi، 10)؛ $ pos = ftell ($ fi) ؛ // اكتشف الموضع الحالي ترجيع ($ f) // إعادة تعيين مؤشر bool feof ($ f) // نهاية الملف

العمل مع الملفات (البيانات) مباشرة في PHP

بي أتش بي

ملف المصفوفة (اسم ملف سلسلة) // احصل على محتويات الملف كمصفوفة // خيار آخر للعمل المباشر مع البيانات file_get_contents (اسم ملف سلسلة) // القراءة (نحصل على الملف بالكامل في سطر واحد) // الكتابة إلى الملف (تم الكتابة فوقه مبدئيًا) file_put_contents (اسم ملف سلسلة ، بيانات مختلطة [، علامة int]) ؛ // FILE_APPEND // الكتابة حتى نهاية الملف: file_put_contents ("test.txt" ، "البيانات" ، FILE_APPEND) ؛ // إذا كتبنا مصفوفة ، $ array = array ("I"، "live")؛ file_put_contents ("test.txt" ، مصفوفة $) ؛ // ثم نحصل على "Ilive"

إدارة ملفات php

بي أتش بي

نسخة (مصدر سلسلة ، وجهة سلسلة) ؛ // نسخ الملف إعادة تسمية (str oldname ، str newname) ؛ // إعادة تسمية الملف بدون ارتباط (اسم ملف سلسلة) ؛ // حذف ملف

تحميل الملفات على خادم PHP

// إعدادات PHP.ini file_uploads (تشغيل | إيقاف) // تمكين. تعطيل تحميل الملفات upload_tmp_dir // مجلد مؤقت للملفات التي تم تحميلها. المجلد المؤقت الافتراضي upload_max_filesize (الافتراضي = 2 ميجا بايت) // max. حجم الملف الذي تم تحميله post_max_size // الحجم الإجمالي للنموذج المقدم (يجب أن يكون أكبر من upload_max_filesize) // تحميل بسيط

لغة البرمجة

نحن نعمل مع الملفات الموجودة على الخادم

بي أتش بي

// تلقي البيانات $ tmp = $ _FILES ["userfile"] ["tmp_name"] ؛ $ name = $ _FILES ["ملف المستخدم"] ["الاسم"] ؛ // انقل الملف move_uploaded_file ($ tmp، name) ؛ move_uploaded_file ($ tmp، "upload /". name) ؛ // إعادة توجيه الملف إلى مجلد التحميل // المرتبط بالملف الحالي // ماذا يوجد في المصفوفة $ _FILES $ _FILES ["userfile"] ["name"] // file name ، على سبيل المثال ، test.html $ _FILES [ "userfile"] ["tmp_name"] // اسم الملف المؤقت (المسار) $ _FILES ["userfile"] ["size"] // file size $ _FILES ["userfile"] ["type"] // file type $ _FILES ["ملف المستخدم"] ["خطأ"] // 0 - لا توجد أخطاء ، رقم - نعم

عند دراسة هذا الموضوع ، ضع في اعتبارك أن بعض وظائف PHP تستخدم واصف الملف للوصول إلى ملف ، بينما يستخدم البعض الآخر مسار الملف.

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

يمكن استخدام الوظيفة fread () لاسترداد كمية محددة من البيانات من ملف.

fread (ملف ، طول)

خيارات:

ملف - واصف الملف

length - حجم البيانات بالبايت

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

عند تحديد طول السلسلة وعند تحريك المؤشر ، يجب أن تأخذ في الاعتبار أن الأحرف الروسية ليست بحجم بايت واحد ، بل أكثر من ذلك. لمزيد من المعلومات ، راجع العمل مع السلاسل. أيضًا ، لا تنس أن هناك عدة بايت في بداية الملف المشفر UTF-8. في ترميز UTF-8 بدون BOM ، هذه البايت مفقودة.

دعنا نقرأ أول 10 بايت من ملف myfile.txt. دعونا نفتحه في وضع "r +". سيكون المؤشر في البداية.

$ file = fopen ("myfile.txt"، "r +")؛ أخذ = fread (ملف بالدولار ، 10) ؛ صدى $ تأخذ؛

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

ترجع الدالة fgets () سلسلة واحدة ، بدءًا من المؤشر إلى نهاية السلسلة.

fgets (ملف ، طول)

خيارات:

ملف - واصف الملف

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

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

يتيح لك تشغيل الوظيفة في حلقة قراءة ملف سطرًا سطرًا.

لنقرأ سطرًا واحدًا من الملف myfile.txt. نظرًا لأنه تم نقل المؤشر بالفعل ، فلن تتم قراءة السطر بالكامل ، ولكن من المؤشر.

$ take = fgets (ملف $) ؛ صدى صوت "
". $ take؛

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

fgetss (ملف ، طول ، العلامات المرغوبة)

خيارات:

ملف - واصف الملف

length - حجم السلسلة بالبايت. معلمة اختيارية.

العلامات المطلوبة - يسمح لك بتحديد العلامات التي لن يتم حذفها.

هناك وظيفة fgetc () تقوم بإرجاع حرف واحد من الملف.

تقرأ الدالة file () الملف بأكمله وتضع البيانات في مصفوفة. يتم وضع كل سطر في عنصر من عناصر المصفوفة. لا تحتاج إلى فتح ملف حتى تعمل هذه الميزة. يتم تجاهل موقع المؤشر.

ملف (مسار الملف ، الأعلام ، السياق)

خيارات:

مسار الملف - مسار الملف المطلق أو النسبي

الإشارات - العلامات التي تحدد كيفية عمل الوظيفة. معلمة اختيارية.

السياق - يسمح لك بتحديد مورد سياق

يمكنك تحديد العلامات التالية:

FILE_USE_INCLUDE_PATH - يسمح لك بالبحث عن ملف في مجلدات مسار التضمين.

FILE_IGNORE_NEW_LINES - يزيل حرف نهاية السطر. إذا لم يتم تعيين هذه العلامة ، فسيكون هناك حرف نهاية السطر في كل سطر.

FILE_SKIP_EMPTY_LINES - لا يضيف أسطرًا فارغة إلى المصفوفة.

إذا تم تحديد عدة علامات ، فسيتم فصلها بواسطة عامل التشغيل "|".

دعنا نعرض الملف myfile.txt على الصفحة.

$ ar = ملف ("myfile.txt" ، FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES) ، صدى صوت "
"؛ print_r ($ ar) ؛

اكتب في الملف

تقوم الوظيفة fwrite () بكتابة البيانات إلى ملف.

fwrite (ملف ، بيانات ، طول)

خيارات:

ملف - واصف الملف

البيانات - البيانات التي تتم كتابتها

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

إذا كان المؤشر في بداية الملف أو في منتصفه ، تستبدل الوظيفة الأحرف الموجودة في الملف بأحرف جديدة. أي أنه إذا تمت كتابة 5 أحرف ، فسيتم إزالة 5 أحرف من الملف وإضافة أحرف جديدة مكانها.

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

دعنا نكتب السطر "text from the script" إلى الملف. في مثالنا ، يوجد الواصف في منتصف الملف وسيتم كتابة السطر هناك. عندما تحتاج إلى إضافة بيانات إلى نهاية الملف ، يمكنك فتحه في الوضع "أ". وعندما يحتاج ملف إلى الكتابة فوقه ، يتم فتحه في وضع "w". لن نحرك المؤشر ، سنكتب البيانات إلى مكانها.

$ text = "text from script"؛ fwrite (ملف $ ، نص $) ؛

استخدام الدالات fopen و fclose و feof و fgets و fgetss و fscanf

دعنا نسرد كل الاحتمالات

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

طرق fopen التقليدية

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

قائمة 1. فتح وقراءة ملف مع fgets
$ file_handle = fopen ("myfile"، "r")؛ while (! feof ($ file_handle)) ($ line = fgets ($ file_handle)؛ echo $ line؛) fclose ($ file_handle)؛

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

  1. افتح الملف. يخزن $ file_handle رابط الملف نفسه.
  2. تحقق لمعرفة ما إذا كنت قد وصلت إلى نهاية الملف.
  3. استمر في قراءة الملف حتى تصل إلى النهاية ، وطباعة كل سطر تقرأه.
  4. أغلق الملف.

مع وضع ذلك في الاعتبار ، سأستعرض كل وظيفة ملف مستخدمة هنا.

وظيفة Fopen

تقوم وظيفة fopen بإنشاء ارتباط إلى ملف. أقول "يربط" لأنه بالإضافة إلى فتح ملف ، يمكن لـ fopen أيضًا فتح عنوان URL:

$ fh = fopen ("http://127.0.0.1/"، "r")؛

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

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

وظيفة Feof

يحدد الأمر feof ما إذا كانت القراءة قد تمت في نهاية الملف وإرجاع True أو False. الحلقة تستمر حتى نهاية ملف "myfile." لاحظ أن feof أيضًا يعرض False إذا كنت تقرأ عنوان URL وانتهت مهلة الاتصال نظرًا لعدم وجود المزيد من البيانات لقراءتها.

وظيفة Fclose

تخطي منتصف القائمة 1 وانتقل إلى النهاية ؛ يقوم fclose بعكس الأمر fopen: فهو يغلق الاتصال بملف أو عنوان URL. بعد تنفيذ هذه الوظيفة ، لن تتمكن من القراءة من ملف أو مقبس.

وظيفة Fgets

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

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

سلسلة $ = fgets ($ file_handle، 81)؛

فكر في "\ 0" ، نهاية السطر في C ، واضبط الطول على حرف واحد أكثر مما تحتاجه بالفعل. كما ترى ، يستخدم المثال أعلاه 81 حرفًا ، بينما تحتاج إلى 80 حرفًا. اجعل من المعتاد إضافة حرف إضافي كلما احتجت إلى تعيين حد طول سلسلة لوظيفة معينة.

وظيفة Fread

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

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

$ fh = fopen ("myfile"، "rb")؛ البيانات $ = fread ($ file_handle، 4096)؛

يقرأ المثال أعلاه 4096 بايت (4 كيلوبايت) من البيانات. لاحظ أنه بغض النظر عن القيمة التي تحددها ، لن يقرأ fread أكثر من 8192 بايت (8 كيلوبايت).

بافتراض أن الملف لا يزيد عن 8 كيلوبايت ، يجب أن يقرأ مقتطف الشفرة أدناه الملف بالكامل في سطر واحد.

$ fh = fopen ("myfile"، "rb")؛ $ data = fread ($ fh، ملف ("myfile"))؛ fclose ($ fh) ؛

إذا كان الملف أكبر ، فسيتعين عليك استخدام حلقة لقراءة بقية الملف.

وظيفة Fscanf

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

list ($ field1، $ field2، $ field3) = fscanf ($ fh، "٪ s٪ s٪ s")؛

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

وظيفة Fgetss

تختلف وظيفة fgetss عن وظائف الملفات التقليدية وتعطيك فكرة أفضل عما يمكن أن تفعله PHP. إنه يعمل مثل fgets ، لكنه يزيل أي علامات HTML أو PHP يصادفها ، تاركًا نصًا "فارغًا" فقط. لنأخذ ملف HTML أدناه.

قائمة 2. نموذج ملف HTML
لقبي

إذا فهمت ما تعنيه عبارة "لأنه ليس هناك من يعطيك أي ألم" ، فأنت تستمع إلى الكثير من فرقة أمريكا

دعونا نجريها من خلال وظيفة fgetss.

قائمة 3. باستخدام fgetss
$ file_handle = fopen ("myfile"، "r")؛ while (! feof ($ file_handle)) (echo = fgetss ($ file_handle)؛) fclose ($ file_handle) ؛

إليك ما تحصل عليه كناتج:

عنواني إذا فهمت ما تعنيه عبارة "لأنه ليس هناك من يعطيك أي ألم" ، فأنت تستمع إلى الكثير من فرقة أمريكا

وظيفة Fpassthru

بغض النظر عن كيفية قراءة البيانات من الملف ، يمكنك طباعة البيانات المتبقية باستخدام أنبوب الإخراج القياسي باستخدام وظيفة fpassthru.

fpassthru ($ fh) ؛

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

معالجة الملفات غير الخطية: الانتقال عبر الملف

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

fseek ($ fh، 0) ؛

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

fseek (1024 دولارًا أمريكيًا) ؛

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

fseek ($ fh، 100، SEEK_CUR) ؛

وبالمثل ، فإن القفز إلى الوراء بمقدار 100 بايت يتم عن طريق:

fseek ($ fh، -100، SEEK_CUR) ؛

إذا كنت تريد الرجوع إلى 100 بايت قبل نهاية الملف ، فاستخدم SEEK_END بدلاً من ذلك.

fseek ($ fh، -100، SEEK_END) ؛

بمجرد وصولك إلى موقعك الجديد ، يمكنك استخدام fgets أو fscanf أو أي وظيفة أخرى لقراءة البيانات.

ملحوظة:لا يمكنك استخدام fseek على واصفات الملفات التي تشير إلى عناوين URL.

التقاط ملف كامل

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

$ my_file = file_get_contents ("myfilename") ؛ صدى $ my_file؛

على الرغم من أنه ليس الخيار الأفضل ، إلا أنه يمكنك كتابة هذا الأمر بشكل أقصر:

echo file_get_contents ("myfilename") ؛

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

echo file_get_contents ("http://127.0.0.1/") ؛

هذا الأمر في الواقع هو نفسه:

$ fh = fopen ("http://127.0.0.1/"، "r")؛ fpassthru ($ fh) ؛

يجب أن تنظر في هذه الأمثلة وتفكر ، "لا يزال هذا مضيعة للوقت." يتفق مطورو PHP معك. لذلك ، يمكنك تقصير الأمر أعلاه إلى:

readfile ("http://127.0.0.1/") ؛

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

readfile ("http://127.0.0.1/") ؛

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

مجموعة $ = Split ("\ n"، file_get_contents ("myfile"))؛

لكن لماذا تحتاج إلى كل هذه التعقيدات إذا كانت هناك وظيفة مناسبة تمامًا ستؤدي المهمة نيابةً عنك؟ تقوم الدالة PHP file () بهذا في خطوة واحدة: فهي تعيد مصفوفة سلسلة تكون عناصرها سلاسل الملف.

مجموعة $ = ملف ("myfile") ؛

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

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

سرد 4. مثال على ملف .ini
؛ اسم التعليق = مهمة "King Arthur" = البحث عن اللون المفضل للكأس المقدسة = Blue Samuel Clemens = Mark Twain Caryn Johnson = Whoopi Goldberg

تمثل الأوامر التالية ملفًا كمصفوفة ثم تقوم بطباعة ذلك المصفوفة:

$ file_array = parse_ini_file ("Holy_grail.ini") ؛ print_r $ file_array؛

سينتج هذا الناتج التالي:

القائمة 5. الإخراج
Array (=> King Arthur => للبحث عن الكأس المقدسة => Blue => Mark Twain => Whoopi Goldberg)

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

$ file_array = parse_ini_file ("Holy_grail.ini"، صحيح)؛ print_r $ file_array؛

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

القائمة 6. الإخراج
Array (=> Array (=> King Arthur => للبحث عن الكأس المقدسة => Blue) => Array (=> Mark Twain => Whoopi Goldberg))

تضع PHP البيانات في مصفوفة متعددة الأبعاد يمكن تحليلها بسهولة.

ولكن هذا مجرد غيض من فيض عندما يتعلق الأمر بمعالجة الملفات في PHP. يمكن أن تساعدك الوظائف الأكثر تعقيدًا مثل tidy_parse_file و xml_parse في تحليل مستندات HTML و XML ، على التوالي. راجع القسم للحصول على مزيد من المعلومات حول كيفية عمل هذه الوظائف. كلاهما يستحق النظر إذا كنت تعمل مع هذه الأنواع من الملفات ، ولكن بدلاً من النظر في جميع أنواع الملفات الممكنة ، يمكنك قراءة محتويات هذه المقالة بعناية ، حيث توجد بعض القواعد العامة الجيدة للعمل مع الوظائف التي وصفتها بعيد جدا.

أسلوب برمجة جيد

لا تفترض أبدًا أن كل شيء في برنامجك سيعمل على النحو المنشود. على سبيل المثال: ماذا لو تم نقل الملف الذي تبحث عنه؟ ماذا لو ، كنتيجة لتغيير الأذونات ، لا يمكنك قراءة محتويات الملف؟ يمكنك التحقق مسبقًا من وجود ملف وأذونات لقراءته باستخدام الطريقتين file_exists و is_readable.

سرد 7. استخدام file_exists and is_ readable
$ filename = "myfile" ؛ if (file_exists ($ filename) && is_readable ($ filename)) ($ fh = fopen ($ filename، "r")؛ # Processing fclose ($ fh)؛)

ومع ذلك ، من الناحية العملية ، قد يكون هذا الجزء من التعليمات البرمجية مفرطًا في مهمتك. يعتبر التعامل مع القيم المعادة بواسطة fopen أبسط وأكثر دقة.

if ($ fh = fopen ($ filename، "r")) (# Processing fclose ($ fh)؛)

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

مثل fopen ، ترجع دوال file_get_contents و file و readfile خطأ إذا تعذر فتح الملف أو معالجته. ترجع الدالات fgets و fgetss و fread و fscanf و fclose أيضًا False عند الخطأ. بالطبع ، باستثناء fclose ، ربما تكون قد عالجت بالفعل النتائج التي تعرضها. بقدر ما يتعلق الأمر بـ fclose ، هناك القليل مما يمكن القيام به إذا لم يتم إغلاق واصف الملف بشكل صحيح ، لذا فإن التحقق من القيمة المعادة لـ fclose عادة ما يكون مبالغة.

الخيار لك

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

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

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

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

لإنشاء ملف php في البرنامج النصي القابل للتنفيذ ، ما عليك سوى تحديد بعض الوظائف:

دعنا نفكر في مثال على الفور:

$ text = "يوجد نص هنا للكتابة إلى الملف"؛
$ fp = fopen ("file.txt"، "w")؛
fwrite ($ fp، $ text)؛
fclose ($ fp) ؛
?>

هنا يجب أن تعرف:

fopen ()- تفتح الوظيفة الملف للقراءة أو للكتابة والتحسين ؛

هذه التحسينات (معلمة الوضع لوظيفة fopen) مهمة جدًا:

  • "ص"- فتح ملف في php للقراءة فقط... يتم وضع المؤشر في البداية.
  • "ص +"- فتح ملف في php للقراءة والكتابة... يتم وضع المؤشر في البداية. !!! - مع هذين الوضعين r و r + ، يجب إنشاء الملفات بالفعل (وإلا سيظهر خطأ تحذير: fopen (file.txt): فشل في فتح الدفق: لا يوجد مثل هذا الملف أو الدليل في ...) ، ونحن نقرأ فقط أو لدينا فرصة للإضافة.
  • "ث"- يتم فتح الملف للكتابة فقط. الملف مقطوع إلى صفر طول - أي يتم الكتابة فوقه. يتم كتابة ما هو مطلوب ويوضع المؤشر في البداية.
  • "ث +"- الملف مفتوح للكتابة والقراءة! الباقي هو نفسه في الوضع" w ". !!! - مع هذين الوضعين - إذا لم يتم إنشاء الملف - حاول إنشائه!
  • "أ"- افتح الملف للكتابة فقط. على عكس" w "، لا تقوم هذه المعلمة بالكتابة فوق محتويات الملف ، ولكنها تضع المؤشر في نهاية السطر وتُلحق المحتوى الذي أردنا إضافته في النهاية.
  • "أ +- فتح ملف للكتابة والقراءة.

fwrite($ fp، $ text) - وظيفة الكتابة إلى ملف في php - أي ما هو موجود في المتغير text $ يُكتب إلى الملف ، الموجود في المتغير $ fp؛

fclose($ fp) - وظيفة إغلاق الملف التي كتبناها إلى المتغير $ fp ؛

كل الآن يمكنك إنشاء ملفات بشكل صحيح بأمان في php ، وفتحها للقراءة والتحرير.

إضافات ووظائف PHP مفيدة للعمل مع ملف مفتوح:

بينما (! feof ($ fp)) (
mytext $ = fgets ($ fp، 99)؛
صدى $ mytext. "
";
}

هنا تم استيفاء الشرط - "حتى يتم الوصول إلى نهاية الملف ، فافعل ذلك" بينما (! feof ($ fp))

1. الوظيفة يفسد($ fp، 99) - يسمح لك بتقسيم كل المحتوى إلى أقسام من 99 بايت وأكثر ، لرؤية هذا بشكل أكثر وضوحًا نضع علامة

هذه الدالة السلسلة يفسد(معالج المورد [، طول int]) بشكل افتراضي يقبل 1024 بايت (1 كيلو بايت) ، إذا لم يتم تحديده فسيكون كذلك. هذه المعلمة اختيارية منذ PHP 4.2.0 (إرجاع FALSE عند الخطأ)

وظائف إضافية لفتح وكتابة وإنشاء ملف

الوظيفة - int إقرا الملف(اسم ملف السلسلة [، منطقي use_include_path [، سياق المورد]]) - اقرأ الملف ككل.

يقرأ ملف ويكتب المحتويات في المخزن المؤقت للإخراج. وتقوم بإرجاع عدد البايتات المطبوعة. في حالة حدوث خطأ ، سيعود ، إذا لم يتم استخدام الكلب -readfile.

شيء من هذا القبيل سيظهر:

في نهاية الكلمة العلامة هي
.

ب. وظيفة - مجموعة ملف(سلسلة ملف [، int use_include_path [، Resource Context]]) تقوم بنفس وظيفة readfile ، مع استثناء واحد ، فهي تضيف محتويات الملف إلى المصفوفة:

وبالتالي ، يمكنك قراءة أي صفحات على الإنترنت: $ lines = file ("http: // site /")؛ والتكرار عبر المصفوفة من خلال وظيفة foreach ؛

3 أ. وظيفة السلسلة file_get_contents(اسم ملف السلسلة [، bool use_include_path [، Resource Context [، int offset [، int maxlen]]]] - يسمح لك بالحصول على المحتوى كسطر واحد.

إنه أكثر تنوعًا وظيفة PHPلقراءة ملف ، على غرار وظيفة الملف ، يتم إرجاع المحتوى فقط إلى سلسلة ، وليس مصفوفة ، ويمكنك تحديد الشروط - أي البايت تبدأ به - عوضوأي واحد ينتهي بـ - ماكسلين... ترجع FALSE عند الفشل.

الأهمية!!!- في هذه الحالة ، تستبدل الوظيفة 3 مرة واحدة: fopen () و fread () و fclose () وبالتالي تتخلص من الطوابع.

3 ب. دالة Int file_put_contents(اسم ملف سلسلة ، بيانات مختلطة [، إشارات int [، سياق المورد]]) - مطابق للاستدعاء المتسلسل لوظائف fopen () و fwrite () و fclose () - إرجاع عدد البايتات المكتوبة.

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

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

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

أنا. فتح ملف

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

$ fp = fopen ("counter.txt"، "r")؛

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

  1. r - فتح الملف للقراءة فقط.
  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: // المستخدم: [بريد إلكتروني محمي]"،" w ")؛ // فتح اتصال FTP باستخدام تسجيل الدخول وكلمة المرور
?>

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

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

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

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


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

fclose ($ fp) ؛
?>

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

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

echoreadfile ("counter.txt") ؛
?>

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

$ fp = fopen ("counter.txt"، "r")؛ // افتح الملف في وضع القراءة
if ($ fp) echo fpassthru ($ fp) ؛
elseecho "خطأ في فتح الملف" ؛
?>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

}
?>

ملاحظة: الوظيفة الملف موجودلا يتحقق من الملفات الموجودة على خادم الويب البعيد. ل العمل الصحيحوظائف ، يجب وضع ملف البرنامج النصي على الخادم حيث يتم فحص الملف.

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

ملفي ("counter.txt") ؛

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

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

$ myfile = tmpfile () ؛
fwrite ($ myfile، "هذا السطر مكتوب في ملف مؤقت.")؛ // اكتب إلى ملف مؤقت
fseek ($ myfile، 0) ؛ // تعيين مؤشر الملف
echo fread ($ myfile، 1024) ؛ // عرض محتويات الملف
?>

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

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

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

$ fp = fopen ("counter.txt"، "a")؛
قطيع ($ fp، LOCK_EX) ؛ // قفل الملف للكتابة
fwrite ($ fp، "String to write")؛
قطيع ($ fp، LOCK_UN) ؛ // الغاء القفل
fclose ($ fp) ؛
?>

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

عدد_الستروكا دولار = 5 ؛ // إزالة السطر 5 من الملف
ملف $ = ملف ("counter.txt") ؛ // اقرأ الملف بأكمله في مجموعة

لـ ($ i = 0 ؛ $ i< sizeof($file); $i++)
إذا لم يتم ضبط ($ i == $ num_stroka) (ملف $ [$ i]) ؛

$ fp = fopen ("counter.txt"، "w")؛
fputs ($ fp، implode (""، $ file)) ؛
fclose ($ fp) ؛
?>

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