php 下载的文件损坏,php – 为什么我下载的文件总是被损坏或损坏?

我的下载脚本有一个非常奇怪的问题

它基本上

1.gets a file id with “GET” method

2.gets the name and location of that file from database

3.sends it to the client with the headers and readfile

但奇怪的是,该文件总是出现损坏或损坏

比如,如果它是zip或rar文件

文件大小是正确的,它打开确定

但我不能打开它内部的压缩文件,那是我得到文件损坏的错误

这是奇怪的因为如果代码有问题我甚至不能打开zip文件(或至少我认为我不应该)

另一件事是我在发送标题之前用它的路径打印出文件,以确保一切正常

我把文件地址放在网址上并下载文件,文件没问题

所以在发送标题之前一切都很好

这是我的代码

$file_id = isset($_GET['id']) && (int)$_GET['id'] != 0 ? (int)$_GET['id'] : exit;

finging file info

$file = comon::get_all_by_condition('files' , 'id' , $file_id );

if(!$file) exit;

foreach($file as $file){

$location = $file['location'];

$filename = $file['file_name'];

}

/

$site = comon::get_site_domian();

$ext = trim(end(explode('.' , $filename )));

$abslout_path = 'http://'.$site.'/'.$location.'/'.$filename;

$relative = $location.'/'.$filename;

// content type

switch($ext) {

case 'txt':

$cType = 'text/plain';

break;

case 'pdf':

$cType = 'application/pdf';

break;

case 'zip':

$cType = 'application/zip';

break;

case 'doc':

$cType = 'application/msword';

break;

case 'xls':

$cType = 'application/vnd.ms-excel';

break;

case 'ppt':

$cType = 'application/vnd.ms-powerpoint';

break;

case 'gif':

$cType = 'image/gif';

break;

case 'png':

$cType = 'image/png';

break;

case 'jpeg':

case 'jpg':

$cType = 'image/jpg';

break;

default:

$cType = 'application/force-download';

break;

}

just checking

if(!file_exists($relative)){

echo $relative;

echo '
';

exit;

}

if( !is_readable( $relative ) )

exit('its not redable');

if( headers_sent() )

exit('headers ? already sent !! ');

header( 'Pragma: public' );

header( 'Expires: 0' );

header( 'Cache-Control: must-revalidate, post-check=0, pre-check=0' );

header( 'Cache-Control: private', false ); // required for certain browsers

header( 'Content-Description:File Transfer' );

header($_SERVER['SERVER_PROTOCOL'].' 200 OK');

header( 'Content-Type:'.$cType);

header( 'Content-Disposition: attachment; filename="'. basename($filename) . '";' );

header( 'Content-Transfer-Encoding: binary' );

header( 'Content-Length: ' . filesize($relative) );

readfile($abslout_path);

exit;

我已经检查了几次标题并且它们很好(我认为),我还添加了人类已知的每个标题以确保!

我开始认为它可能不是脚本

像char编码或文件夹权限!或类似的东西 !!

我错过了什么吗?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在线文件管理系统是一种基于php语言开发的系统,用于管理和组织用户通过网络上传、下载、删除和编辑文件的软件工具。 在线文件管理系统具有许多功能和优点。首先,它提供了一个易于使用的界面,用户可以通过登录系统进行操作,无论是个人用户还是企业用户都可以轻松管理自己的文件。其次,在线文件管理系统支持文件的多种格式,如文档、图片、视频、音频等,用户可以上传各种类型的文件,并可以方便地进行查看和编辑。此外,该系统还具有文件分类和文件搜索功能,用户可以对文件进行分类存储,并可以根据文件名或关键字进行搜索,方便用户快速找到所需的文件。 在线文件管理系统还提供了文件分享和权限管理功能。用户可以选择将文件共享给他人,可以通过生成分享链接或邀请其他用户加入系统共享文件。此外,系统还允许用户对文件进行权限设置,可以设置只读或读写权限,保护文件的安全性和隐私性。 此外,在线文件管理系统还具备高效的数据存储和备份功能。通过与数据库的连接,系统可以将用户上传的文件进行持久化存储,避免了文件丢失或损坏的风险。同时,系统还支持定期备份,保证文件数据的安全性和可靠性。 总之,基于php语言开发的在线文件管理系统具有功能强大、易于使用和安全可靠等优点,为用户提供了一个方便高效的文件管理和组织工具。无论个人用户还是企业用户,都可以通过它来实现文件的有效管理和分享。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值