Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP:为什么这个强制mime下载会添加两个额外的空行?_Php_Mime - Fatal编程技术网

PHP:为什么这个强制mime下载会添加两个额外的空行?

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

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

// 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示例。我更改了代码,这也有效!谢谢这也很有帮助!谢谢这也很有帮助!