我想在我的linux服务器上下载xxx.zip。
我从php官方网站获得了代码。网址是
http://php.net/manual/en/function.readfile.php
我设置了内容类型:application / zip。但不幸的是,在执行download.php时,我在firfox或chrome浏览器中遇到了混乱的代码。
我的linux charset和浏览器字符集都是utf-8。
这是我的download.php代码:
<?php
$file_name = "xxx.zip";
if (!file_exists ($file_name)){
echo "file is not exist";
exit();
}
else{
header('Content-Description: File Transfer');
header('Content-Type: application/zip');
header('Content-Disposition: attachment; filename="'.basename($file_name).'"');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($file_name));
readfile ($file_name);
exit;
}
?>
压缩xxx.zip代码是:
<?php
$fileArr={1.jpg,2.jpg,3.jpg};
$fpName="xxx.zip";
$zip=new ZipArchive();
$zip->open($fpName,ZipArchive::CREATE);
foreach($fileArr as $file)
{
$zip->addFile("files/".$file,basename($file));
//$zip->renameName($file,$fileChName);
}
$zip->close();
?>
但是,我可以从linux服务器下载xftp的xxx.zip文件,并在我的windows桌面上成功解压缩xxx.zip。
答案 0 :(得分:0)
$file_name = "xxx.zip";
header("Cache-Control: no-cache, must-revalidate");
header("Expires: 0");
header("Content-Disposition: attachment; filename=\"" .basename($file_name)."\"");
header("Content-Length: " . filesize($file_name));
header("Content-Type: application/zip;");
readfile($file_name);
exit;
这样可行。
答案 1 :(得分:0)
我多次使用下载文件的功能可能有用
function sendfile( $filename=null, $filepath=null ){
if( file_exists( $filepath ) ){
if( !is_file( $filepath ) or connection_status()!=0 ) return false;
header("cache-control: no-store, no-cache, must-revalidate");
header("pragma: no-cache");
header("expires: ".gmdate("d, d m y h:i:s", mktime( date("h")+2, date("i"), date("s"), date("m"), date("d"), date("y")))." gmt");
header("content-type: application/octet-stream");
header("content-length: ".(string)( filesize( $filepath ) ) );
header("content-disposition: inline; filename={$filename}");
header("content-transfer-encoding: binary\n");
if( $file = @fopen( $filepath, 'rb' ) ) {
while( !@feof( $file ) and ( connection_status()==0 ) ) {
print( fread( $file, 1024*8 ) );
flush();
}
@fclose( $file );
}
return( ( connection_status()==0 ) and !connection_aborted() );
}
}
$file_name = "xxx.zip";
if( file_exists( $file_name ) ) sendfile( 'somefile.zip', $file_name );