ホームページ  >  記事  >  バックエンド開発  >  PHP パッケージの Web サイトをオンラインで zip に圧縮

PHP パッケージの Web サイトをオンラインで zip に圧縮

WBOY
WBOYオリジナル
2016-07-23 08:54:51852ブラウズ
  1. ?//在URL後参加?pwd=密码查看生成密码
  2. $password = '8baa717e6265d1c1d762cc896151f821'; //l23
  3. ?>
  4. php ZIP压缩程序
  5. 在線上压缩ZIP文件程序


  6. 使用方法: 圧縮するファイルまたは項目 (子項目を含む) を選択すると、圧縮の結果、元の項目構造が維持されます。

  7. echo '当前目录:'. dirname(__FILE__) . ' 退出';
  8. else
  9. if(isset($_GET['pwd']) )
  10. echo '密码值:'. md5($_GET['pwd']) . '';
  11. else
  12. echo 'Tips:在URL后参加?pwd=密码 查看生成密码.';
  13. ?>
  • if(!isset($_REQUEST["myaction"])):
  • ?>
  • < ;td>
  • 验证密码:
  • elseif($_REQUEST["myaction"]=="dolist") :
  • if(!isset($_REQUEST['pwd']) || empty($_REQUEST['pwd']) )
  • die('请输入密码! また');
  • if(md5($_REQUEST['pwd']) != $password)
  • die('输入的密码不正确!Again');
  • echo '除外するディレクトリを選択します (カンマで区切られた相対パス):
    ';
  • echo '
    ';
  • echo "圧縮するファイルを選択してくださいまたはディレクトリ:
    ";
  • $fdir = opendir('./');
  • while($file=readdir($fdir)){
  • if($file=='.'|| $file =='..' ) 続行;
  • echo " ";
  • if(is_file($file)){
  • echo "ファイル: $file
    ";
  • }else{
  • echo "ディレクトリ: $file
    ";
  • }
  • }
  • ?>

  • 圧縮ファイルをディレクトリに保存します:
  • (このディレクトリは空白のままにしてください。書き込みが必要です)許可)
  • 圧縮ファイル名:
  • (.zip)

  • elseif($_REQUEST["myaction"]==" dozip" ):
  • // set_time_limit(0);
  • class PHPzip{
  • var $file_count = 0;
  • var $datastr_len = 0;
  • var $dirstr_len = 0;
  • var $filedata = ''; //この変数はクラス外のプログラムによってのみアクセスされます
  • var $gzfilename;
  • var $fp;
  • var $dirstr='';
  • /*
  • ファイルの変更時の形式を返します。
  • このクラスの内部関数に対してのみ呼び出されます。
  • */
  • function unix2DosTime ($unixtime = 0) {
  • $timearray = ($unixtime == 0) ? getdate() : getdate($unixtime);
  • if ($timearray['year'] < 1980) {
  • $timearray[' year'] = 1980;
  • $timearray['mon'] = 1;
  • $timearray['mday'] = 1;
  • $timearray['hours'] = 0;
  • $timearray['分'] = 0;
  • $timearray['年'] = 0;
  • }
  • return (($timearray['年'] - 1980) << 25) ($timearray['mon'] <) ;< 21) | ($timearray['mday'] <16) |
  • ($timearray['hours'] <11) | ) | ($timearray[ '秒'] >> 1);
  • }
  • /*
  • ファイルを初期化し、ファイル ディレクトリを作成し、
  • ファイルの書き込み権限を返します。
  • */
  • function startfile( $path = 'myzip.zip') {
  • $this->gzfilename=$path;
  • $mypathdir=array();
  • do{
  • $mypathdir[] = $path = dirname($path);
  • }while ($path != '.') ;
  • @end($mypathdir);
  • do{
  • $path = @current($mypathdir);
  • @mkdir($path);
  • }while(@prev($mypathdir) );
  • if($this->fp=@fopen($this->gzfilename,"w")){
  • return true;
  • }
  • return false;
  • }
  • /*
  • zip アーカイブにファイルを追加します。
  • */
  • function addfile($data, $name){
  • $name = str_replace('\', '/', $name);
  • if( strrchr ($name,'/')=='/') return $this->adddir($name);
  • $dtime = dechex($this->unix2DosTime());
  • $hexdtime = 'x ' . $dtime[6] . $dtime[4] . 'x ' . $dtime[0] . $dtime[1];
  • eval('$hexdtime = "' . $hexdtime . '";');
  • $unc_len = strlen($data);
  • $crc = crc32 ( $data);
  • $zdata = gzcompress($data);
  • $c_len = strlen($zdata);
  • $zdata = substr(substr($zdata, 0, strlen($zdata) - 4), 2);
  • //新しいファイルコンテンツのフォーマット:
  • $datastr = "x50x4bx03x04";
  • $datastr .= "x14x00"; // 抽出するために必要なバージョン $datastr .= "x00x00"; // 生成目的ビットフラグ
  • $datastr . = "x08x00"; // 圧縮方法
  • $datastr .= $hexdtime; // 最終更新日時
  • $datastr .= Pack('V', $crc) // crc32
  • $datastr .= Pack(' V', $c_len); // 圧縮ファイルサイズ
  • $datastr .= Pack('V', $unc_len) // 非圧縮ファイルサイズ
  • $datastr .= Pack('v', strlen($name));ファイル名の長さ
  • $datastr .= Pack('v', 0); // 追加フィールド長
  • $datastr .= $name;
  • $datastr .= $zdata;
  • $datastr .= Pack('V ', $ crc); // crc32
  • $datastr .= Pack('V', $c_len); // 圧縮ファイルサイズ
  • $datastr .= Pack('V', $unc_len) // 非圧縮ファイルサイズ
  • ; this->fp,$datastr); //新しいファイルの内容を書き込みます
  • $my_datastr_len = strlen($datastr);
  • unset($datastr);
  • //新しいファイルのディレクトリ情報を追加します
  • $dirstr = "x50x4bx01x02";
  • $dirstr .= "x00x00"; // 作成したバージョン
  • $dirstr .= "x14x00"; // 抽出するために必要なバージョン $dirstr .= "x00x00"; // 生成目的のビットフラグ
  • $dirstr .= " x08x00"; // 圧縮方式
  • $dirstr .= $hexdtime; // 最終更新日時
  • $dirstr .= Pack('V', $crc); // crc32
  • $dirstr .= Pack('V' , $c_len); // 圧縮されたファイルサイズ
  • $dirstr .= Pack('V', $unc_len) // 非圧縮ファイルサイズ
  • $dirstr .= Pack('v', strlen($name) );ファイル名
  • $dirstr .= Pack('v', 0 ); // 追加のフィールド長
  • $dirstr .= Pack('v', 0 ); // ファイルコメントの長さ
  • $dirstr .= Pack ('v', 0 ); // ディスク番号 start
  • $dirstr .= Pack('v', 0 ); // 内部ファイル属性
  • $dirstr .= Pack('V', 32 ); // 外部ファイル属性 - 'archive' bit set
  • $dirstr .= Pack('V',$this->datastr_len ); // ローカルヘッダーの相対オフセット
  • $name;
  • $this->dirstr . / /ディレクトリ情報
  • $this -> file_count ++;
  • $this -> dirstr_len += strlen($dirstr);
  • $this -> datastr_len += $my_datastr_len;
  • }
  • function adddir($name) ){
  • $name = str_replace("\", "/", $name);
  • $datastr = "x50x4bx03x04x0ax00x00x00x00x00x00x00x00x00";
  • $datastr .= Pack("V",0).pack( "V",0 ).pack("V",0).pack("v", strlen($name) );
  • $datastr .= Pack("v", 0 ).$name.pack("V ", 0). Pack("V", 0).pack("V", 0);
  • fwrite($this->fp,$datastr); // 新しいファイルの内容を書き込みます
  • $my_datastr_len = strlen($datastr);
  • unset($datastr);
  • $dirstr = "x50x4bx01x02x00x00x0ax00x00x00x00x00x00x00x00x00";
  • $dirstr .= Pack("V",0).pack("V",0).pack("V" ,0).pack(" v", strlen($name) );
  • $dirstr .= Pack("v", 0 ).pack("v", 0 ).pack("v", 0 ).pack ("v", 0 ) ;
  • $dirstr .= Pack("V", 16 ).pack("V",$this->datastr_len).$name;
  • $this->dirstr .= $ dirstr; //ディレクトリ情報
  • $this -> file_count ++;
  • $this -> dirstr_len += strlen($dirstr);
  • $this -> datastr_len += $my_datastr_len;
  • }
  • function createfile(){
  • //ファイルの総数、ディレクトリ情報読み取りポインター位置およびその他の情報を含む、圧縮されたパッケージの終了情報
  • $endstr = "x50x4bx05x06x00x00x00x00" .
  • Pack('v', $this -> file_count) .
  • Pack('v', $this -> file_count) .
  • Pack('V', $this -> dirstr_len) .
  • Pack('V', $this -> datastr_len) .
  • " x00x00" ;
  • fwrite($this->fp,$this->dirstr.$endstr);
  • fclose($this->fp);
  • }
  • }
  • if(!trim($_REQUEST) [' zipname']))
  • $_REQUEST['zipname'] = 'backup_'.substr(md5(__FILE__),0,8). '.zip';
  • else
  • $_REQUEST['zipname'] = trim( $_REQUEST ['zipname']);
  • if(!strrchr(strto lower($_REQUEST['zipname']),'.')=='.zip')
  • $_REQUEST['zipname'] .= ".zip ";
  • $_REQUEST['todir'] = str_replace('\','/',trim($_REQUEST['todir']));
  • if(!strrchr(strto lower($_REQUEST['todir']), '/ ')=='/')
  • $_REQUEST['todir'] .= "/";
  • if($_REQUEST['todir']=="/")
  • $_REQUEST['todir'] = " ./ ";
  • function listfiles($dir="."){
  • global $faisunZIP;
  • $sub_file_num = 0;
  • if(is_file($dir)){
  • if(realpath($faisunZIP->gzfilename) )! =realpath($dir)){
  • $faisunZIP -> addfile(implode('',file($dir)),$dir);
  • return 1;
  • }
  • return 0;
  • }
  • $handle =opendir ($dir);
  • //除外を追加します
  • $to_exlude = !empty($_POST['toexlude']) ? $_POST['toexlude'] :'';
  • $exlude = empty($to_exlude) ? () :explode(',',$to_exlude);
  • while ($file = readdir($handle)) {
  • if($file=="."||$file==".." || $file == 'wp-content' )Continue;
  • if(is_dir("$dir/$file") && !in_array("$dir/$file",$exlude) )
  • {
  • $sub_file_num += listfiles("$ dir/ $file");
  • }
  • else {
  • if(realpath($faisunZIP ->gzfilename)!=realpath("$dir/$file")){
  • $faisunZIP -> addfile(implode('') ,file ("$dir/$file")),"$dir/$file");
  • $sub_file_num ++;
  • }
  • }
  • }
  • Closedir($handle);
  • if(!$sub_file_num) $faisunZIP -> ; addfile("","$dir/");
  • return $sub_file_num;
  • }
  • function num_bitunit($num){
  • $bitunit=array(' B',' KB',' MB',' GB' );
  • for($key=0;$key if($num>=pow(2,10*$key)-1){ //1023B になります1KB として表示されます
  • $num_bitunit_str=(ceil($num/pow(2,10*$key)*100)/100)." $bitunit[$key]";
  • }
  • }
  • return $num_bitunit_str;
  • }
  • if( is_array($_REQUEST['dfile'])){
  • $faisunZIP = new PHPzip;
  • if($faisunZIP -> startfile($_REQUEST['todir'].$_REQUEST['zipname'])){
  • echo " 圧縮ファイルを追加しています...

    ";
  • $filenum = 0;
  • foreach($_REQUEST['dfile'] as $file){
  • if(is_file($file)){
  • echo "ファイル: $file
    ";
  • }else{
  • echo "ディレクトリ: $file
    ";
  • }
  • $ filenum += listfiles($file);
  • }
  • $faisunZIP -> createfile();
  • echo "
    圧縮が完了しました。合計 $filenum ファイルが追加されました。
    ". $_REQUEST['todir'].$_REQUEST['zipname'] (".num_bitunit(filesize( "$ _REQUEST[todir]$_REQUEST[zipname]")).")";
  • }else{
  • echo $_REQUEST['todir'].$_REQUEST['zipname'].'書き込めません、パスまたは権限が正しいかどうかを確認してください。
    ';
  • }
  • }else{
  • echo "ファイルまたはディレクトリが選択されていません。
    ";
  • }
  • endif;
  • ?>
  • < /form>
  • コードをコピーします


    php、zip


    声明:
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。