إنشاء وفتح وقراءة وكتابة وحذف والتحقق من وجود الملف في PHP. العمل مع نظام ملفات Php لقراءة المعلومات من ملف حرفًا بحرف

حول استخدام الوظائف fopen وf Close وfeof وfgets وfgetss وfscanf

دعونا قائمة كل الاحتمالات

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

طرق الفوبين التقليدية

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

القائمة 1. فتح وقراءة ملف باستخدام fgets
$file_handle = fopen("myfile", "r"); while (!feof($file_handle)) ( $line = fgets($file_handle); echo $line; ) f Close($file_handle);

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

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

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

وظيفة فوبن

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

$fh = fopen("http://127.0.0.1/", "r");

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

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

وظيفة feof

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

وظيفة fإغلاق

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

وظيفة fgets

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

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

$string = fgets($file_handle, 81);

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

وظيفة الخبز

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

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

$fh = fopen("myfile", "rb"); $data = fread($file_handle, 4096);

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

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

$fh = fopen("myfile", "rb"); $data = fread($fh, png("myfile")); فكلوز($fh);

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

وظيفة fscanf

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

قائمة ($field1, $field2, $field3) = fscanf($fh, "%s %s %s");

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

وظيفة fgets

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

القائمة 2. مثال لملف HTML
لقبي

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

دعنا نمررها عبر الدالة fgetss.

القائمة 3. استخدام fgetss
$file_handle = fopen("myfile", "r"); while (!feof($file_handle)) ( echo = fgetss($file_handle); ) f Close($file_handle);

هذا ما ستحصل عليه كإخراج:

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

وظيفة fpassthru

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

fpassthru($fh);

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

معالجة الملفات غير الخطية: التحرك عبر الملف

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

fseek($fh, 0);

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

fseek($fh, 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;

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

صدى file_get_contents("myfilename");

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

صدى file_get_contents("http://127.0.0.1/");

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

$fh = fopen("http://127.0.0.1/", "r"); fpassthru($fh);

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

قراءة الملف("http://127.0.0.1/");

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

@readfile("http://127.0.0.1/");

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

$array = Split("\n", file_get_contents("myfile"));

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

$array = file("myfile");

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

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

قائمة 4. مثال ملف .ini
; اسم التعليق = مهمة "الملك آرثر" = البحث عن الكأس المقدسة واللون المفضل = الأزرق صامويل كليمنس = مارك توين كارين جونسون = ووبي غولدبرغ

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

$file_array = parse_ini_file("holy_grail.ini"); print_r $file_array;

ستكون النتيجة الإخراج التالي:

القائمة 5. الإخراج
مصفوفة ( => الملك آرثر => للبحث عن الكأس المقدسة => الأزرق => مارك توين => ووبي غولدبرغ)

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

$file_array = parse_ini_file("holy_grail.ini", true); print_r $file_array;

وسيبدو الإخراج الخاص بك كما يلي:

القائمة 6. الإخراج
مصفوفة ( => مصفوفة ( => الملك آرثر => للبحث عن الكأس المقدسة => أزرق) => مصفوفة ( => مارك توين => ووبي غولدبرغ))

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

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

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

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

القائمة 7. استخدام file_exists وis_readable
$filename = "myfile"; إذا (file_exists($filename) && is_readable ($filename)) ( $fh = fopen($filename, "r"); # معالجة f Close($fh); )

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

إذا ($fh = fopen($filename, "r")) ( # معالجة f Close($fh); )

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

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

الخيار لك

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

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

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

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

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

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

أنا. فتح ملف

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

$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://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) تحديد نوع الملف. باستخدام الوظيفة

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

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

قم بإنشاء ملف

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

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

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

مثال:

$ourFileName = "testFile.txt";

$ourFileHandle = fopen($ourFileName, "w") أو die("لا يمكن فتح الملف");

fClose($ourFileHandle);

السطر الأول $ourFileName = testFile.txt ينشئ متغير سلسلة حيث سنقوم بتخزين اسم الملف.

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

السطر الثالث fClose($ourFileHandle) يغلق الملف. انها في الواقع بسيطة.

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

المعلمة الأولى 'r' (قراءة) - تفتح الملف للقراءة فقط، ولا يمكنك الكتابة إليه.

المعلمة الثانية "w" (الكتابة) – تفتح للكتابة. في هذه الحالة، سيبدأ التسجيل دائمًا من بداية الملف. إذا كانت هناك بالفعل بعض المعلومات هناك، فسيتم الكتابة فوقها.

المعلمة الثالثة "a" (إلحاق) - تفتح الملف للكتابة، ولكنها ستلحق بنهاية الملف، على عكس w.

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

المعلمة 'r+' - تفتح لكل من القراءة والكتابة. سيكون المؤشر في بداية الملف.

المعلمة 'w+' - تفتح للقراءة والكتابة، ولكنها تحذف كافة المعلومات الموجودة في الملف!!!

المعلمة 'a+' - تفتح للقراءة والكتابة، ولكن المؤشر سيكون في نهاية الملف.

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

fopen($ourFileName, "X")

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

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

$myFile = "testFile.txt";

$fh = fopen($myFile, "w") أو die("لا يمكن فتح الملف");

$stringData = "السطر الأول";

fwrite($fh, $stringData);

$stringData = "السطر الثاني";

fwrite($fh, $stringData);

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

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

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

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

ولكن إذا أردنا الحصول على جميع المعلومات الموجودة في الملف، فسنحتاج إلى وظيفة الملف، التي تُرجع عدد البايتات في الملف، وبالتالي، إذا تم تمرير نتيجة وظيفة الملف إلى fread، فسنقوم بذلك احصل على كافة المعلومات من الملف:

$myFile = "testFile.txt";

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

$theData = fread($fh, png($myFile));

آمل أن أوضح ذلك بوضوح.

$myFile = "testFile.txt";

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

$theData = fgets($fh);

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

$lines = file("testFile.txt");

foreach(خطوط $ كـ $single_line)

صدى $single_line . "
ن"؛

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

تحت العمل مع الملفات في 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.