web-dev-qa-db-fra.com

Comment supprimer un fichier via PHP?

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?

166
Ken

Ce qui suit devrait aider

  • realpath - Retourne le chemin absolu canonique
  • is_writable - Indique si le nom du fichier est en écriture
  • unlink - Supprime un fichier

Exé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.

212
Gordon
$files = [
    './first.jpg',
    './second.jpg',
    './third.jpg'
];

foreach ($files as $file) {
    if (file_exists($file)) {
        unlink($file);
    } else {
        // File not found.
    }
}
95
UbiQue

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)

16
richsage

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);
}
4
Junaid Atari

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.

4
ankit suthar

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.

1
Abraham A.