急!为什么用PHP header将服务器文件下载到本地内容是空的?

时间:2022-11-12 09:03:47
奇怪,服务器上好好的文件(zip,exe等等),下载下来后内容全部为空的。
请论坛的朋友帮忙。

我用的一个网站程序中download.php内容摘录如下:

<?php

header("Content-type: application/x-something");

header( "Content-Disposition: attachment; filename=\"$file\"" );

header( "Content-Description: PHP3 Generated Data" );

if( $info["path"] )
{
header("Content-Length: ". filesize( $fgal_use_dir.$info["path"] ) );
}
else
{
header("Content-Length: ". $info[ "filesize" ] );
}

header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Pragma: public\n\n\n");

if($info["path"]) {
  readfile($fgal_use_dir.$info["path"]);
} else {
  echo "$content";
}
?>

8 个解决方案

#1


header("Content-type: application/x-something")不对。

application/x-something,对于不同的类型的文件是不同的。
例如:
    $mime_types = array(
            'jpg'  => 'image/jpeg',
            'jpeg' => 'image/jpeg',
            'gif'  => 'image/gif',
            'bmp'  => 'image/bmp',
            'zip'  => 'application/zip',
            'exe'  => 'application/octet-stream',
            'gz'   => 'application/x-gzip-compressed',
            'z'    => 'application/x-compress',
            'tgz'  => 'application/x-gtar',
            'tar'  => 'application/x-tar',
            'pdf'  => 'application/pdf',

            'doc'  => 'application/msword',
            'xls'  => 'application/excel',
            'ppt'  => 'application/powerpoint',

            'swf'  => 'application/x-shockwave-flash',
            'png'  => 'image/x-png',
            'tiff' => 'image/tiff',
            'tif'  => 'image/tiff',
            'rm'   => 'application/vnd.rn-realmedia',
            'ra'   => 'application/vnd.rn-realmedia',
            'wma'  => 'audio/x-ms-wma',
            'mov'  => 'video/quicktime',
            'mpg'  => 'video/mpeg',
            'mpeg' => 'video/mpeg'
     );
    $default = 'application/octet-stream';

#2


大哥,那个地方我改过好几个,zip,octet-stream等都试过的,传下来还是内容空白文件,虽然看上去文件大小是一样的

谢谢你的回复!

#3


hahawen,我会给你分的

#4


仔细看看你的代码,好像有两种情况可以进行下载成功,但没试过:
情况1:
   $info["path"]
   $file 
   $fgal_use_dir
   这三个变量存在,并且文件存在$fgal_use_dir.$info["path"];
情况2:
   $file
   $content
   这两个变量存在,但是$info["path"]不存在

觉得怪怪的!

#5


因为原来代码有大量变量并涉及到很多其它文件,所以我贴上来时把很多不相关的部分去掉了,因为那些变量基本可以肯定没有问题。需要下载的文件事先也是通过同样的变量传上服务器去的。

#6


不知道有人试过没有:用这种方法提供下载doc文件,当直接选择打开时有些机器的word会出现该文件无法找到的错误,而有些机器却一点问题都没有??

#7


mark先,帮你up

#8


up先,高手快来

#1


header("Content-type: application/x-something")不对。

application/x-something,对于不同的类型的文件是不同的。
例如:
    $mime_types = array(
            'jpg'  => 'image/jpeg',
            'jpeg' => 'image/jpeg',
            'gif'  => 'image/gif',
            'bmp'  => 'image/bmp',
            'zip'  => 'application/zip',
            'exe'  => 'application/octet-stream',
            'gz'   => 'application/x-gzip-compressed',
            'z'    => 'application/x-compress',
            'tgz'  => 'application/x-gtar',
            'tar'  => 'application/x-tar',
            'pdf'  => 'application/pdf',

            'doc'  => 'application/msword',
            'xls'  => 'application/excel',
            'ppt'  => 'application/powerpoint',

            'swf'  => 'application/x-shockwave-flash',
            'png'  => 'image/x-png',
            'tiff' => 'image/tiff',
            'tif'  => 'image/tiff',
            'rm'   => 'application/vnd.rn-realmedia',
            'ra'   => 'application/vnd.rn-realmedia',
            'wma'  => 'audio/x-ms-wma',
            'mov'  => 'video/quicktime',
            'mpg'  => 'video/mpeg',
            'mpeg' => 'video/mpeg'
     );
    $default = 'application/octet-stream';

#2


大哥,那个地方我改过好几个,zip,octet-stream等都试过的,传下来还是内容空白文件,虽然看上去文件大小是一样的

谢谢你的回复!

#3


hahawen,我会给你分的

#4


仔细看看你的代码,好像有两种情况可以进行下载成功,但没试过:
情况1:
   $info["path"]
   $file 
   $fgal_use_dir
   这三个变量存在,并且文件存在$fgal_use_dir.$info["path"];
情况2:
   $file
   $content
   这两个变量存在,但是$info["path"]不存在

觉得怪怪的!

#5


因为原来代码有大量变量并涉及到很多其它文件,所以我贴上来时把很多不相关的部分去掉了,因为那些变量基本可以肯定没有问题。需要下载的文件事先也是通过同样的变量传上服务器去的。

#6


不知道有人试过没有:用这种方法提供下载doc文件,当直接选择打开时有些机器的word会出现该文件无法找到的错误,而有些机器却一点问题都没有??

#7


mark先,帮你up

#8


up先,高手快来