我需要将文件写为PHP脚本的一部分(带有自定义文件扩展名的XML内容),然后将文件保存到然后将其附加到我将使用PHP Mailer发送的电子邮件中。
电子邮件部分很好,但我以前从未用PHP编写过文件。该文件仅在脚本持续时间内需要,不需要永久保存。
如何将文件写入临时位置?
完成文件后是否需要清理临时位置?如果是这样,怎么样?
答案 0 :(得分:19)
为了避免使用磁盘上的实际文件进行写 - 读 - 删除循环,我会使用php的内置php://temp
和php://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://temp
和php://memory
之间的区别:
php:// memory和php:// temp是允许的读写流 临时数据存储在类似文件的包装器中。唯一的 两者之间的区别在于php://内存将始终存储它 内存中的数据,而php:// temp将使用一个临时文件 存储的数据量达到预定义的限制(默认值为2 MB)。 此临时文件的位置以与以下相同的方式确定 sys_get_temp_dir()函数。
答案 1 :(得分:4)
答案 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";
未经测试,但我之前做过类似的事情。 (我把它从用来发送自己备份的脚本中拉出来。)