tmpfile()
En PHP, la fonction tmpfile() crée un fichier temporaire. Découvrez sa syntaxe, le nettoyage automatique et des exemples pratiques.
Introduction
Quand un script PHP a besoin d'un endroit pour stocker temporairement des données qui n'ont d'intérêt que le temps d'une requête — un tampon trop grand pour rester en mémoire, un CSV que vous allez envoyer au navigateur, une sortie capturée depuis une commande externe — vous faites appel à un fichier temporaire. La fonction tmpfile() vous en fournit un en un seul appel : elle crée un fichier unique dans le répertoire temporaire du système, l'ouvre en lecture et en écriture, et vous retourne un handle de fichier. Et surtout, elle fait le ménage toute seule.
Ce chapitre couvre la syntaxe, le comportement de nettoyage automatique qui rend tmpfile() particulière, quand l'utiliser plutôt que tempnam(), ainsi que plusieurs exemples exécutables incluant quelques pièges courants.
Qu'est-ce qu'un fichier temporaire ?
Un fichier temporaire est un fichier que votre programme utilise comme espace de travail provisoire et qu'il n'a pas l'intention de conserver. Il réside dans le répertoire temporaire du système d'exploitation (/tmp sur Linux/macOS, C:\Windows\Temp ou le chemin défini dans la variable d'environnement TEMP sous Windows). Comme de nombreux processus partagent ce répertoire, les fichiers temporaires ont besoin de noms uniques pour éviter que deux scripts ne se marchent dessus — tmpfile() gère cette unicité pour vous.
Comprendre la fonction tmpfile()
La fonction tmpfile() crée un fichier temporaire avec un nom unique dans le répertoire temporaire du système et l'ouvre en lecture et écriture en mode w+ (le fichier démarre vide, et vous pouvez à la fois y écrire et le relire). Elle ne prend aucun paramètre.
La fonctionnalité clé est le nettoyage automatique. Le fichier temporaire est supprimé lorsque :
- vous fermez le handle avec
fclose(), ou - le script se termine et le handle sort du contexte.
Grâce à cela, vous n'avez presque jamais besoin de supprimer le fichier vous-même. En contrepartie, tmpfile() ne vous indique pas le chemin du fichier — le handle est la seule référence que vous obtenez. Si vous avez besoin d'un nom de fichier connu que vous pouvez transmettre à un autre programme, utilisez tempnam() à la place.
Syntaxe de la fonction tmpfile()
La syntaxe de la fonction tmpfile() est la suivante :
tmpfile(): resource|falseLa fonction ne prend aucun argument et retourne :
- un handle de fichier (resource) positionné au début du fichier vide en cas de succès, ou
falseen cas d'échec — par exemple, lorsque le répertoire temporaire n'est pas accessible en écriture.
Vérifiez toujours la valeur de retour avant d'utiliser le handle, car passer false à des fonctions comme fwrite() déclenche une TypeError en PHP 8+.
Exemples d'utilisation de tmpfile()
Exemple 1 : Écriture, relecture et nettoyage automatique
Le schéma le plus courant : ouvrir un fichier temporaire, y écrire, rembobiner le pointeur et relire le contenu. Notez l'appel à rewind() — après l'écriture, le pointeur interne se trouve à la fin des données, donc sans rembobinage fread() retournerait une chaîne vide.
<?php
$handle = tmpfile();
if ($handle === false) {
die('Failed to create temporary file');
}
fwrite($handle, 'Example data');
rewind($handle); // move pointer back to the beginning
echo fread($handle, 1024); // read up to 1024 bytes
fclose($handle); // closing also deletes the fileSortie :
Example dataLe fichier est supprimé dès que fclose() s'exécute, il n'y a donc rien à nettoyer manuellement.
Exemple 2 : Retrouver le vrai chemin du fichier temporaire
Bien que tmpfile() cache le nom du fichier, vous pouvez le récupérer via les métadonnées du flux avec stream_get_meta_data(). C'est utile pour la journalisation ou le débogage — par exemple, pour confirmer que le fichier disparaît bien.
<?php
$handle = tmpfile();
$meta = stream_get_meta_data($handle);
$path = $meta['uri'];
echo 'Temp file exists before close: ';
echo file_exists($path) ? 'yes' : 'no';
echo "\n";
fclose($handle);
echo 'Temp file exists after close: ';
echo file_exists($path) ? 'yes' : 'no';
echo "\n";Sortie :
Temp file exists before close: yes
Temp file exists after close: noExemple 3 : Mise en tampon de lignes CSV avant l'envoi
Un cas d'utilisation réaliste : construire un CSV dans un fichier temporaire avec fputcsv(), puis relire l'intégralité pour le retourner ou le diffuser. Cela évite de charger de grandes quantités de données en mémoire tout en permettant de les assembler ligne par ligne.
<?php
$rows = [
['Name', 'Role'],
['Ada', 'Engineer'],
['Linus', 'Maintainer'],
];
$handle = tmpfile();
foreach ($rows as $row) {
fputcsv($handle, $row);
}
rewind($handle);
echo stream_get_contents($handle); // read everything from the pointer to EOF
fclose($handle);Sortie :
Name,Role
Ada,Engineer
Linus,Maintainertmpfile() vs tempnam()
Les deux créent des fichiers temporaires, mais ils résolvent des problèmes différents :
| Aspect | tmpfile() | tempnam() |
|---|---|---|
| Retourne | Un handle de fichier ouvert | Un nom de fichier (string) |
| Ouvre le fichier ? | Oui (w+) | Non — vous appelez fopen() vous-même |
| Suppression automatique ? | Oui, à la fermeture / fin du script | Non — vous devez appeler unlink() |
| Vous connaissez le chemin ? | Uniquement via stream_get_meta_data() | Oui, directement |
Règle générale : utilisez tmpfile() pour des données de travail autonomes dans un seul script ; utilisez tempnam() lorsque vous avez besoin d'un fichier nommé à transmettre à un autre processus ou à conserver après la requête.
Pièges courants
- Oublier
rewind(). Après l'écriture, le pointeur est à la fin. Lire sans rembobiner ne retourne rien. - Ne pas vérifier la valeur de retour. Sur un répertoire temporaire en lecture seule,
tmpfile()retournefalse; protégez-vous toujours contre ce cas. - S'attendre à ce que le fichier persiste. Une fois le handle fermé, le fichier est supprimé — copiez les données (avec
fopen()vers un chemin permanent,file_put_contents(), etc.) si vous avez besoin de les conserver.
Conclusion
La fonction tmpfile() est la manière la plus simple d'obtenir un fichier de travail privé et à nettoyage automatique en PHP. Elle vous fournit un handle en lecture-écriture, place le fichier de façon sûre dans le répertoire temporaire du système, et le supprime dès que vous fermez le handle ou que le script se termine — aucune maintenance manuelle requise. Utilisez-la chaque fois que vous avez besoin d'un stockage éphémère sans vous soucier du nom de fichier ; utilisez tempnam() dans le cas contraire.