PHP将浏览器输出保存为文件而不保存服务器上的文件

时间:2014-05-05 08:25:02

标签: php

我正在尝试创建链接以将浏览器输出保存为文件而不在服务器上创建文件。

这是我到目前为止所得到的:

<?php
ob_start();
?>

<html>
    webpage content
</html>

<?php
$page = ob_get_contents();
ob_end_flush();

$file= time().'.html';

file_put_contents($file, $page);
ob_start();
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="'.basename($file).'"');
header('Content-Length: ' . filesize($file));
ob_end_flush();
?>

<a href="<?php echo $file; ?>.php">Download output as file</a>

如何在服务器上创建这样的链接WITHOUT SAVING文件?

感谢您的建议/想法/代码。

4 个答案:

答案 0 :(得分:2)

为什么那么复杂?直接做吧:

<?php
  header('Content-Type: application/octet-stream');
  header('Content-Disposition: attachment; filename="'.time().'.html"');
?>
<html>
    webpage content
</html>

答案 1 :(得分:1)

你有两个相当简单的选择(还有其他选项,但它们会更复杂):

选项1,使用数据网址:

$pageData = base64_encode($page);
$finfo = new finfo(FILEINFO_MIME);
$pageDataMime = $finfo->buffer($page);
$pageDataURL = 'data:' . $pageDataMime .  ';base64,'.$pageData;
?>

<a href="<?php echo $pageDataURL; ?>.php">Download output as file</a>

选项2,使用查询字符串确定是否应下载输出:

if($_GET['download_data']) {
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename="'.basename($file).'"');
    header('Content-Length: ' . filesize($file));
    echo $page;
    exit();
} else {
    // Output HTML as normal, including:
    <a href="<?php echo $normalPageURL ?>?download_data=1">Download output as file</a>
}

答案 2 :(得分:0)

只需回显$ page:

<?php
ob_start();
?>

<html>
    webpage content
</html>

<?php
$page = ob_get_contents();
ob_end_flush();

$file= time().'.html';
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="'.basename($file).'"');
header('Content-Length: ' . strlen($page));
echo $page;
?>

答案 3 :(得分:-1)

打开一个像fopen('php://output', 'w');这样的文件句柄并输出到它。