tempnam()
En PHP, la fonction tempnam() crée un fichier temporaire avec un nom unique. Découvrez sa syntaxe, ses paramètres et comment l'utiliser efficacement.
Introduction
tempnam() crée un fichier temporaire avec un nom unique et retourne son chemin complet. Elle ne génère pas seulement un nom — elle crée réellement le fichier sur le disque (vide, avec le mode 0600), évitant ainsi toute situation où deux processus pourraient choisir le même nom. Utilisez-la chaque fois que votre script a besoin d'un espace temporaire sur le disque : mettre en mémoire tampon un téléchargement, générer un rapport avant de le diffuser, ou transmettre un chemin à une commande externe.
Ce chapitre couvre la syntaxe, la valeur de retour, l'emplacement réel du fichier, les pièges courants en production et la façon de nettoyer après utilisation.
Syntaxe
tempnam(string $directory, string $prefix): string|false| Paramètre | Description |
|---|---|
$directory | Le répertoire dans lequel le fichier doit être créé. S'il n'existe pas ou n'est pas accessible en écriture, PHP se replie sur le répertoire temporaire système (sys_get_temp_dir()). |
$prefix | Un préfixe pour le nom de fichier généré. Sur la plupart des systèmes, seuls les 63 premiers caractères sont utilisés ; sur Windows, seulement les 3 premiers. |
Valeur de retour : le chemin complet vers le fichier nouvellement créé (ex. /tmp/example_aB3xYz), ou false en cas d'échec.
Créer un fichier temporaire
<?php
$tempFile = tempnam(sys_get_temp_dir(), 'example_');
echo $tempFile;
// e.g. /tmp/example_8gKq2Psys_get_temp_dir() retourne le répertoire temporaire du système d'exploitation (/tmp sous Linux/macOS, le chemin TEMP sous Windows), ce qui est plus portable que de coder /tmp en dur.
Écrire dans le fichier et le lire
tempnam() vous donne uniquement un chemin vers un fichier vide — vous devez encore l'ouvrir pour y placer des données :
<?php
$tempFile = tempnam(sys_get_temp_dir(), 'report_');
// Write some data
file_put_contents($tempFile, "Line 1\nLine 2\n");
// Read it back
echo file_get_contents($tempFile);
// Line 1
// Line 2
// Clean up when you're done
unlink($tempFile);Comme tempnam() ne supprime pas le fichier automatiquement, supprimez-le toujours avec unlink() une fois terminé — sinon les fichiers temporaires s'accumulent.
Le comportement de repli
Si $directory n'existe pas ou n'est pas accessible en écriture, tempnam() n'échoue pas directement — elle crée silencieusement le fichier dans le répertoire temporaire système à la place. Cela signifie que le chemin retourné peut ne pas se trouver dans le répertoire demandé, donc ne supposez jamais l'emplacement :
<?php
// /no/such/dir doesn't exist
$tempFile = tempnam('/no/such/dir', 'data_');
// File is created in sys_get_temp_dir(), not /no/such/dir
echo dirname($tempFile) === sys_get_temp_dir() ? 'fell back' : $tempFile;
// fell backUtilisez toujours le chemin retourné pour les opérations suivantes plutôt que de le reconstruire à partir de $directory et $prefix.
tempnam() vs tmpfile()
Les deux créent un fichier temporaire unique, mais ils répondent à des besoins différents :
tempnam()retourne un chemin (string). Le fichier persiste jusqu'à ce que vous l'effaciez avecunlink(), et vous pouvez transmettre ce chemin à d'autres fonctions ou programmes externes.tmpfile()retourne un descripteur de fichier ouvert, et le fichier est supprimé automatiquement lorsque le descripteur est fermé ou que le script se termine. Utilisez-le quand vous avez uniquement besoin du descripteur et souhaitez un nettoyage automatique.
Utilisez tempnam() quand quelque chose d'autre a besoin du nom de fichier ; utilisez tmpfile() quand vous avez juste besoin d'un descripteur temporaire auto-nettoyant.
Pièges courants
- La fonction crée le fichier. Le fichier existe déjà (vide) après l'appel, donc vérifier
file_exists()sur le résultat sera toujours vrai. Pour détecter un échec, comparez plutôt avecfalse. - Toujours appeler unlink(). Les fichiers temporaires ne sont pas supprimés automatiquement. Associez chaque
tempnam()à ununlink(), idéalement dans un blocfinally. - Ne faites pas confiance au répertoire. En raison du repli, le fichier peut ne pas se trouver là où vous l'avez demandé. Utilisez le chemin retourné.
- Le préfixe est tronqué. Les préfixes longs sont raccourcis (3 caractères sous Windows), donc ne comptez pas sur la présence du préfixe complet dans le nom.
Conclusion
tempnam() crée de manière sûre un fichier temporaire vide avec un nom unique et retourne son chemin. Retenez qu'elle crée le fichier (pas seulement un nom), peut se replier sur le répertoire temporaire système, et ne nettoie jamais après elle-même — donc travaillez toujours avec le chemin retourné et appelez unlink() une fois terminé. Lorsque vous avez uniquement besoin d'un descripteur auto-supprimé, préférez tmpfile().