ホームページ バックエンド開発 PHPチュートリアル Zipの圧縮・解凍(PHPZip形式)

Zipの圧縮・解凍(PHPZip形式)

Jun 13, 2016 pm 01:02 PM
file gt header size

压缩与解压Zip(PHPZip类)

?

PHPZip类来源:网络

visitFile()函数来源:http://topic.csdn.net/u/20071225/11/e6a8db84-df02-4622-987b-2a4ed4a5eef0.html (第14楼)

注:修改为可遍历子文件夹(替换遍历方法为visitFile());

?? ? 添加GetZipComment()方法;

?? ? 加上用法说明(注释部分)。

<?php
    class PHPZip
    {
        private $ctrl_dir     = array();
        private $datasec      = array();


        /**********************************************************
         * 压缩部分
         **********************************************************/
        // ------------------------------------------------------ //
        // #遍历指定文件夹
        //
        // $archive  = new PHPZip();
        // $filelist = $archive->visitFile(文件夹路径);
        // print "当前文件夹的文件:<p>\r\n";
        // foreach($filelist as $file)
        //     printf("%s<br>\r\n", $file);
        // ------------------------------------------------------ //
        var $fileList = array();
        public function visitFile($path)
        {
            global $fileList;
            $path = str_replace("\\", "/", $path);
            $fdir = dir($path);
        
            while(($file = $fdir->read()) !== false)
            {
                if($file == '.' || $file == '..'){ continue; }
        
                $pathSub    = preg_replace("*/{2,}*", "/", $path."/".$file);  // 替换多个反斜杠
                $fileList[] = is_dir($pathSub) ? $pathSub."/" : $pathSub;
                if(is_dir($pathSub)){ $this->visitFile($pathSub); }
            }
            $fdir->close();
            return $fileList;
        }
        
        
        private 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['minutes'] = 0;
                $timearray['seconds'] = 0;
            }
    
            return (  ($timearray['year'] - 1980) << 25)
                    | ($timearray['mon'] << 21)
                    | ($timearray['mday'] << 16)
                    | ($timearray['hours'] << 11)
                    | ($timearray['minutes'] << 5)
                    | ($timearray['seconds'] >> 1);
        }
        
        
        var $old_offset = 0;
        private function addFile($data, $filename, $time = 0)
        {
            $filename = str_replace('\\', '/', $filename);
    
            $dtime    = dechex($this->unix2DosTime($time));
            $hexdtime = '\x' . $dtime[6] . $dtime[7]
                      . '\x' . $dtime[4] . $dtime[5]
                      . '\x' . $dtime[2] . $dtime[3]
                      . '\x' . $dtime[0] . $dtime[1];
            eval('$hexdtime = "' . $hexdtime . '";');
    
            $fr       = "\x50\x4b\x03\x04";
            $fr      .= "\x14\x00";
            $fr      .= "\x00\x00";
            $fr      .= "\x08\x00";
            $fr      .= $hexdtime;
            $unc_len  = strlen($data);
            $crc      = crc32($data);
            $zdata    = gzcompress($data);
            $c_len    = strlen($zdata);
            $zdata    = substr(substr($zdata, 0, strlen($zdata) - 4), 2);
            $fr      .= pack('V', $crc);
            $fr      .= pack('V', $c_len);
            $fr      .= pack('V', $unc_len);
            $fr      .= pack('v', strlen($filename));
            $fr      .= pack('v', 0);
            $fr      .= $filename;
    
            $fr      .= $zdata;
    
            $fr      .= pack('V', $crc);
            $fr      .= pack('V', $c_len);
            $fr      .= pack('V', $unc_len);
    
            $this->datasec[] = $fr;
            $new_offset      = strlen(implode('', $this->datasec));
    
            $cdrec  = "\x50\x4b\x01\x02";
            $cdrec .= "\x00\x00";
            $cdrec .= "\x14\x00";
            $cdrec .= "\x00\x00";
            $cdrec .= "\x08\x00";
            $cdrec .= $hexdtime;
            $cdrec .= pack('V', $crc);
            $cdrec .= pack('V', $c_len);
            $cdrec .= pack('V', $unc_len);
            $cdrec .= pack('v', strlen($filename) );
            $cdrec .= pack('v', 0 );
            $cdrec .= pack('v', 0 );
            $cdrec .= pack('v', 0 );
            $cdrec .= pack('v', 0 );
            $cdrec .= pack('V', 32 );
    
            $cdrec .= pack('V', $this->old_offset );
            $this->old_offset = $new_offset;
    
            $cdrec .= $filename;
            $this->ctrl_dir[] = $cdrec;
        }
        
        
        var $eof_ctrl_dir = "\x50\x4b\x05\x06\x00\x00\x00\x00";
        private function file()
        {
            $data    = implode('', $this->datasec);
            $ctrldir = implode('', $this->ctrl_dir);
    
            return   $data
                   . $ctrldir
                   . $this->eof_ctrl_dir
                   . pack('v', sizeof($this->ctrl_dir))
                   . pack('v', sizeof($this->ctrl_dir))
                   . pack('V', strlen($ctrldir))
                   . pack('V', strlen($data))
                   . "\x00\x00";
        }
    
        
        // ------------------------------------------------------ //
        // #压缩到服务器
        //
        // $archive = new PHPZip();
        // $archive->Zip("需压缩的文件所在目录", "ZIP压缩文件名"); 
        // ------------------------------------------------------ //
        public function Zip($dir, $saveName)
        {
            if(@!function_exists('gzcompress')){ return; }
    
            ob_end_clean();
            $filelist = $this->visitFile($dir);
            if(count($filelist) == 0){ return; }
    
            foreach($filelist as $file)
            {
                if(!file_exists($file) || !is_file($file)){ continue; }
                
                $fd       = fopen($file, "rb");
                $content  = @fread($fd, filesize($file));
                fclose($fd);

                // 1.删除$dir的字符(./folder/file.txt删除./folder/)
                // 2.如果存在/就删除(/file.txt删除/)
                $file = substr($file, strlen($dir));
                if(substr($file, 0, 1) == "\\" || substr($file, 0, 1) == "/"){ $file = substr($file, 1); }
                
                $this->addFile($content, $file);
            }
            $out = $this->file();
    
            $fp = fopen($saveName, "wb");
            fwrite($fp, $out, strlen($out));
            fclose($fp);
        }
    
    
        // ------------------------------------------------------ //
        // #压缩并直接下载
        //
        // $archive = new PHPZip();
        // $archive->ZipAndDownload("需压缩的文件所在目录");
        // ------------------------------------------------------ //
        public function ZipAndDownload($dir)
        {
            if(@!function_exists('gzcompress')){ return; }
    
            ob_end_clean();
            $filelist = $this->visitFile($dir);
            if(count($filelist) == 0){ return; }
    
            foreach($filelist as $file)
            {
                if(!file_exists($file) || !is_file($file)){ continue; }
                
                $fd       = fopen($file, "rb");
                $content  = @fread($fd, filesize($file));
                fclose($fd);
    
                // 1.删除$dir的字符(./folder/file.txt删除./folder/)
                // 2.如果存在/就删除(/file.txt删除/)
                $file = substr($file, strlen($dir));
                if(substr($file, 0, 1) == "\\" || substr($file, 0, 1) == "/"){ $file = substr($file, 1); }
                
                $this->addFile($content, $file);
            }
            $out = $this->file();
    
            @header('Content-Encoding: none');
            @header('Content-Type: application/zip');
            @header('Content-Disposition: attachment ; filename=Farticle'.date("YmdHis", time()).'.zip');
            @header('Pragma: no-cache');
            @header('Expires: 0');
            print($out);
        }
        
        
        
        
        
        /**********************************************************
         * 解压部分
         **********************************************************/
        // ------------------------------------------------------ //
        // ReadCentralDir($zip, $zipfile)
        // $zip是经过@fopen($zipfile, 'rb')打开的
        // $zipfile是zip文件的路径
        // ------------------------------------------------------ //
        private function ReadCentralDir($zip, $zipfile)
        {
            $size     = filesize($zipfile);
            $max_size = ($size < 277) ? $size : 277;
            
            @fseek($zip, $size - $max_size);
            $pos   = ftell($zip);
            $bytes = 0x00000000;
            
            while($pos < $size)
            {
                $byte  = @fread($zip, 1);
                $bytes = ($bytes << 8) | Ord($byte);
                $pos++;
                if($bytes == 0x504b0506){ break; }
            }
            
            $data = unpack('vdisk/vdisk_start/vdisk_entries/ventries/Vsize/Voffset/vcomment_size', fread($zip, 18));

            $centd['comment']      = ($data['comment_size'] != 0) ? fread($zip, $data['comment_size']) : '';  // 注释
            $centd['entries']      = $data['entries'];
            $centd['disk_entries'] = $data['disk_entries'];
            $centd['offset']       = $data['offset'];
            $centd['disk_start']   = $data['disk_start'];
            $centd['size']         = $data['size'];
            $centd['disk']         = $data['disk'];
            return $centd;
        }
        
        
        private function ReadCentralFileHeaders($zip)
        {
            $binary_data = fread($zip, 46);
            $header      = unpack('vchkid/vid/vversion/vversion_extracted/vflag/vcompression/vmtime/vmdate/Vcrc/Vcompressed_size/Vsize/vfilename_len/vextra_len/vcomment_len/vdisk/vinternal/Vexternal/Voffset', $binary_data);

            $header['filename'] = ($header['filename_len'] != 0) ? fread($zip, $header['filename_len']) : '';
            $header['extra']    = ($header['extra_len']    != 0) ? fread($zip, $header['extra_len'])    : '';
            $header['comment']  = ($header['comment_len']  != 0) ? fread($zip, $header['comment_len'])  : '';

    
            if($header['mdate'] && $header['mtime'])
            {
                $hour    = ($header['mtime']  & 0xF800) >> 11;
                $minute  = ($header['mtime']  & 0x07E0) >> 5;
                $seconde = ($header['mtime']  & 0x001F) * 2;
                $year    = (($header['mdate'] & 0xFE00) >> 9) + 1980;
                $month   = ($header['mdate']  & 0x01E0) >> 5;
                $day     = $header['mdate']   & 0x001F;
                $header['mtime'] = mktime($hour, $minute, $seconde, $month, $day, $year);
            } else {
                $header['mtime'] = time();
            }
            $header['stored_filename'] = $header['filename'];
            $header['status'] = 'ok';
            if(substr($header['filename'], -1) == '/'){ $header['external'] = 0x41FF0010; }  // 判断是否文件夹
            return $header;
        }
    
    
        private function ReadFileHeader($zip)
        {
            $binary_data = fread($zip, 30);
            $data        = unpack('vchk/vid/vversion/vflag/vcompression/vmtime/vmdate/Vcrc/Vcompressed_size/Vsize/vfilename_len/vextra_len', $binary_data);
    
            $header['filename']        = fread($zip, $data['filename_len']);
            $header['extra']           = ($data['extra_len'] != 0) ? fread($zip, $data['extra_len']) : '';
            $header['compression']     = $data['compression'];
            $header['size']            = $data['size'];
            $header['compressed_size'] = $data['compressed_size'];
            $header['crc']             = $data['crc'];
            $header['flag']            = $data['flag'];
            $header['mdate']           = $data['mdate'];
            $header['mtime']           = $data['mtime'];
    
            if($header['mdate'] && $header['mtime']){
                $hour    = ($header['mtime']  & 0xF800) >> 11;
                $minute  = ($header['mtime']  & 0x07E0) >> 5;
                $seconde = ($header['mtime']  & 0x001F) * 2;
                $year    = (($header['mdate'] & 0xFE00) >> 9) + 1980;
                $month   = ($header['mdate']  & 0x01E0) >> 5;
                $day     = $header['mdate']   & 0x001F;
                $header['mtime'] = mktime($hour, $minute, $seconde, $month, $day, $year);
            }else{
                $header['mtime'] = time();
            }
    
            $header['stored_filename'] = $header['filename'];
            $header['status']          = "ok";
            return $header;
        }
    
    
        private function ExtractFile($header, $to, $zip)
        {
            $header = $this->readfileheader($zip);
            
            if(substr($to, -1) != "/"){ $to .= "/"; }
            if(!@is_dir($to)){ @mkdir($to, 0777); }
            
            $pth = explode("/", dirname($header['filename']));
            for($i=0; isset($pth[$i]); $i++){
                if(!$pth[$i]){ continue; }
                $pthss .= $pth[$i]."/";
                if(!is_dir($to.$pthss)){ @mkdir($to.$pthss, 0777); }
            }
            
            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!");
                    
                    if(!$gzp){ return(-2); }
                    $fp = @fopen($to.$header['filename'], 'wb');
                    if(!$fp){ return(-1); }
                    $size = $header['size'];
                    
                    while($size != 0)
                    {
                        $read_size   = ($size < 2048 ? $size : 2048);
                        $buffer      = gzread($gzp, $read_size);
                        $binary_data = pack('a'.$read_size, $buffer);
                        @fwrite($fp, $binary_data, $read_size);
                        $size       -= $read_size;
                    }
                    fclose($fp); gzclose($gzp);
                    
                    touch($to.$header['filename'], $header['mtime']);
                    @unlink($to.$header['filename'].'.gz');
                }
            }
            return true;
        }
        
        
        // ------------------------------------------------------ //
        // #解压文件
        //
        // $archive   = new PHPZip();
        // $zipfile   = "ZIP压缩文件名";
        // $savepath  = "解压缩目录名";
        // $zipfile   = $unzipfile;
        // $savepath  = $unziptarget;
        // $array     = $archive->GetZipInnerFilesInfo($zipfile);
        // $filecount = 0;
        // $dircount  = 0;
        // $failfiles = array();
        // set_time_limit(0);  // 修改为不限制超时时间(默认为30秒)
        //
        // for($i=0; $i<count($array); $i++) {
        //     if($array[$i][folder] == 0){
        //         if($archive->unZip($zipfile, $savepath, $i) > 0){
        //             $filecount++;
        //         }else{
        //             $failfiles[] = $array[$i][filename];
        //         }
        //     }else{
        //         $dircount++;
        //     }
        // }
        // set_time_limit(30);
        //printf("文件夹:%d    解压文件:%d    失败:%d<br>\r\n", $dircount, $filecount, count($failfiles));
        //if(count($failfiles) > 0){
        //    foreach($failfiles as $file){
        //        printf("&middot;%s<br>\r\n", $file);
        //    }
        //}
        // ------------------------------------------------------ //
        public function unZip($zipfile, $to, $index = Array(-1))
        {
            $ok  = 0;
            $zip = @fopen($zipfile, 'rb');
            if(!$zip){ return(-1); }
            
            $cdir      = $this->ReadCentralDir($zip, $zipfile);
            $pos_entry = $cdir['offset'];
            
            if(!is_array($index)){ $index = array($index); }
            for($i=0; $index[$i]; $i++)
            {
                if(intval($index[$i]) != $index[$i] || $index[$i] > $cdir['entries'])
                {
                    return(-1);
                }
            }
            
            for($i=0; $i<$cdir['entries']; $i++)
            {
                @fseek($zip, $pos_entry);
                $header          = $this->ReadCentralFileHeaders($zip);
                $header['index'] = $i;
                $pos_entry       = ftell($zip);
                @rewind($zip);
                fseek($zip, $header['offset']);
                if(in_array("-1", $index) || in_array($i, $index))
                {
                    $stat[$header['filename']] = $this->ExtractFile($header, $to, $zip);
                }
            }
            
            fclose($zip);
            return $stat;
        }
        
        
        
        
        
        /**********************************************************
         * 其它部分
         **********************************************************/
        // ------------------------------------------------------ //
        // #获取被压缩文件的信息
        //
        // $archive = new PHPZip();
        // $array = $archive->GetZipInnerFilesInfo(ZIP压缩文件名);
        // for($i=0; $i<count($array); $i++) {
        //     printf("<b>&middot;%s</b><br>\r\n", $array[$i][filename]);
        //     foreach($array[$i] as $key => $value)
        //         printf("%s => %s<br>\r\n", $key, $value);
        //     print "\r\n<p>------------------------------------<p>\r\n\r\n";
        // }
        // ------------------------------------------------------ //
        public function GetZipInnerFilesInfo($zipfile)
        {
            $zip = @fopen($zipfile, 'rb');
            if(!$zip){ return(0); }
            $centd = $this->ReadCentralDir($zip, $zipfile);
            
            @rewind($zip);
            @fseek($zip, $centd['offset']);
            $ret = array();

            for($i=0; $i<$centd['entries']; $i++)
            {
                $header          = $this->ReadCentralFileHeaders($zip);
                $header['index'] = $i;
                $info = array(
                    'filename'        => $header['filename'],                   // 文件名
                    'stored_filename' => $header['stored_filename'],            // 压缩后文件名
                    'size'            => $header['size'],                       // 大小
                    'compressed_size' => $header['compressed_size'],            // 压缩后大小
                    'crc'             => strtoupper(dechex($header['crc'])),    // CRC32
                    'mtime'           => date("Y-m-d H:i:s",$header['mtime']),  // 文件修改时间
                    'comment'         => $header['comment'],                    // 注释
                    'folder'          => ($header['external'] == 0x41FF0010 || $header['external'] == 16) ? 1 : 0,  // 是否为文件夹
                    'index'           => $header['index'],                      // 文件索引
                    'status'          => $header['status']                      // 状态
                );
                $ret[] = $info;
                unset($header);
            }
            fclose($zip);
            return $ret;
        }
        
        
        // ------------------------------------------------------ //
        // #获取压缩文件的注释
        //
        // $archive = new PHPZip();
        // echo $archive->GetZipComment(ZIP压缩文件名);
        // ------------------------------------------------------ //
        public function GetZipComment($zipfile)
        {
            $zip = @fopen($zipfile, 'rb');
            if(!$zip){ return(0); }
            $centd = $this->ReadCentralDir($zip, $zipfile);
            fclose($zip);
            return $centd[comment];
        }
    }
?>





<form method="post">
  压缩到服务器:
  <br>------------------<br>
  压缩目录:     <input name="zipdir" type="text" id="zipdir" />(例如./folder)<br>
  另存为路径和文件名:<input name="savename" type="text" id="savename" />(例如./folder/file.zip)(需要填写扩展名)<br>
  <input name="zip" type="submit" id="zip" value="压缩" /><br>
  <br><br><br>
  
  压缩并下载
  <br>------------------<br>
  文件所在目录:<input name="zipdowndir" type="text" id="zipdowndir" />(例如./folder)<br>
  <input name="zipdown" type="submit" id="zipdown" value="压缩并下载" />
  <br><br><br>
  
  在线解压zip
  <br>------------------<br>
  文件: <input name="unzipfile" type="text" id="unzipfile" />(例如./folder/file.zip)<br>
  解压到:<input name="unziptarget" type="text" id="unziptarget" />(例如./folder)<br>
  <input name="unzip" type="submit" id="unzip" value="解压" />
  <br><br><br>
  
  读取压缩文件内部文件信息和注释
  <br>------------------<br>
  文件:<input name="readfile" type="text" id="readfile" />(例如./folder/file.zip)<br>
  <input name="readfileinfo" type="submit" id="readfileinfo" value="读取内部文件信息" />
  <input name="readcomment" type="submit" id="readcomment" value="读取注释" />
</form>
<?
    echo "<p><p>\r\n";
    echo "<br>--------------------------<br>\r\n";
    echo "显示信息:\r\n";
    echo "<br>--------------------------<br>\r\n";
    
    $archive  = new PHPZip();
    if(!empty($zip))
    {
        $archive->Zip($zipdir, $savename);
    }
    elseif(!empty($zipdown))
    {
        $archive->ZipAndDownload($zipdowndir);
    }
    elseif(!empty($unzip))
    {
        $zipfile   = $unzipfile;
        $savepath  = $unziptarget;
        $array     = $archive->GetZipInnerFilesInfo($zipfile);
        $filecount = 0;
        $dircount  = 0;
        $failfiles = array();
        set_time_limit(0);  // 修改为不限制超时时间(默认为30秒)
        
        for($i=0; $i<count($array); $i++) {
            if($array[$i][folder] == 0){
                if($archive->unZip($zipfile, $savepath, $i) > 0){
                    $filecount++;
                }else{
                    $failfiles[] = $array[$i][filename];
                }
            }else{
                $dircount++;
            }
        }

             set_time_limit(30);

printf("文件夹:%d    解压文件:%d    失败:%d<br>\r\n", $dircount, $filecount, count($failfiles));
        if(count($failfiles) > 0){
            foreach($failfiles as $file){
                printf("&middot;%s<br>\r\n", $file);
            }
        }
    }
    elseif(!empty($readfileinfo))
    {
        $array = $archive->GetZipInnerFilesInfo($readfile);
        for($i=0; $i<count($array); $i++) {
            printf("<b>&middot;%s</b><br>\r\n", $array[$i][filename]);
            foreach($array[$i] as $key => $value)
                printf("%s => %s<br>\r\n", $key, $value);
            print "\r\n<p>------------------------------------<p>\r\n\r\n";
        }
    }
    elseif(!empty($readcomment))
    {
        $comment = $archive->GetZipComment($readfile);
        printf("%s<br>\r\n", $comment);
    }
?>
ログイン後にコピー
?

?

1 楼 yakczh 2012-04-27  
unpack(): Type v: not enough input, need 2, have 0 in /

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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Huawei GT3 ProとGT4の違いは何ですか? Huawei GT3 ProとGT4の違いは何ですか? Dec 29, 2023 pm 02:27 PM

多くのユーザーはスマートウォッチを選ぶときにファーウェイブランドを選択しますが、その中でもファーウェイ GT3pro と GT4 は非常に人気のある選択肢であり、多くのユーザーはファーウェイ GT3pro と GT4 の違いに興味を持っています。 Huawei GT3pro と GT4 の違いは何ですか? 1. 外観 GT4: 46mm と 41mm、材質はガラスミラー + ステンレススチールボディ + 高解像度ファイバーバックシェルです。 GT3pro: 46.6mm および 42.9mm、材質はサファイアガラス + チタンボディ/セラミックボディ + セラミックバックシェルです。 2. 健全な GT4: 最新の Huawei Truseen5.5+ アルゴリズムを使用すると、結果はより正確になります。 GT3pro: ECG 心電図と血管と安全性を追加

紅夢ネイティブアプリケーションのランダムな詩 紅夢ネイティブアプリケーションのランダムな詩 Feb 19, 2024 pm 01:36 PM

オープン ソースの詳細については、次のサイトを参照してください。 51CTO Honmeng 開発者コミュニティ https://ost.51cto.com 実行環境 DAYU200:4.0.10.16SDK: 4.0.10.15IDE: 4.0.600 1. アプリケーションを作成するには、[ファイル] をクリックします。 >新しいファイル ->プロジェクトの作成。テンプレートを選択します: [OpenHarmony] EmptyAbility: プロジェクト名 shici、アプリケーション パッケージ名 com.nut.shici、およびアプリケーションの保存場所 XXX (中国語、特殊文字、スペースは含まれません) を入力します。 CompileSDK10、モデル: ステージ。デバイス

JavaのFile.length()関数を使用してファイルのサイズを取得します。 JavaのFile.length()関数を使用してファイルのサイズを取得します。 Jul 24, 2023 am 08:36 AM

ファイルのサイズを取得するには、Java の File.length() 関数を使用します。ファイル操作を扱うとき、ファイル サイズは非常に一般的な要件です。Java では、ファイルのサイズを取得するための非常に便利な方法、つまり length( ) File クラスのメソッド。この記事では、このメソッドを使用してファイルのサイズを取得する方法と、対応するコード例を紹介します。まず、サイズを取得したいファイルを表す File オブジェクトを作成する必要があります。 File オブジェクトを作成する方法は次のとおりです: Filef

PHP BLOBをファイルに変換する方法 PHP BLOBをファイルに変換する方法 Mar 16, 2023 am 10:47 AM

PHP BLOB をファイルに変換する方法: 1. PHP サンプル ファイルを作成します; 2. 「function blobToFile(blob) {return new File([blob], 'screenshot.png', { type: 'image/jpeg' })」を通じて} 」メソッドを使用して、Blob をファイルに変換できます。

JavaのFile.renameTo()関数を使用してファイルの名前を変更する JavaのFile.renameTo()関数を使用してファイルの名前を変更する Jul 25, 2023 pm 03:45 PM

Java の File.renameTo() 関数を使用してファイルの名前を変更する Java プログラミングでは、ファイルの名前を変更する必要がよくあります。 Java には、ファイル操作を処理するための File クラスが用意されており、その renameTo() 関数でファイルの名前を簡単に変更できます。この記事では、Java の File.renameTo() 関数を使用してファイルの名前を変更する方法と、対応するコード例を紹介します。 File.renameTo() 関数は、File クラスのメソッドです。

SpringBoot はどのように Feign 呼び出しを通じてヘッダー内のパラメーターを渡しますか? SpringBoot はどのように Feign 呼び出しを通じてヘッダー内のパラメーターを渡しますか? May 16, 2023 pm 08:38 PM

[SpringBoot] Feign 呼び出しを介してヘッダーのパラメーターを渡す Feign を介してヘッダー パラメーターを渡す方法 問題の説明 Feign を使用して Spring Cloud の別のサービスの API インターフェイスをリクエストする場合、ヘッダーでパラメーターを渡す必要があります。特別な処理が行われると、ヘッダー内のパラメータが失われます。解決策 1: @RequestHeader(name="headerName") を介して渡します。例: Feign は次のように定義されます @FeignClient(name="service-name")pub

Linuxヘッダーとはどういう意味ですか? Linuxヘッダーとはどういう意味ですか? Jul 18, 2023 pm 03:34 PM

Linux ヘッダーは、コンテンツに関するメタデータを含めるために使用されるファイルまたはデータ ストリームの先頭を指します。ヘッダー ファイルを正しく記述して使用することで、開発者はシステム リソースをより有効に活用し、コードの可読性と保守性を向上させることができます。

修正: Windows 11 で Snipping ツールが機能しない 修正: Windows 11 で Snipping ツールが機能しない Aug 24, 2023 am 09:48 AM

Windows 11 で Snipping Tool が機能しない理由 問題の根本原因を理解すると、適切な解決策を見つけるのに役立ちます。 Snipping Tool が正しく動作しない主な理由は次のとおりです。 フォーカス アシスタントがオンになっている: これにより、Snipping Tool が開かなくなります。破損したアプリケーション: 起動時にスニッピング ツールがクラッシュする場合は、破損している可能性があります。古いグラフィック ドライバー: 互換性のないドライバーは、スニッピング ツールに干渉する可能性があります。他のアプリケーションからの干渉: 実行中の他のアプリケーションが Snipping Tool と競合する可能性があります。証明書の有効期限が切れています: アップグレード プロセス中のエラーにより、この問題が発生する可能性があります。これらの簡単な解決策は、ほとんどのユーザーに適しており、特別な技術知識は必要ありません。 1. Windows および Microsoft Store アプリを更新する

See all articles