Inhaltsverzeichnis
在线压缩ZIP文件程序
Heim Backend-Entwicklung PHP-Tutorial php 打包网站在线压缩为zip

php 打包网站在线压缩为zip

Jul 23, 2016 am 08:54 AM

  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"])):
  • ?>
  • 验证密码:
  • elseif($_REQUEST["myaction"]=="dolist"):
  • if(!isset($_REQUEST['pwd']) || empty($_REQUEST['pwd']) )
  • die('请输入密码! Again');
  • if(md5($_REQUEST['pwd']) != $password)
  • die('输入的密码不正确!Again');
  • echo '选择要排除的目录(相对路径,以英文半角逗号分隔):
    ';
  • echo '
    ';
  • echo "选择要压缩的文件或目录:
    ";
  • $fdir = opendir('./');
  • while($file=readdir($fdir)){
  • if($file=='.'|| $file=='..' ) continue;
  • 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'] $timearray['year'] = 1980;
  • $timearray['mon'] = 1;
  • $timearray['mday'] = 1;
  • $timearray['hours'] = 0;
  • $timearray['minutes'] = 0;
  • $timearray['seconds'] = 0;
  • }
  • return (($timearray['year'] - 1980) ($timearray['hours'] > 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[7]
  • . '\x' . $dtime[4] . $dtime[5]
  • . '\x' . $dtime[2] . $dtime[3]
  • . '\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 = "\x50\x4b\x03\x04";
  • $datastr .= "\x14\x00"; // ver needed to extract
  • $datastr .= "\x00\x00"; // gen purpose bit flag
  • $datastr .= "\x08\x00"; // compression method
  • $datastr .= $hexdtime; // last mod time and date
  • $datastr .= pack('V', $crc); // crc32
  • $datastr .= pack('V', $c_len); // compressed filesize
  • $datastr .= pack('V', $unc_len); // uncompressed filesize
  • $datastr .= pack('v', strlen($name)); // length of filename
  • $datastr .= pack('v', 0); // extra field length
  • $datastr .= $name;
  • $datastr .= $zdata;
  • $datastr .= pack('V', $crc); // crc32
  • $datastr .= pack('V', $c_len); // compressed filesize
  • $datastr .= pack('V', $unc_len); // uncompressed filesize
  • fwrite($this->fp,$datastr); //写入新的文件内容
  • $my_datastr_len = strlen($datastr);
  • unset($datastr);
  • //新添文件目录信息
  • $dirstr = "\x50\x4b\x01\x02";
  • $dirstr .= "\x00\x00"; // version made by
  • $dirstr .= "\x14\x00"; // version needed to extract
  • $dirstr .= "\x00\x00"; // gen purpose bit flag
  • $dirstr .= "\x08\x00"; // compression method
  • $dirstr .= $hexdtime; // last mod time & date
  • $dirstr .= pack('V', $crc); // crc32
  • $dirstr .= pack('V', $c_len); // compressed filesize
  • $dirstr .= pack('V', $unc_len); // uncompressed filesize
  • $dirstr .= pack('v', strlen($name) ); // length of filename
  • $dirstr .= pack('v', 0 ); // extra field length
  • $dirstr .= pack('v', 0 ); // file comment length
  • $dirstr .= pack('v', 0 ); // disk number start
  • $dirstr .= pack('v', 0 ); // internal file attributes
  • $dirstr .= pack('V', 32 ); // external file attributes - 'archive' bit set
  • $dirstr .= pack('V',$this->datastr_len ); // relative offset of local header
  • $dirstr .= $name;
  • $this->dirstr .= $dirstr; //目录信息
  • $this -> file_count ++;
  • $this -> dirstr_len += strlen($dirstr);
  • $this -> datastr_len += $my_datastr_len;
  • }
  • function adddir($name){
  • $name = str_replace("\\", "/", $name);
  • $datastr = "\x50\x4b\x03\x04\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00";
  • $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 = "\x50\x4b\x01\x02\x00\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00";
  • $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 = "\x50\x4b\x05\x06\x00\x00\x00\x00" .
  • pack('v', $this -> file_count) .
  • pack('v', $this -> file_count) .
  • pack('V', $this -> dirstr_len) .
  • pack('V', $this -> datastr_len) .
  • "\x00\x00";
  • 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(strtolower($_REQUEST['zipname']),'.')=='.zip')
  • $_REQUEST['zipname'] .= ".zip";
  • $_REQUEST['todir'] = str_replace('\\','/',trim($_REQUEST['todir']));
  • if(!strrchr(strtolower($_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) ? array() : 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;
  • ?>
  • TOP

  • 复制代码


  • php, zip


    Erklärung dieser Website
    Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

    Heiße KI -Werkzeuge

    Undresser.AI Undress

    Undresser.AI Undress

    KI-gestützte App zum Erstellen realistischer Aktfotos

    AI Clothes Remover

    AI Clothes Remover

    Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

    Undress AI Tool

    Undress AI Tool

    Ausziehbilder kostenlos

    Clothoff.io

    Clothoff.io

    KI-Kleiderentferner

    AI Hentai Generator

    AI Hentai Generator

    Erstellen Sie kostenlos Ai Hentai.

    Heiße Werkzeuge

    Notepad++7.3.1

    Notepad++7.3.1

    Einfach zu bedienender und kostenloser Code-Editor

    SublimeText3 chinesische Version

    SublimeText3 chinesische Version

    Chinesische Version, sehr einfach zu bedienen

    Senden Sie Studio 13.0.1

    Senden Sie Studio 13.0.1

    Leistungsstarke integrierte PHP-Entwicklungsumgebung

    Dreamweaver CS6

    Dreamweaver CS6

    Visuelle Webentwicklungstools

    SublimeText3 Mac-Version

    SublimeText3 Mac-Version

    Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

    Erklären Sie JSON Web Tokens (JWT) und ihren Anwendungsfall in PHP -APIs. Erklären Sie JSON Web Tokens (JWT) und ihren Anwendungsfall in PHP -APIs. Apr 05, 2025 am 12:04 AM

    JWT ist ein offener Standard, der auf JSON basiert und zur sicheren Übertragung von Informationen zwischen Parteien verwendet wird, hauptsächlich für die Identitätsauthentifizierung und den Informationsaustausch. 1. JWT besteht aus drei Teilen: Header, Nutzlast und Signatur. 2. Das Arbeitsprinzip von JWT enthält drei Schritte: Generierung von JWT, Überprüfung von JWT und Parsingnayload. 3. Bei Verwendung von JWT zur Authentifizierung in PHP kann JWT generiert und überprüft werden, und die Funktionen und Berechtigungsinformationen der Benutzer können in die erweiterte Verwendung aufgenommen werden. 4. Häufige Fehler sind Signaturüberprüfungsfehler, Token -Ablauf und übergroße Nutzlast. Zu Debugging -Fähigkeiten gehört die Verwendung von Debugging -Tools und Protokollierung. 5. Leistungsoptimierung und Best Practices umfassen die Verwendung geeigneter Signaturalgorithmen, das Einstellen von Gültigkeitsperioden angemessen.

    Beschreiben Sie die soliden Prinzipien und wie sie sich für die PHP -Entwicklung anwenden. Beschreiben Sie die soliden Prinzipien und wie sie sich für die PHP -Entwicklung anwenden. Apr 03, 2025 am 12:04 AM

    Die Anwendung des soliden Prinzips in der PHP -Entwicklung umfasst: 1. Prinzip der Einzelverantwortung (SRP): Jede Klasse ist nur für eine Funktion verantwortlich. 2. Open and Close Principle (OCP): Änderungen werden eher durch Erweiterung als durch Modifikation erreicht. 3.. Lischs Substitutionsprinzip (LSP): Unterklassen können Basisklassen ersetzen, ohne die Programmgenauigkeit zu beeinträchtigen. 4. Schnittstellen-Isolationsprinzip (ISP): Verwenden Sie feinkörnige Schnittstellen, um Abhängigkeiten und nicht verwendete Methoden zu vermeiden. 5. Abhängigkeitsinversionsprinzip (DIP): Hoch- und niedrige Module beruhen auf der Abstraktion und werden durch Abhängigkeitsinjektion implementiert.

    Wie setze ich nach dem Neustart des Systems automatisch Berechtigungen von Unixsocket fest? Wie setze ich nach dem Neustart des Systems automatisch Berechtigungen von Unixsocket fest? Mar 31, 2025 pm 11:54 PM

    So setzen Sie die Berechtigungen von Unixsocket automatisch nach dem Neustart des Systems. Jedes Mal, wenn das System neu startet, müssen wir den folgenden Befehl ausführen, um die Berechtigungen von Unixsocket: sudo ...

    Erklären Sie das Konzept der späten statischen Bindung in PHP. Erklären Sie das Konzept der späten statischen Bindung in PHP. Mar 21, 2025 pm 01:33 PM

    In Artikel wird die in PHP 5.3 eingeführte LSB -Bindung (LSB) erörtert, die die Laufzeitauflösung der statischen Methode ermöglicht, um eine flexiblere Vererbung zu erfordern. Die praktischen Anwendungen und potenziellen Perfo von LSB

    Wie sende ich eine Postanforderung mit JSON -Daten mithilfe der Curl -Bibliothek von PHP? Wie sende ich eine Postanforderung mit JSON -Daten mithilfe der Curl -Bibliothek von PHP? Apr 01, 2025 pm 03:12 PM

    Senden von JSON -Daten mithilfe der Curl -Bibliothek von PHP in der PHP -Entwicklung müssen häufig mit externen APIs interagieren. Eine der gängigen Möglichkeiten besteht darin, die Curl Library zu verwenden, um Post � ...

    Rahmensicherheitsmerkmale: Schutz vor Schwachstellen. Rahmensicherheitsmerkmale: Schutz vor Schwachstellen. Mar 28, 2025 pm 05:11 PM

    In Artikel werden wichtige Sicherheitsfunktionen in Frameworks erörtert, um vor Schwachstellen zu schützen, einschließlich Eingabevalidierung, Authentifizierung und regelmäßigen Aktualisierungen.

    Anpassung/Erweiterung von Frameworks: So fügen Sie benutzerdefinierte Funktionen hinzu. Anpassung/Erweiterung von Frameworks: So fügen Sie benutzerdefinierte Funktionen hinzu. Mar 28, 2025 pm 05:12 PM

    In dem Artikel werden Frameworks hinzugefügt, das sich auf das Verständnis der Architektur, das Identifizieren von Erweiterungspunkten und Best Practices für die Integration und Debuggierung hinzufügen.

    See all articles