2012-06-26 2 views
51

Quickie ...Pfad von tmpfile()

Gibt es eine Möglichkeit, den Pfad einer Datei von tmpfile() erstellt abzurufen?

Oder muss ich es selbst mit tempnam() tun?

Antwort

87

Es scheint stream_get_meta_data() auch funktioniert:

$tmpHandle = tmpfile(); 
$metaDatas = stream_get_meta_data($tmpHandle); 
$tmpFilename = $metaDatas['uri']; 
fclose($tmpHandle); 
+17

+1 Für die tatsächliche Beantwortung der Frage. Ab PHP 5.3 können Sie einfach 'stream_get_meta_data ($ tmpHandle) ['uri']' 'verwenden. – flu

+0

$ foo() ['bar'] funktioniert nicht auf meinem PHP 5.3.13, aber ansonsten ist diese Antwort die richtige Antwort auf Frage oben gefragt. – DarkSide

+0

Großartig! sys_get_temp_dir() nicht verfügbar auf dem alten php 5.1 Server :( – Pete

0

sys_get_temp_dir()

wird das aktuelle Verzeichnis der Konfiguration zurückkehren tmp-Dateien zu speichern.

Wie für den generierten Dateinamen würden Sie tempnam() verwenden, um einen Dateipfad zu verwenden, der mit einem Namen abgeschlossen ist, der von Ihnen/Benutzereingabe definiert wurde.

http://www.php.net/manual/en/function.sys-get-temp-dir.php

+1

Cheers, nur eine doppelte Kontrolle wollte. – Zac

+3

Beachten Sie, dass 'tempnam()' die Datei nicht automatisch löscht, wenn das Skript beendet ist. Sie müssen dies selbst tun. – sp00n

+0

"Die Datei wird automatisch geschlossen, wenn sie geschlossen wird (zum Beispiel durch Aufruf von fclose() oder wenn keine Referenzen auf das von tmpfile() zurückgegebene Datei-Handle mehr vorhanden sind oder wenn das Skript beendet wird." http://php.net/manual/en/function.tmpfile.php – Andrew

0

Gefällt Ihnen dieses

$path = array_search('uri', @array_flip(stream_get_meta_data($GLOBALS[mt_rand()]=tmpfile()))); 
file_put_contents($path, 'hello');