创建一个缺少userId的数组,以前从mysql数据库中删除

时间:2016-02-07 15:17:14

标签: php android mysql

好。我有一个充满用户的mysql数据库,他们提供了相应的信息。创建帐户时,会在用户文件夹中为其分配一个自动递增的userId和目录。在过去几个月中,许多这些行已从数据库中删除(删除了帐户)。我的问题是当从数据库中删除该行时,该用户的目录仍然存在。我现在可能有数千个永远不会被使用的用户文件夹。 我有一堆无用的目录。我遇到的问题是将删除16的差异。这种差异来自哪里?

<?php
ini_set('display_errors',1);
$pdo=new PDO('mysql://hostname=localhost;dbname=channel1_db', 'channel1_user', 'test123');
$data=$pdo->query('select user_id from accounts');
$data=$data->fetchAll(PDO::FETCH_ASSOC);
$alterIds = array();

    foreach ($data as $id) {
        $newName = "user-".$id['user_id'];
        $alterIds[] = ($newName);
    }

$idCount= count($alterIds);

$iterator = new DirectoryIterator(dirname(__FILE__));
$user_directories = array();

    foreach ($iterator as $fileinfo) {
        $user_directories[] = $fileinfo->getFilename();
    } 

array_shift($user_directories);//remove "."
array_shift($user_directories);//remove ".."
$fileCount = count($user_directories);
$diff = $fileCount-$idCount;
$useless_directories = array_diff($user_directories, $alterIds);
$uselessCount = count($useless_directories);
$unhandled = $uselessCount-$diff;

        //display totals
        echo("".$fileCount." Total Files");
        echo("<br>");
        echo("".$idCount." Total Ids");
        echo("<br>");
        echo("".$diff." projected useless");
        echo("<br>");   
        echo("".$uselessCount." Useless Files Results");
        echo("<br>");
        echo("".$unhandled." Difference between projected and results");
        echo("<br>");
        ?>

...报告 19672总文件数, 11038总Ids, 8634预计无用, 8652无用文件结果, 投影与实际之间的差异

1 个答案:

答案 0 :(得分:0)

// scan the user director
$directories = scandir('users');

// connect to the database
$mysqli = new mysqli('localhost', 'root', '', 'test');

$user_directories = array();

// get user directories
$query = 'SELECT directory FROM user';

$results = $mysqli->query($query);

// populate the array with user directories
while ($row = $results->fetch_object()) {
    $user_directories[] = $row->directory;
}

 $useless_directories = array();

// loop through the directories
foreach ($directories as $directory) {
// check is a directory is not in the user directories retrieved from the database
    if (!in_array(trim($directory), $user_directories)) {
        // check if its a directory, scandir() scanss both directories and files
        if (is_dir('users/' . $directory)) {
            // populate the useless_directories
            $useless_directories[] = $directory;
        }
    }
 }

 foreach ($useless_directories as $useless_directory) {
     // create an array of files in the directories
     $files = scandir('users/' . $useless_directory);
     foreach ($files as $file) {
         // delete any files in the directory
         unlink('users/' . $useless_directory . '/' . trim($file));
    }
    // remove the directory
    rmdir($useless_directory);
 }