سؤال

حسنًا ، ساعدني في فهم هذا.

لدي مستخدمان في نظام Linux الخاص بي كلاهما جزء من مجموعة "مستخدمي الويب".

واحد هو www-data المستخدمة من قبل خادم الويب و PHP-CGI واحد هو مستخدم FTP الخاص بي

عندما أقوم بتحميل الملفات عبر FTP ، يتم تعيينها على 775 لـ DIRS و 664 للملفات ، عندما أقوم بتشغيل برنامج نصي على الخادم (نفس المجموعة مثل مستخدم FTP) لحذف هذا الدليل والملفات: تعمل غير مرحة للملفات بشكل جيد ولكن القيادة RMDIR لا تعمل الإذن بالعودة رفضت!؟ ونعم يتم حذف الدليل بعد إفراغ.

لماذا هذا 775 يعني أن مستخدم المجموعة يمكنه حذفه تمامًا مثل 664 للملفات.

شكرًا!

هل كانت مفيدة؟

المحلول

يمكنك التحقق من permissions التابع parent يحتوي على الدليل الذي تحاول حذفه.

كنت أحذف بعض الدلائل التي تم إنشاؤها بالسيناريو في وقت سابق من هذا الأسبوع ، وحتى مع الأذونات التي تم تعيينها 777, ، ما زلت أحصل على "إذن رفض" حتى أعطيت نفسي Write الوصول إلى parent الدليل.

نصائح أخرى

واجهت نفس المشكلة من قبل ويبدو أن الكود الخاص بي أدناه:

function recurse_delete_dir($dir) {
    if ($dh = opendir($dir)) {
        while (($file = readdir($dh)) !== false) {
            if ($file != '.' && $file != '..') {
                 $child_file = $dir . $file;
                 if (is_dir($child_file)) {
                     recurse_delete_dir($child_file);
                 }
                 else {
                     unlink($child_file);
                 }
            }
        }
        rmdir($dir);
    }
}

اعتقدت نفسي أنها كانت قضية إذن ولكن اتضح أنني كنت بحاجة فقط للاتصال closedir قبل rmdir-عمل. لذا:

closedir($dh);
rmdir($dir);

ربما مشكلتك تشبه لي؟

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top