Page 1 sur 1

delete (unlink) fivhier qui ne sont pas dans une liste

Posté : 14 janv. 2011, 18:51
par jeorcal
Bonjour

j'ai des noms de fichier dans une base de données SELECT files from products
j'ai des fichiers dans un dossier products_files

Je voudrais supprimer tous les fichiers du dossier products_files qui ne sont pas dans ma table products

comment faire ? ...avec un petit exemple de code

merci

Re: delete (unlink) fivhier qui ne sont pas dans une liste

Posté : 14 janv. 2011, 19:36
par moogli
salut,

pas d'exemple de code mais l'idée

Tu sélectionne les noms de fichiers dans la table.
Tu récupère le nom de tous les fichiers du répertoire dans un tableau (aller je t'aide => glob)
lors du traitement de la requête tu vide le tableau des fichiers a partir des résultats du select
tu parcourt ce qui reste du tableau pour faire un unlink sur tous (bon attention au . et .. je sais plus si c'est retourné, et aussi au fait qu'il ne s'agisse pas de répertoire :))



@+

Re: delete (unlink) fivhier qui ne sont pas dans une liste

Posté : 14 janv. 2011, 19:49
par jeorcal
euh .. bon je vais voir :-( merci

Re: delete (unlink) fivhier qui ne sont pas dans une liste

Posté : 14 janv. 2011, 19:52
par zounounous
Tu pourrais aussi créer un nouveau dossier puis copier dedans tous les fichiers qui correspondent aux entrées de ta table.
Ensuite tu supprime l'ancien dossier.

Re: delete (unlink) fivhier qui ne sont pas dans une liste

Posté : 14 janv. 2011, 21:04
par jeorcal
avec 3 ou 4000 fichiers c'est impossible

Re: delete (unlink) fivhier qui ne sont pas dans une liste

Posté : 14 janv. 2011, 21:15
par moogli
bof avec 2 aussi c'est un peu inutile, par contre pour un aussi grand nombre il y a des change que cela prenne plus de 30s qui est le temps limite d’exécution d'un script php (par défaut).


@+

Re: delete (unlink) fivhier qui ne sont pas dans une liste

Posté : 14 janv. 2011, 21:21
par stealth35
bof avec 2 aussi c'est un peu inutile, par contre pour un aussi grand nombre il y a des change que cela prenne plus de 30s qui est le temps limite d’exécution d'un script php (par défaut).


@+
le glob est assez rapide, ca passe largement :wink:

Re: delete (unlink) fivhier qui ne sont pas dans une liste

Posté : 14 janv. 2011, 22:11
par moogli
ha, c'est plus le unlink qui "chagrine", mais ça dépend de la taille de fichier nan ?

Re: delete (unlink) fivhier qui ne sont pas dans une liste

Posté : 14 janv. 2011, 22:25
par stealth35
ha, c'est plus le unlink qui "chagrine", mais ça dépend de la taille de fichier nan ?
oui c'est vrai que celui la pourrait posé probleme

Re: delete (unlink) fivhier qui ne sont pas dans une liste

Posté : 14 janv. 2011, 22:58
par sadeq
Bonjour,

Tu peux mettre les noms des fichiers, qui se trouvent dans le disque, dans un tableau 1 et les noms des fichiers, qui se trouvent dans la base, dans un tableau 2 puis utiliser la fonction array_diff() pour déterminer la différence entre ces 2 tableaux.
Le tableau 3 résultat de cette différence contiendra forcément les noms des fichiers qui doivent être supprimés.

Extrait de la doc sur la fonction array_diff:
Exemple #1 Exemple avec array_diff()
<?php
$array1 = array("a" => "green", "red", "blue", "red");
$array2 = array("b" => "green", "yellow", "red");
$result = array_diff($array1, $array2);

print_r($result);
?>

Les valeurs multiples dans array1 seront toutes traitées de la même façon. Ce qui affichera :

Array
(
[1] => blue
)

Re: delete (unlink) fivhier qui ne sont pas dans une liste

Posté : 15 janv. 2011, 08:02
par jeorcal
Tu peux mettre les noms des fichiers, qui se trouvent dans le disque, dans un tableau 1 et les noms des fichiers, qui se trouvent dans la base, dans un tableau 2 puis utiliser la fonction array_diff() pour déterminer la différence entre ces 2 tableaux.
Le tableau 3 résultat de cette différence contiendra forcément les noms des fichiers qui doivent être supprimés.
Je vais essayer ça
merci

Re: delete (unlink) fivhier qui ne sont pas dans une liste

Posté : 15 janv. 2011, 11:03
par jeorcal
ça marche très bien et très rapide sur des milliers d'images

merci