Удаление учетной записи пользователя и всех файлов / каталогов - PullRequest
0 голосов
/ 26 марта 2012

Я занимаюсь созданием менеджера клиентов в интрасети в php и собрал следующее для удаления учетной записи клиента и каталога / файлов, связанных с этой учетной записью. Проблема, с которой я сталкиваюсь, заключается в том, что когда вы нажимаете «удалить», пользователь удаляется из базы данных MYSQL просто отлично, но по какой-то причине не удаляет каталог, что еще хуже, он также не отображает никаких ошибок, он просто работает : -S.

    <?php
    $cfid = $_GET['token'];

    mysql_query("DELETE FROM rok5g_chronoforms_data_editcustomer WHERE cf_id = $cfid") or die(mysql_error());

    $dir = '/customer-files/$cfid/';

    //Delete folder function
    function deleteDirectory($dir) {
        if (!file_exists($dir)) return true;
        if (!is_dir($dir) || is_link($dir)) return unlink($dir);
            foreach (scandir($dir) as $item) {
                if ($item == '.' || $item == '..') continue;
                if (!deleteDirectory($dir . "/" . $item)) {
                    chmod($dir . "/" . $item, 0777);
                    if (!deleteDirectory($dir . "/" . $item)) return false;
                };
            }
            return rmdir($dir);
        }


    ?>  

Ответы [ 3 ]

3 голосов
/ 26 марта 2012

Это не сработает.

$dir = '/customer-files/$cfid/';

Это должны быть двойные кавычки

$dir = "/customer-files/$cfid/";

Подробнее об этом здесь - http://www.php.net/manual/en/language.types.string.php#language.types.string.syntax.single

Примечание. На самом деле предполагается, что вы вызываете методdeleteDirectory($dir) в какой-то момент.

Также я предлагаю вам ознакомиться с SQL-инъекцией (если вы еще этого не сделали).Ваш скрипт может быть поврежден, и БД может легко повредить текущую настройку.

И используйте mysqli , если не PDO .Рекомендуется не использовать старую библиотеку mysql.

0 голосов
/ 26 марта 2012

Хорошо, в конце концов, я заработал, используя следующее >>

    <?php
    $cfid = $_GET['token'];

    mysql_query("DELETE FROM rok5g_chronoforms_data_editcustomer WHERE cf_id = $cfid") or die(mysql_error());



    define('PATH', "./customer-files/$cfid/");

    function destroy($dir) {
        $mydir = opendir($dir);
        while(false !== ($file = readdir($mydir))) {
            if($file != "." && $file != "..") {
                chmod($dir.$file, 0777);
                if(is_dir($dir.$file)) {
                    chdir('.');
                    destroy($dir.$file.'/');
                    rmdir($dir.$file) or DIE("couldn't delete $dir$file<br />");
                }
                else
                    unlink($dir.$file) or DIE("couldn't delete $dir$file<br />");
            }
        }
        closedir($mydir);
    rmdir("$dir");
    }
    destroy(PATH);
    echo 'all done.';



    ?>
0 голосов
/ 26 марта 2012

Сначала проверьте, включена ли ошибка отображения в конфигурации php.

Вторая проверка, есть ли у вашего сервера разрешения на удаление этой папки и файлов внутри нее.Если вы не можете выполнить rmdir ($ dir) из-за отсутствия разрешений chmod ($ dir. "/". $ Item, 0777);вероятно также потерпит неудачу.

...