Manchmal muss oder möchte man temporär Daten in Dateien zwischenspeichern. In einer Multiuser-Umgebung wie die eines Webservers muss man aber davon ausgehen, das dieser Programmcode mehrfach quasi gleichzeitig ausgeführt wird. Würde man nun einen fest codierten Dateinamen verwenden, wäre das Chaos vorprogrammiert, da alle Instanzen des Programmes die gleiche Datei nutzen würden.
Mit der in PHP ab Version 3 eingebauten Funktion tempnam() kann man einen garantiert eindeutigen Dateinamen, ggf. mit Pfad erzeugen lassen. So lässt sich Datensalat vermeiden.
Die Syntax der Funktion ist:
tempnam( String Verzeichnis, String Präfix);
Die Parameter werden wie folgt genutzt:
String Verzeichnis - Gibt die Pfadvorgabe für den temporären Dateinamen an.
String Präfix - Gibt den Anfang des zu erzeugenden Dateinamens an. Dies kann dazu verwendet werden, wenn man mehrere verschiedene temporäre Dateien im gleichen Programm verfwendet. Auf diese Art kann man sehen, welche Dateien erzeugt (und ggf. später nicht gelöscht) werden. Ferner bietet sich diese Verwendung an um bei Nutzung des gleichen Temp-Verzeichnisses durch verschiedene Programme diese dem PHP Script dann eindeutig zuzuordnen.
Beispiel:
<?php
/*
* Created on 24.01.2010 by Nico Schubert
*/
$verzeichnis = '.';
$prefix = 'test';
$temporaer_dateinamen = tempnam($verzeichnis,
$prefix);
echo $temporaer_dateinamen;
?>
Ausgabe unter Unix:
./testS6hhTg
Ausgabe unter Windows:
.test7Zg7d6.tmp
Erklärung:
Die Variable $verzeichnis enthält den Verweis auf das aktuelle Verzeichnis des Programms, hier ".". Die Variable $prefix wird mit "test" vorbelegt. Mit den beiden Variablen als Parameter wird die Funktion aufgerufen. Diese erzeugt aus den beiden Variablen, der Systemvorgabe (Windows/Unix) und der aktuellen Systemzeit einen eindeutigen Namen. Dieser wird als String zurückgegeben.
Hinweise:
Die Funktion tempnam() erzeugt nur einen Dateinamen. Die Datei wird nicht angelegt oder geöffnet. Weiterhin sollten sie auch einen Blick auf die PHP-Funktion tmpfile() werfen, die einen ähnlichen Bereich abdeckt.