本版
查看: 10422|回复: 0

[水] php解压缩文件方法汇总

[复制链接]

Super Moderator

楼主(1#)
发表于 2013-6-29 12:25:09 | 只看该作者 |只看大图 |倒序浏览 |阅读模式
一 使用内部扩展实现(>=php5)
  1. function unzip_file($file, $destination){
    // create object
    $zip = new ZipArchive() ;
    // open archive
    if ($zip->open($file) !== TRUE) {
    die ('Could not open archive');
    }
    // extract contents to destination directory
    $zip->extractTo($destination);
    // close archive
    $zip->close();
    echo 'Archive extracted to directory';
    }
    unzip_file('./a.zip','bs');
二 不使用组件 完全使用php内部函数
解压代码:
  1. public function ExtractFile($header,$to,$zip) {
    $header = $this->readfileheader($zip);

    if (substr($to,-1)!="/") $to.="/";
    if ($to=='./') $to = '';
    $pth = explode("/",$to.$header['filename']);
    $mydir = '';
    for($i=0;$i<count($pth)-1;$i++) {
    if (!$pth[$i]) continue;
    $mydir .= $pth[$i]."/";
    if ((!is_dir($mydir) && @mkdir($mydir,0777)) || (($mydir==$to.$header['filename'] || ($mydir==$to && $this->total_folders==0)) && is_dir($mydir)) ) {
    @chmod($mydir,0777);
    $this->total_folders ++;
    echo 'Extract : ',$mydir,'<br>';
    }
    }

    if (strrchr($header['filename'],'/')=='/') return;
    if (!($header['external']==0x41FF0010)&&!($header['external']==16)) {
    if ($header['compression']==0) {
    $fp = @fopen($to.$header['filename'], 'wb');
    if (!$fp) return(-1);
    $size = $header['compressed_size'];
    while ($size != 0) {
    $read_size = ($size < 2048 ? $size : 2048);
    $buffer = fread($zip, $read_size);
    $binary_data = pack('a'.$read_size, $buffer);
    @fwrite($fp, $binary_data, $read_size);
    $size -= $read_size;
    }
    fclose($fp);
    touch($to.$header['filename'], $header['mtime']);
    } else {
    $fp = @fopen($to.$header['filename'].'.gz','wb');
    if (!$fp) return(-1);
    $binary_data = pack('va1a1Va1a1', 0x8b1f, Chr($header['compression']),
    Chr(0x00), time(), Chr(0x00), Chr(3));

    fwrite($fp, $binary_data, 10);
    $size = $header['compressed_size'];

    while ($size != 0) {
    $read_size = ($size < 1024 ? $size : 1024);
    $buffer = fread($zip, $read_size);
    $binary_data = pack('a'.$read_size, $buffer);
    @fwrite($fp, $binary_data, $read_size);
    $size -= $read_size;
    }

    $binary_data = pack('VV', $header['crc'], $header['size']);
    fwrite($fp, $binary_data,8); fclose($fp);

    $gzp = @gzopen($to.$header['filename'].'.gz','rb') or die("Cette archive est compress")
三 执行外部命令
① exec("tar -zxvf xxx.tar.gz");
② system("tar -zxvf xxx.tar.gz")
③ $obj=new com("wscript.shell");//加载组件 获得解压
$obj->run("winrar x $dir".$name." ".$dir ,1,true);//上传解压文件
// unlink($dir.$name);//删除文件


回复

支持 | 反对  0 支持 / 0 反对 评分 举报

联系我们(Contact)|手机版|萝卜头IT论坛 ( 苏ICP备15050961号-1 )

GMT+8, 2026-11-04 11:37 , Processed in 0.07 second(s), 20 queries , Gzip On.

快速回复 返回顶部 返回列表