1

我编写了一个 PHP 脚本来创建一个 .txt 制表符分隔文件。我需要将此强制下载到网络浏览器。它完成了所有这些,但是当我将文件与强制下载的源进行比较时,它包含两个额外的空白行。这是代码:

// Force download of the tab del .txt file to the web browser:

    header('Content-Type: application/download');
    header("Content-Disposition: attachment; filename=$tab_del_file");
    header("Content-Length: " . filesize($tab_del_file));

    $fp = fopen($tab_del_file, "r");
    fpassthru($fp);
    fclose($fp);

Linux Shell 命令比较两个文件并显示有多余的空行: $ diff example.txt /tmp/example.txt 25a26,27

我将下载的 example.txt sftp'ed 到 /tmp 目录,这样我就可以在服务器上进行比较。为什么在下载的版本中添加了两个空白行,修复方法是什么?谢谢!

4

3 回答 3

2

由于 php 代码本身看起来不错并且不会产生新的行,这可能只有一个原因。?>您的文件末尾有一个结束标记和额外的新行:

?>
<--- empty line
<--- empty line

注意php标签外的内容不会被PHP解析,只是转发给浏览器。

解决方案:删除结束?>标签或额外的新行。我通常更喜欢不使用?>


顺便说一句,我应该提到这一点:

$fp = fopen($tab_del_file, "r");
fpassthru($fp);
fclose($fp);

可以简化为

readfile($tab_del_file);
于 2013-05-04T09:25:29.460 回答
1

您很可能在 close 之后有一个额外的空白行?>,它与数据一起回显。?>在 PHP 文件的末尾关闭始终是可选的。将其排除在外是防止此类问题的好习惯。

于 2013-05-04T09:26:04.010 回答
1

实际上这是由于 php 关闭标签的位置造成的问题?>......

基本上,PHP 文档上的 PHP 结束标记对于?>PHP 解析器来说是可选的。因此,如果在您的脚本中使用它并且之后留下任何空格,?>则可能会导致不需要的错误或输出。我相信在你的情况下你也会犯同样的错误。

因此,出于这个原因,PHP 脚本应该省略结束标记,而应该使用注释块来标记脚本的结尾。

这是一个小例子:

不正确:

<?php

echo "Hello World!";

?>

正确的:

<?php

echo "Hello World!";

/* End of file myfile.php */
/* Location: ./system/modules/mymodule/myfile.php */ 

我希望这可以帮助你..!!

于 2013-05-04T09:38:32.193 回答