将文件写入临时位置

时间:2012-02-15 03:09:53

标签: php

我需要将文件写为PHP脚本的一部分(带有自定义文件扩展名的XML内容),然后将文件保存到然后将其附加到我将使用PHP Mailer发送的电子邮件中。

电子邮件部分很好,但我以前从未用PHP编写过文件。该文件仅在脚本持续时间内需要,不需要永久保存。

如何将文件写入临时位置?

完成文件后是否需要清理临时位置?如果是这样,怎么样?

3 个答案:

答案 0 :(得分:19)

为了避免使用磁盘上的实际文件进行写 - 读 - 删除循环,我会使用php的内置php://tempphp://memory {将所有临时“文件”数据保存在内存中{3}}

// open a temporary file handle in memory
$tmp_handle = fopen('php://temp', 'r+');
fwrite($tmp_handle, 'my awesome text to be emailed');

// do some more stuff, then when you want the contents of your "file"
rewind($tmp_handle);
$file_contents = stream_get_contents($tmp_handle);

// clean up your temporary storage handle
fclose($tmp_handle);

您永远不必将文件写入或删除到磁盘。此外,请注意使用与该主题相关的文档中的php://tempphp://memory之间的区别:

  

php:// memory和php:// temp是允许的读写流   临时数据存储在类似文件的包装器中。唯一的   两者之间的区别在于php://内存将始终存储它   内存中的数据,而php:// temp将使用一个临时文件   存储的数据量达到预定义的限制(默认值为2 MB)。   此临时文件的位置以与以下相同的方式确定   sys_get_temp_dir()函数。

答案 1 :(得分:4)

function tmpfile - 创建临时文件

以读写(w +)模式创建具有唯一名称的临时文件,并返回文件句柄。

关闭时(使用fclose())或脚本结束时,文件会自动删除。

PHP Manual: Filesystem

答案 2 :(得分:1)

如果您只需要它以便将其附加到电子邮件中,那么您实际上不必编写该文件。只是:

$attachment=chunk_split(base64_encode($XML))
         $mime_boundary="==Multipart_Boundary_x".md5(mt_rand())."x";
         // put message body in mime boundries
            $message = "This is a multi-part message in MIME format.\n\n" .
            "--{$mime_boundary}\n" .
            "Content-Type: text/plain; charset=\"iso-8859-1\"\n" .
            "Content-Transfer-Encoding: 7bit\n\n" .
            $message . "\n\n";
         // attachment with mime
         $message .= "--{$mime_boundary}\n" .
            "Content-Type: {$type};\n" .
            " name=\"{$name}\"\n" .    
            "Content-Transfer-Encoding: base64\n\n" .
            $attachment.
            "--{$mime_boundary}--\n";
未经测试,但我之前做过类似的事情。 (我把它从用来发送自己备份的脚本中拉出来。)