2012-06-26 67 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');