PHP读取excel中地址实现多文件下载(转)

php 1097      收藏
PHP读取excel中地址实现多文件下载

如果是单文件写个方法可以实现,但是如果想循环下载多个文件我试验是没有成功。先说单文件的下载

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);