J'utilise PHP et je dois le script quelque chose comme ci-dessous:Supprimez les fichiers indésirables et les dossiers de dossier de destination par rapport au dossier source
Je dois comparer deux structure de dossiers et référence du dossier source Je voulez supprimer tous les fichiers/dossiers présent dans d'autres dossier de destination qui n'existent pas dans la source de référence dossier , comment pourrais-je faire cela?
ÉDITÉE:
$original = scan_dir_recursive('/var/www/html/copy2');
$mirror = scan_dir_recursive('/var/www/html/copy1');
function scan_dir_recursive($dir) {
$all_paths = array();
$new_paths = scandir($dir);
foreach ($new_paths as $path) {
if ($path == '.' || $path == '..') {
continue;
}
$path = $dir . DIRECTORY_SEPARATOR . $path;
if (is_dir($path)) {
$all_paths = array_merge($all_paths, scan_dir_recursive($path));
} else {
$all_paths[] = $path;
}
}
return $all_paths;
}
foreach($mirror as $mirr)
{
if($mirr != '.' && $mirr != '..')
{
if(!in_array($mirr, $original))
{
unlink($mirr);
// delete the file
}
}
}
Le code ci-dessus montre ce que je l'ai fait .. ici Mon dossier copy1 contient des fichiers supplémentaires que les dossiers copy2 donc je besoin de ces fichiers supplémentaires à supprimer.
ÉDITÉ: sortie Ci-dessous donné est sont des tableaux de miroir d'origine et de la différence des deux ..
Original Array
(
[0] => /var/www/html/copy2/Copy (5) of New Text Document.txt
[1] => /var/www/html/copy2/Copy of New Text Document.txt
)
Mirror Array
(
[0] => /var/www/html/copy1/Copy (2) of New Text Document.txt
[1] => /var/www/html/copy1/Copy (3) of New Text Document.txt
[2] => /var/www/html/copy1/Copy (5) of New Text Document.txt
)
Difference Array
(
[0] => /var/www/html/copy1/Copy (2) of New Text Document.txt
[1] => /var/www/html/copy1/Copy (3) of New Text Document.txt
[2] => /var/www/html/copy1/Copy (5) of New Text Document.txt
)
quand j'itérer une boucle pour supprimer le tableau de différence tous les fichiers doit être supprimé selon la sortie affichée .. comment puis-je rectifier cela .. la boucle pour la suppression est donnée ci-dessous.
$dirs_to_delete = array();
foreach ($diff_path as $path) {
if (is_dir($path)) {
$dirs_to_delete[] = $path;
} else {
unlink($path);
}
}
while ($dir = array_pop($dirs_to_delete)) {
rmdir($dir);
}
J'ai essayé d'expliquer ce qui allait mal dans mon commentaire. La nuit dernière, j'étais trop fatigué pour réparer ce que je savais qui allait mal tourner en premier lieu, désolé! Mon message est maintenant mis à jour avec une meilleure réponse. – erisco