PHP:为什么这个强制mime下载会添加两个额外的空行?
我编写了一个PHP脚本来创建一个以.txt制表符分隔的文件。我需要将此文件强制下载到web浏览器。它完成了所有这些,但是当我将文件与源文件进行比较时,强制下载的文件包含两个额外的空行。代码如下:PHP:为什么这个强制mime下载会添加两个额外的空行?,php,mime,Php,Mime,我编写了一个PHP脚本来创建一个以.txt制表符分隔的文件。我需要将此文件强制下载到web浏览器。它完成了所有这些,但是当我将文件与源文件进行比较时,强制下载的文件包含两个额外的空行。代码如下: // Force download of the tab del .txt file to the web browser: header('Content-Type: application/download'); header("Content-Disposition: attac
// 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下载到/tmp目录中,这样我就可以在服务器上进行区分。为什么要在下载的版本中添加两个空行?修复方法是什么?谢谢
由于php代码本身看起来还可以,并且不会产生新的代码行,这可能只有一个原因。您的文件末尾有一个结束标记和额外的新行:
?>
<--- empty line
<--- empty line
可以简化为
readfile($tab_del_file);
由于php代码本身看起来还可以,并且不会产生新的代码行,这可能只有一个原因。您的文件末尾有一个结束标记和额外的新行:
?>
<--- empty line
<--- empty line
可以简化为
readfile($tab_del_file);
您很可能在结束
?>
后有一个额外的空行,该空行将与数据一起回显。在PHP文件的末尾,关闭?>
始终是可选的。省去它是防止此类问题的一个很好的做法。您很可能在结束?>
后有一个额外的空行,该空行与数据相呼应。在PHP文件的末尾,关闭?>
始终是可选的。省略它是防止此类问题的一个好方法。实际上,这是由于php结束标记的位置造成的问题<代码>?>
基本上,PHP文档?>
上的PHP结束标记对于PHP解析器来说是可选的。因此,如果在脚本中使用它,并且在?>
之后留下任何空格,则可能会导致不必要的错误或输出。我相信在你的情况下,你也会犯同样的错误
因此,PHP脚本应该省略结束标记,而应该使用注释块来标记脚本的结束
下面是一个小例子:
不正确:
<?php
echo "Hello World!";
?>
<?php
echo "Hello World!";
/* End of file myfile.php */
/* Location: ./system/modules/mymodule/myfile.php */
正确:
<?php
echo "Hello World!";
?>
<?php
echo "Hello World!";
/* End of file myfile.php */
/* Location: ./system/modules/mymodule/myfile.php */
实际上,这是由于php结束标记的位置造成的问题<代码>?>
基本上,PHP文档?>
上的PHP结束标记对于PHP解析器来说是可选的。因此,如果在脚本中使用它,并且在?>
之后留下任何空格,则可能会导致不必要的错误或输出。我相信在你的情况下,你也会犯同样的错误
因此,PHP脚本应该省略结束标记,而应该使用注释块来标记脚本的结束
下面是一个小例子:
不正确:
<?php
echo "Hello World!";
?>
<?php
echo "Hello World!";
/* End of file myfile.php */
/* Location: ./system/modules/mymodule/myfile.php */
正确:
<?php
echo "Hello World!";
?>
<?php
echo "Hello World!";
/* End of file myfile.php */
/* Location: ./system/modules/mymodule/myfile.php */
您的php文件中是否有结束标记?>
我不是php中的profi,但我认为$diff example.txt tmp/example.txt 25a26,27>
是错误的syntax@Edward检查我的答案;)@hek2mgl。谢谢我以为你问是因为如果我没有一个?>它可能会导致问题。但我现在明白了,这是这个问题的真正原因。@AlexRuhl,那不是PHP。这是命令。OP用它来演示输出中有两个额外的新行。您的php文件中有结束标记吗?我不是php的专家,但我认为$diff example.txt tmp/example.txt 25a26,27>
是错误的syntax@Edward检查我的答案;)@hek2mgl。谢谢我以为你问是因为如果我没有一个?>它可能会导致问题。但我现在明白了,这是这个问题的真正原因。@AlexRuhl,那不是PHP。这是命令。OP用它来演示输出中有两个额外的新行。我在末尾有一个?>。我删除了它,这已经解决了问题。这很有帮助。我学到了两件事。“?>是可选的,当执行类似的MIME强制下载时,在最后一行代码之后的PHP代码中没有任何内容。谢谢最后我有一个。我删除了它,这已经解决了问题。这很有帮助。我学到了两件事。“?>是可选的,当执行类似的MIME强制下载时,在最后一行代码之后的PHP代码中没有任何内容。谢谢还感谢readfile示例。我更改了代码,这也有效!还感谢readfile示例。我更改了代码,这也有效!谢谢这也很有帮助!谢谢这也很有帮助!