如果是单文件写个方法可以实现,但是如果想循环下载多个文件我试验是没有成功。先说单文件的下载
function downfile($fileurl) {
$filenameexplode=explode('/',$fileurl);
$fileRealName=$filenameexplode[count($filenameexplode)-1];
$filename=$fileurl;
$file = fopen($filename, "rb");
Header( "Content-type: application/octet-stream ");
Header( "Accept-Ranges: bytes ");
Header( "Content-Disposition: attachment; filename= ".$fileRealName);
$contents = "";
while (!feof($file)) {
$contents .= fread($file, 8192);
}
echo $contents;
fclose($file);
}如果是多个文件,可以采用压缩下载的方式进行下载,以下代码是读取excel中文件地址并打包下载的源码
set_time_limit(0);
ini_set("max_execution_time", 0);
ini_set("memory_limit", "1G");
require_once 'Excel/PHPExcel/IOFactory.php';
$filePath ='pdforimg.xlsx';
$fileType = PHPExcel_IOFactory::identify($filePath);
$objReader = PHPExcel_IOFactory::createReader($fileType);
$objPHPExcel = $objReader->load($filePath);
//$sheet = $objPHPExcel->getSheet(0); // 读取第一個工作表
$arr = $objPHPExcel->getActiveSheet()->toArray();
foreach($arr as $k=>$v){
if($k>=2){
foreach($arr[0] as $kk=>$vv){
$isnull=str_replace(' ','',$v[0]);
if(!($isnull) || $isnull==" "){
break;
}
$data[$k-2][$arr[0][$kk]]=$v[$kk];
}
}
}
$filename = 'tmp.zip';
$zip = new ZipArchive();
$zip->open($filename, ZipArchive::OVERWRITE);
foreach ($data as $key=>$vo) {
if($key>=1000 && $key<1500){
$filenameexplode=explode('/',$vo['url']);
$fileRealName=$filenameexplode[count($filenameexplode)-1];
$fileData = file_get_contents($vo['url']);
if ($fileData) {
$zip->addFromString($fileRealName, $fileData);
}
}
}
$zip->close();
$file = fopen($filename, "r");
Header("Content-type: application/octet-stream");
Header("Accept-Ranges: bytes");
Header("Accept-Length: " . filesize($filename));
Header("Content-Disposition: attachment; filename=pdf.zip");
//一次只传输1024个字节的数据给客户端
$buffer = 1024; //
while (!feof($file)) {
//将文件读入内存
$file_data = fread($file, $buffer);
//每次向客户端回送1024个字节的数据
echo $file_data;
}
fclose($file);
unlink($filename);
宠物免费领养小程序,欢迎来踩