好。我有一个充满用户的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无用文件结果, 投影与实际之间的差异
答案 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);
}