2010-08-27 3 views
2

J'essaie de supprimer tous les contenus dans un dossier spécifique, mais il ne semble pas affecter le sous-dossier mais il devrait le faire, car la commande bash le fait depuis la console.PHP exec rm -Rf ne fonctionne pas pour les sous-répertoires

system('rm -Rf some_dir/*'); 
+0

Il a probablement quelque chose à voir avec bash que l'expansion astérisque. Voulez-vous vraiment supprimer tous les fichiers en dessous de some_dir sans le supprimer? –

+3

Y at-il une raison pour laquelle vous n'utilisez pas les appels récursifs 'unlink' et/ou' rmdir'? 'system' me semble trop compliqué quand vous ne pouvez pas toujours garantir qu'il sera disponible ... – prodigitalson

+0

J'ai créé un script bash en prenant le premier argument en tant que répertoire, puis en supprimant les répertoires avec bash. –

Répondre

2

Il n'y a pas besoin d'astérisque dans cette commande. Si vous souhaitez supprimer le répertoire avec des fichiers, supprimez également la barre oblique. Laisser la barre oblique supprimera les fichiers, mais conservera le répertoire.

Vérifiez également les commentaires sur cette page: http://php.net/manual/en/function.unlink.php

1

Il est probablement parce que l'utilisateur exécutant le script ne dispose pas de privilèges pour supprimer le répertoire (s) ou la coquille est pas dans le bon répertoire.

Si vous utilisez Apache, le processus est probablement la propriété de www-data. Si le répertoire "some_dir" n'autorise pas l'accès en écriture par www-data, cela ne fonctionnera pas.

Puisque vous utilisez un chemin relatif (très dangereux), vous devez vous assurer que le script s'exécute dans le bon répertoire. Je vous suggère de changer le chemin en un absolu si vous le pouvez - "rm -rf/path/to/some_dir".

+1

Je dirais plutôt que les scripts Apache et PHP s'exécutent en tant qu'utilisateur "personne". Assurez-vous donc de "chown -R nobody: users DIRNAME". – nottinhill