كيفية حذف ملف php الذي لم يتم حذفه. كيفية حذف ملف في PHP

كيفية حذف ملف php الذي لم يتم حذفه.  كيفية حذف ملف في PHP
كيفية حذف ملف php الذي لم يتم حذفه. كيفية حذف ملف في PHP

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

حذف ملف في PHP

إذا كنت بحاجة إلى حذف أي ملف، استخدم وظيفة PHP unlink():

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

اسم الملف - هنا أدخل اسم الملف الذي تريد حذفه.

لنفترض أننا بحاجة إلى حذف الملف "file.txt"، وسيكون المثال الذي يجب ملؤه كما يلي:

إلغاء الارتباط("file.txt");

كود جاهز:

إذا كان الملف "file.txt" موجودًا، فسيقوم البرنامج النصي بحذفه.

نسخ ملف في PHP

إذا كنت بحاجة إلى نسخ محتوى من ملف إلى ملف آخر، فاستخدم وظيفة PHP Copy().

نسخ ("ملف 1"، "ملف 2")؛

File1 - اسم الملف الذي سيتم نسخ النص منه
- file2 - اسم الملف الذي سيتم نسخ النص فيه

على سبيل المثال، قم بإنشاء ملف يسمى "file2.txt" على الخادم المحلي الخاص بك في المجلد "test-1". دع الملف يكون فارغا. الآن لنلصق هذا الكود نسخ ("file.txt"، "file2.txt")؛في كود PHP "file.php":

ماذا فعلنا؟ أنشئ ملفًا باسم "file.txt" عبر PHP، وقم بإدخال إدخال في الملف "file.txt" عبر PHP " أنا سعيد لرؤيتك على موقع بلوق "، وعرض النتيجة في المتصفح، ونسخ النص من الملف "file.txt" ولصقه في الملف "file2.txt". لا تصدق أن هذا حدث؟ هل تتذكر أن الملف "file2.txt" كان فارغاً؟! افتحه! وماذا ترى؟ نعم، هذا صحيح، النص الموجود في الملف "file.txt":

إعادة تسمية ملف في PHP

لإعادة تسمية ملف، استخدم وظيفة PHP rename():

إعادة تسمية ("ملف 1"، "ملف 2")؛

File1 – اسم الملف الذي يجب استبداله ( إعادة تسمية)
- file2 - هنا تحتاج إلى إعطاء اسم ملف جديد

إليك مثال لملء:

إعادة تسمية("file2..txt");

هنا هو الكود النهائي:

تمت إعادة تسمية الملف "file2.txt" إلى الملف "site.txt".

هذا هو المكان الذي أعتقد أننا يجب أن ننهي فيه درسنا. ولكن هذا ليس كل شيء، في الدرس التالي سنواصل العمل مع الملفات.

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

هذه النصيحة سوف تساعدك على تعلم كيفية القيام بذلك حذف الملف في PHPباستخدام الوظيفة إلغاء الارتباط.

تعليمات خطوة بخطوة:

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

  1. قم بإنشاء ملف نصي في محرر نصوص (vi/vim أو nano أو gedit أو مجرد برنامج Notepad قياسي).
  2. اكتب أو انسخ الكود التالي فيه:$file="example.log";
    إلغاء الارتباط(ملف $);
    ?>
  3. احفظ (على سبيل المثال، تحت اسم testunlink.php) ثم ضع ملف البرنامج النصي الذي تم إنشاؤه على خادم الويب الاختباري الخاص بك. في نفس الدليل، قم بإنشاء ملف example.log بأي محتوى. وهذا ما سوف نقوم بحذفه.
  4. قم بتشغيل البرنامج النصي عن طريق استدعائه في متصفحك، وعندما تنظر مرة أخرى إلى الدليل، ستجد أن ملف example.log لم يعد موجودًا. إلغاء الارتباطفعلت الحيلة!

كيف يعمل كل شيء:

السطر الأول من كود البرنامج النصي: نحدد نوع البرنامج النصي الخاص بنا.

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

السطر الثالث من التعليمات البرمجية: احذف ملف example.log عن طريق تمريره كوسيطة إلى وظيفة إلغاء الارتباط.

السطر الرابع من كود البرنامج النصي: نهاية كود php.

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

إلغاء ربط وظيفة PHP ()

سأبدأ بوظيفة php unlink() التي تحذف الملف:

منطقي إلغاء الارتباط(خيطاسم الملف $[، الموارد$السياق ])

هنا $filename هو المسار إلى الملف، و$context (اختياري) هو وصف لسياقات العمل مع سلاسل الرسائل (مدعوم في PHP منذ 5.0.0). ترجع الدالة TRUE عند النجاح أو FALSE عند حدوث خطأ.

مثال على استخدام الدالة unlink() في php:

$filename = "./path/to/file.txt";

لماذا تسمى هذه الوظيفة إلغاء الارتباط ()؟

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

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

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

$filename = "/2014/04/file.txt";
إذا (isset($_ENV["WINDIR"])) (
@exec("del ".$filename);
إذا (file_exists($filename)) die("خطأ في حذف الملف.");
) وإلا إذا (!(@unlink($filename)))) (
يموت("خطأ في حذف الملف.");
}

في هذه الحالة، يمكن أن يعمل متغير البيئة $_ENV["WINDIR"] علامةباستخدام نظام التشغيل Windows، ويتم التحقق من حذف الملف من خلال وظيفة PHP file_exists()، والتي تتحقق من وجود الملف.

كيفية حذف الملف (الملفات) في PHP؟

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

أحد الخيارات المثيرة للاهتمام للعمل مع مسارات الملفات هو استخدام وظائف PHP getcwd() (يحصل على اسم دليل العمل الحالي)و تشدير () (يغير الدليل الحالي إلى الدليل المحدد)، على سبيل المثال:

$file_path = "المسار/إلى";
$file_name = "/2014/04/file.txt";
$old = getcwd();
if (!(@chdir($file_path))) die("خطأ في فتح المسار.");
if (!(@unlink($file_name))) die("خطأ في حذف الملف.");
chdir($old);

كما ترون، هذا يجعل من السهل التنقل وتتبع المشكلة. وفي الوقت نفسه، سيكون من الجيد العودة إلى الدليل الحالي $old بعد إكمال الحذف.

أما بالنسبة لمشاكل الوصول، هنا يمكنك تجربة استخدام وظيفة php chmod() (يغير وضع الوصول إلى الملف)، على سبيل المثال:

$filename = "/2014/04/path/to/file.txt";
@chmod($filename, 0666);
if (!(@unlink($filename))) die("خطأ في حذف الملف.");

اذا احتجت حذف جميع الملفات في الدليلمن الملائم استخدام مجموعة من وظائف PHP array_map() (يطبق وظيفة رد الاتصال على جميع عناصر المصفوفة)والعالم () (يبحث عن مسارات الملفات المطابقة للنمط)، على سبيل المثال:

array_map("unlink", glob("some/dir/*.txt"));

حل مشكلة تعدد الخيوط عند حذف الملفات

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

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

للحصول على مورد إشارة، استخدم الدالة sem_get(). يمكن للوظيفة الحصول على إشارة ذات قيمة مختلفة عن تلك، ومن ثم يمكن لعدة سلاسل الحصول على الإشارة. يتم استخدام الدالة sem_acquire() للاكتساب. مثال:

$sem = sem_get(1);
إذا (sem_acquire($sem) && file_exists($filename)) @unlink($filename);
sem_remove($sem);

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

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

هذا كل ما لدي. آمل أن تكون مقالتي مفيدة لك أو مجرد معلومات. شكرًا لكم على اهتمامكم. حظ سعيد!

في الساعة 8:00 تحرير الرسالة

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

حذف الملفات باستخدام إلغاء ربط PHP

لإزالة الملفات، استخدم الدالة unlink(). بناء جملة هذه الوظيفة كما يلي:

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

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

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

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

حذف الملفات في PHP باستخدام إلغاء الارتباط ليس بالأمر الصعب على الإطلاق، كما يقولون، لا يتم بناء الكسر. في المرة القادمة سوف نتعلم كيفية التحقق من حالة الملفات.

تحدثنا عنها في المقال السابق، وهناك عرفتكم عليها الدالة رمدير()، الذي يحذف الدليل. ومع ذلك، قلت أنه بهذه الطريقة يمكنك فقط حذف دليل فارغ، ولكن كيفية حذف الدليل مع الملفات، سوف تكتشف الآن.

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

على الرغم من التعقيد الواضح للخوارزمية، إلا أن التنفيذ بسيط للغاية وشفاف:

وظيفة إزالة الدليل($dir) (
إذا ($objs = glob($dir."/*")) (
foreach($objs كـ $obj) (
is_dir($obj)؟ RemoveDirectory($obj) : إلغاء الارتباط($obj);
}
}
رمدير($دير);
}
?>

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

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