【问题标题】:Variable PHP download-header file name?可变PHP下载头文件名?
【发布时间】:2012-03-04 01:13:43
【问题描述】:

什么是正确的语法?

header('Content-Disposition: attachment; filename="{$_SESSION['name']} . '.txt');

此文件有效,但只有在“查看源代码”时才能正常工作(HTML 未格式化但包含正确的换行符)。

<?php
header("Content-type: text/html");
session_start();
    if(file_exists("chat") && filesize("chat") > 0){
        $handle = fopen("chat", "r");
        $contents = fread($handle, filesize("chat"));
        fclose($handle);
        ob_start();
$download = strip_tags($contents, '<br>');
$processed = preg_replace('#<br\s*/?>#i', "\n", $download);
echo $processed;
$var = ob_get_clean();
echo $var;
    }
?>

$_SESSION['name'] 变量类似于guest_158512,如果您查看我要保存的页面的源代码,它会包含所有换行符。如何使用正确的语法将当前页面保存为guest_158512.txt

【问题讨论】:

  • filename="{$_SESSION['name']} . '.txt'要关闭"吗?

标签: php html header save


【解决方案1】:

您的问题是您尝试使用单引号。单引号不会在 PHP 中插入变量。

您也未能正确终止字符串,可能是由于在其中添加了更多单引号。试试:

header('Content-Disposition: attachment; filename="'.$_SESSION['name'].'.txt"');

Kolink 还 points out 建议您使用 Content-Type: text/plain 提供纯文本非 HTML 文件。

【讨论】:

  • 感谢所有发帖的人。该文件现在已正确命名,并正确保存。如果使用记事本打开文件,则不会保存任何行。但是,如果您使用 MS Word、DreamWeaver 或任何其他“应用程序”打开,则这些行会保留在那里。我不确定如何解决。编辑: \r\n 而不是 \n ?
  • @mesh Unix 行尾 (\n) 不被记事本处理,它需要 Windows 行尾 (\r\n)。
  • 我自己已经完成了这项工作,但最好将它记录在这里以供将来的用户使用。
【解决方案2】:
header("Content-Disposition: attachment; filename=\"".$_SESSION['name'].".txt\"");
header("Content-Type: text/plain");

为了将来参考,使用适当的代码编辑器(例如 Notepad++)会显示您的引号严重不匹配。

【讨论】:

    【解决方案3】:

    你已经接近了。使用单引号,您可以执行以下操作:

    header('Content-Disposition: attachment; filename="' . $_SESSION['name'] . '.txt"');
    

    【讨论】:

    • 对于带有空格的文件名,最好保留引号(当然是耦合的)。以防万一:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-05
    • 1970-01-01
    • 2011-05-22
    相关资源
    最近更新 更多