用php写了一个文件下载程序,但是下载后,文件大小总是与原文件不同,代码如下:

<?php
$file_name="test.exe";

header("Content-Type:application/octet-stream");
header("Content-Disposition:attachment; filename=".$file_name);
header("Content-Length:".filesize($file_name));

readfile($file_name);

?>


后来仔细分析,好象每一次下载的总是多一个字节,用vi打开上面的程序仔细观看,发现在?>以后有一个空行,删掉这个空行,就好了。

总结:在<?php的前面以及?>的后面,一定不能有多余的东西,否则就会被当成字符被输出。但是在php代码内,空行就无所谓了。另:readfile下载2M的文件没有什么问题。(好象在什么地方见过,说是不能大于8192。)

 

header其实就是定义服务器传给客户端浏览器的参数,可以通过抓包观察来查看content-type的值。如:如果显示一个文本文件,可如下定义contend-type为text/plain(抓包可以发现此值),就能够正常显示一个文本文件。

<?php
$file_name="test.cfg";

header("Content-Type:text/plain");
header("Content-Length:".filesize($file_name));
readfile($file_name);

?>

 

posted on 2012-03-02 19:08  胡彼德  阅读(543)  评论(0)    收藏  举报