如何获取临时文件路径?

tra*_*sis 22 php temporary-files

我知道你可以使用tmpfile创建一个临时文件而不是写入它,并在不再需要它时关闭它.但我遇到的问题是我需要这样的文件的绝对路径:

"/var/www/html/lolo/myfile.xml"
Run Code Online (Sandbox Code Playgroud)

即使有其他功能或技巧,我能以某种方式获得路径吗?

编辑:

我希望能够从数据库中下载文件,但没有

$fh = fopen("/var/www/html/myfile.xml", 'w') or die("no no");
fwrite($fh, $fileData);
fclose($fh); 
Run Code Online (Sandbox Code Playgroud)

因为如果我这样做,如果有更多人尝试在同一时间下载同一个文件,则有可能重叠.还是我错了?

EDIT2:

也许我可以生成这样的唯一(uniqID)文件名,而不是删除它们.或者,如果有很多人下载,这对服务器来说太费劲了吗?

leg*_*ing 35

有很多方法可以实现这一点,这里有一个

<?php 
// Create a temp file in the temporary 
// files directory using sys_get_temp_dir()
$temp_file = tempnam(sys_get_temp_dir(), 'MyFileName');
echo $temp_file;
?>
Run Code Online (Sandbox Code Playgroud)

上面的示例将输出类似于:/var/tmp/MyFileNameX322.tmp的内容

  • 如果我最后没有取消链接,临时文件是否应该保留? (2认同)

sti*_*g_1 6

我知道你可以使用tmpfile创建一个临时文件

这是一个好的开始,这样的事情会做:

$fileHandleResource = tmpfile();
Run Code Online (Sandbox Code Playgroud)

即使有其他功能或技巧,我能以某种方式获得路径吗?

是:

$metaData = stream_get_meta_data($fileHandleResource);
$filepath = $metaData['uri'];
Run Code Online (Sandbox Code Playgroud)

这种方法的好处是可以让PHP为这个临时文件选择一个好位置和名称,这可能最终成为一件好事或一件坏事,具体取决于您的需求.但是,如果您还没有特定的理由选择自己的目录和文件名,这是最简单的方法.

参考文献:

http://us.php.net/manual/en/function.stream-get-meta-data.php

使用文件句柄获取文件名(或删除文件)


tra*_*sis 4

对于较新(不是很新哈哈)版本的 PHP(需要 php 5.2.1 或更高版本)@whik 的答案更适合:

<?php 
// Create a temp file in the temporary 
// files directory using sys_get_temp_dir()
$temp_file = tempnam(sys_get_temp_dir(), 'MyFileName');
echo $temp_file;
?>
Run Code Online (Sandbox Code Playgroud)

上面的示例将输出类似以下内容:/var/tmp/MyFileNameX322.tmp

旧答案

以防万一有人遇到完全相同的问题。我最终做了

$fh = fopen($filepath, 'w') or die("Can't open file $name for writing temporary stuff.");
fwrite($fh, $fileData);
fclose($fh);
Run Code Online (Sandbox Code Playgroud)

unlink($filepath); 
Run Code Online (Sandbox Code Playgroud)

最后当不再需要文件时。

在此之前,我生成了这样的文件名:

$r = rand();        
$filepath = "/var/www/html/someDirectory/$name.$r.xml";
Run Code Online (Sandbox Code Playgroud)