W3docs

tempnam()

In PHP, la funzione tempnam() crea un file temporaneo con nome univoco. Scopri sintassi, parametri, valori restituiti e buone pratiche.

Introduzione

tempnam() crea un file temporaneo con un nome univoco e restituisce il percorso completo verso di esso. Aspetto fondamentale: non si limita a generare un nome — il file viene effettivamente creato su disco (vuoto, con modalità 0600), eliminando così la possibilità che due processi scelgano lo stesso nome. Usala ogni volta che il tuo script ha bisogno di spazio temporaneo su disco: per bufferizzare un upload, generare un report prima di inviarlo in streaming, o passare un percorso a un comando esterno.

Questo capitolo tratta la sintassi, il valore restituito, dove viene effettivamente creato il file, le insidie comuni in produzione e come effettuare la pulizia al termine.

Sintassi

tempnam(string $directory, string $prefix): string|false
ParametroDescrizione
$directoryLa directory in cui creare il file. Se non esiste o non è scrivibile, PHP ricade nella directory temporanea di sistema (sys_get_temp_dir()).
$prefixUn prefisso per il nome del file generato. Nella maggior parte dei sistemi vengono usati solo i primi 63 caratteri; su Windows solo i primi 3.

Valore restituito: il percorso completo del file appena creato (ad es. /tmp/example_aB3xYz), oppure false in caso di errore.

Creazione di un file temporaneo

<?php

$tempFile = tempnam(sys_get_temp_dir(), 'example_');
echo $tempFile;
// e.g. /tmp/example_8gKq2P

sys_get_temp_dir() restituisce la directory temporanea del sistema operativo (/tmp su Linux/macOS, il percorso TEMP su Windows), risultando più portabile rispetto all'uso diretto di /tmp.

Scrittura e lettura del file

tempnam() fornisce solo un percorso a un file vuoto — dovrai aprirlo per inserirvi dei dati:

<?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);

Poiché tempnam() non elimina il file automaticamente, rimuovilo sempre con unlink() al termine — altrimenti i file temporanei si accumulano.

Il comportamento di fallback

Se $directory non esiste o non è scrivibile, tempnam() non fallisce direttamente — crea silenziosamente il file nella directory temporanea di sistema. Ciò significa che il percorso restituito potrebbe non trovarsi nella directory richiesta, quindi non dare mai per scontata la posizione:

<?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 back

Usa sempre il percorso restituito per le operazioni successive, anziché ricostruirlo da $directory e $prefix.

tempnam() vs tmpfile()

Entrambe creano un file temporaneo univoco, ma rispondono a esigenze diverse:

  • tempnam() restituisce un percorso (string). Il file persiste finché non lo elimini con unlink(), e puoi passare il percorso ad altre funzioni o programmi esterni.
  • tmpfile() restituisce un handle al file aperto, e il file viene eliminato automaticamente alla chiusura dell'handle o al termine dello script. Usala quando hai bisogno solo dell'handle e vuoi una pulizia automatica.

Scegli tempnam() quando qualcos'altro ha bisogno del nome del file; scegli tmpfile() quando hai solo bisogno di un handle temporaneo che si pulisce da solo.

Insidie comuni

  • Crea il file. Il file esiste già (vuoto) dopo la chiamata, quindi controllare file_exists() sul risultato restituisce sempre true. Per rilevare un errore, confronta invece il risultato con false.
  • Elimina sempre il file. I file temporanei non vengono rimossi automaticamente. Abbina sempre ogni tempnam() a un unlink(), idealmente in un blocco finally.
  • Non fidarti della directory. A causa del fallback, il file potrebbe non trovarsi dove hai richiesto. Usa il percorso restituito.
  • Il prefisso viene troncato. I prefissi lunghi vengono abbreviati (3 caratteri su Windows), quindi non fare affidamento sul prefisso completo nel nome del file.

Conclusione

tempnam() crea in modo sicuro un file temporaneo con nome univoco e vuoto, restituendone il percorso. Ricorda che crea il file (non solo un nome), può ricadere nella directory temporanea di sistema e non effettua mai la pulizia autonomamente — quindi lavora sempre con il percorso restituito e chiama unlink() al termine. Quando hai bisogno solo di un handle che si elimina da solo, preferisci tmpfile().

Esercizio

Pratica
Cosa fa la funzione tempnam() in PHP?
Cosa fa la funzione tempnam() in PHP?
Was this page helpful?