Comment supprimer un fichier de mon serveur avec PHP si le fichier se trouve dans un autre répertoire?
Voici ma mise en page:
projects/backend/removeProjectData.php
(ce fichier supprime toutes mes entrées pour la base de données et devrait également supprimer le fichier associé)public_files/22.pdf
(l'endroit où se trouve le fichier.)J'utilise la fonction unlink
:
unlink('../../public_files/' . $fileName);
Mais cela me donne toujours une erreur que le fichier n'existe pas. Des idées?
Ce qui suit devrait aider
realpath
- Retourne le chemin absolu canoniqueis_writable
- Indique si le nom du fichier est en écritureunlink
- Supprime un fichierExécutez votre chemin de fichier via realpath, puis vérifiez si le chemin renvoyé est accessible en écriture et, le cas échéant, supprimez le lien.
$files = [
'./first.jpg',
'./second.jpg',
'./third.jpg'
];
foreach ($files as $file) {
if (file_exists($file)) {
unlink($file);
} else {
// File not found.
}
}
Vérifiez tout d'abord vos autorisations sur le fichier, pour vous assurer que vous pouvez a) le voir dans votre script et b) pouvoir le supprimer.
Vous pouvez également utiliser un chemin calculé à partir du répertoire dans lequel vous exécutez le script, par exemple:
unlink(dirname(__FILE__) . "/../../public_files/" . $filename);
(dans PHP 5.3 je pense que vous pouvez utiliser la constante __DIR__
au lieu de dirname()
mais je ne l'ai pas encore utilisé moi-même)
La solution AIO, gère tout, ce n'est pas mon travail mais je me suis amélioré. Prendre plaisir!
/**
* Unlink a file, which handles symlinks.
* @see https://github.com/luyadev/luya/blob/master/core/helpers/FileHelper.php
* @param string $filename The file path to the file to delete.
* @return boolean Whether the file has been removed or not.
*/
function unlinkFile ( $filename ) {
// try to force symlinks
if ( is_link ($filename) ) {
$sym = @readlink ($filename);
if ( $sym ) {
return is_writable ($filename) && @unlink ($filename);
}
}
// try to use real path
if ( realpath ($filename) && realpath ($filename) !== $filename ) {
return is_writable ($filename) && @unlink (realpath ($filename));
}
// default unlink
return is_writable ($filename) && @unlink ($filename);
}
Vous pouvez supprimer le fichier en utilisant
unlink($Your_file_path);
mais si vous supprimez un fichier de son chemin http, cette suppression de lien ne fonctionne pas correctement. Vous devez donner un chemin de fichier correct.
Je sais que cette question est un peu ancienne, mais c’est une chose simple qui me convient très bien pour supprimer des images de mon projet sur lequel je travaille.
unlink(dirname(__FILE__) . "/img/tasks/" . 'image.jpg');
La section dirname(__FILE__)
imprime le chemin de base de votre projet. Le /img/tasks/
sont deux dossiers en bas de mon chemin de base. Et enfin, il y a mon image que je veux supprimer et que vous pouvez transformer en tout ce dont vous avez besoin.
Avec cela, je n’ai eu aucun problème à accéder à mes fichiers sur mon serveur et à les supprimer.