W3docs

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|false

La 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
  • false en 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 file

Sortie :

Example data

Le 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:  no

Exemple 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,Maintainer

tmpfile() vs tempnam()

Les deux créent des fichiers temporaires, mais ils résolvent des problèmes différents :

Aspecttmpfile()tempnam()
RetourneUn handle de fichier ouvertUn nom de fichier (string)
Ouvre le fichier ?Oui (w+)Non — vous appelez fopen() vous-même
Suppression automatique ?Oui, à la fermeture / fin du scriptNon — 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() retourne false ; 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.

Pratique

Pratique
Quel est le rôle de tmpfile() en PHP ?
Quel est le rôle de tmpfile() en PHP ?
Was this page helpful?