2012-06-26 65 views

回答

87

看來stream_get_meta_data()也適用:

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

+1實際回答問題。從PHP 5.3開始,您可以簡單地使用'stream_get_meta_data($ tmpHandle)['uri']'。 – flu

+0

$ foo()['bar']對我的PHP 5.3.13不起作用,但否則這個答案在上面提到的問題上是正確答案。 – DarkSide

+0

太棒了! sys_get_temp_dir()在舊的php 5.1服務器上不可用:( – Pete

0

sys_get_temp_dir()

將返回配置的當前目錄用於存儲.tmp文件。

至於生成的文件名,您可以使用tempnam()來使用由您/用戶輸入定義的完整名稱的文件路徑。

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

+1

乾杯,只是想要一個雙重檢查。 – Zac

+3

請注意'tempnam()'不會在腳本結束後自動刪除文件,您必須自己做。 – sp00n

+0

「文件在關閉時會自動刪除(例如,通過調用fclose(),或者當tmpfile()返回的文件句柄沒有剩餘引用時),或腳本結束時。 http://php.net/manual/en/function.tmpfile.php – Andrew

0

像這樣

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