سؤال

هل كان لدى أي شخص أي خبرة في حذف __MACOSX مجلد مع PHP؟

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

ال is_dir تُرجع الدالة الخاطئة على الملف ، مما يجعل البرامج النصية للحذف العودية تفشل (لأن داخل الأرشيف هو ملفات "Temp") بحيث لا يكون الدليل فارغًا.

أنا أستخدم فئة Ziparchive المدمجة (طريقة Extractto) في PHP5.

البرنامج النصي RMDIR الذي أستخدمه هو واحد وجدته على php.net:

<?php
// ensure $dir ends with a slash
function delTree($dir) {
    $files = glob( $dir . '*', GLOB_MARK );
    foreach( $files as $file ){
        if( substr( $file, -1 ) == '/' )
            delTree( $file );
        else
            unlink( $file );
    }
    rmdir( $dir );
}
?> 
هل كانت مفيدة؟

المحلول

لقد وجدت نسخة محسنة من الوظيفة من http://www.php.net/rmdir يتطلب php5.

  • هذه الوظيفة تستخدم DIRECTORY_SEPARATOR بدلاً من /. PHP تعريف DIRECTORY_SEPARATOR كحرف مناسب لنظام التشغيل التشغيل ('/' أو '').
  • لا يحتاج موقع الدليل إلى إنهاء مائل.
  • تعود الوظيفة true أو false على الانتهاء.
function deleteDirectory($dir) {
    if (!file_exists($dir)) return true;
    if (!is_dir($dir)) return unlink($dir);
    foreach (scandir($dir) as $item) {
        if ($item == '.' || $item == '..') continue;
        if (!deleteDirectory($dir.DIRECTORY_SEPARATOR.$item)) return false;
    }
    return rmdir($dir);
}

نصائح أخرى

ما هو نظام التشغيل والنسخة التي تستخدمها؟


تحتاج إلى تصحيح المسارات إلى الدليل والملفات.

// ensure $dir ends with a slash
function delTree($dir) {

    foreach( $files as $file ){
        if( substr( $file, -1 ) == '/' )
            delTree( $dir.$file );
        else
            unlink( $dir.$file );
    }
    rmdir( $dir );
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top