• 注册
    • 今日签到
    • 连续签到
  • 游骑兵
    今天 00:00
    连续13
    关注
  • huiwu
    今天 01:56
    连续1
    关注
  • hanaicc
    今天 02:43
    连续3
    关注
  • xinle
    今天 04:54
    连续14
    关注
  • xinle
    很开心曾经在水晶之家与大家寻梦
    连续14
    关注
  • 连续13
    关注
  • 连续3
    关注
  • 连续1
    关注
  • 网站维护 关注:2 内容:14

    以下为网站图片打包脚本

  • 查看作者
  • 打赏作者
  • 拉黑名单
    • <?php
      /*
      Template Name: 图片下载函数
      */
      ?>
      <?php
      echo $_GET['id']; //显示html页面传过来的id值
      ?>
      <?php
      $limit = get_option('posts_per_page');
      $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
      query_posts('p='. $_GET['id'] .'');
      $wp_query->is_archive = true; $wp_query->is_home = false;
      ?>
      <?php while (have_posts()) : the_post(); ?>
      <?php
      function fanly_post_imgs(){
      global $post;
      $src = '';
      $content = $post->post_content;
      preg_match_all('/<img .*?src=[\"|\'](.+?)[\"|\'].*?>/', $content, $strResult, PREG_PATTERN_ORDER);
      $n = count($strResult[1]);
      if($n >= 3){
      $src = $strResult[1][0].$strResult[1][1].$strResult[1][2].$strResult[1][3].$strResult[1][4].$strResult[1][5].$strResult[1][6].$strResult[1][7].$strResult[1][8].$strResult[1][9].$strResult[1][10]
      .$strResult[1][11].$strResult[1][12].$strResult[1][13].$strResult[1][14].$strResult[1][15].$strResult[1][16].$strResult[1][17].$strResult[1][18].$strResult[1][19].$strResult[1][20]
      .$strResult[1][21].$strResult[1][22].$strResult[1][23].$strResult[1][24].$strResult[1][25].$strResult[1][26].$strResult[1][27].$strResult[1][28].$strResult[1][29].$strResult[1][30]
      .$strResult[1][31].$strResult[1][32].$strResult[1][33].$strResult[1][34].$strResult[1][35].$strResult[1][36].$strResult[1][37].$strResult[1][38].$strResult[1][39].$strResult[1][40]
      .$strResult[1][41].$strResult[1][42].$strResult[1][43].$strResult[1][44].$strResult[1][45].$strResult[1][46].$strResult[1][47].$strResult[1][48].$strResult[1][49].$strResult[1][50]
      .$strResult[1][51].$strResult[1][52].$strResult[1][53].$strResult[1][54].$strResult[1][55].$strResult[1][56].$strResult[1][57].$strResult[1][58].$strResult[1][59].$strResult[1][60]
      .$strResult[1][61].$strResult[1][62].$strResult[1][63].$strResult[1][64].$strResult[1][65].$strResult[1][66].$strResult[1][67].$strResult[1][68].$strResult[1][69].$strResult[1][70]
      .$strResult[1][71].$strResult[1][72].$strResult[1][73].$strResult[1][74].$strResult[1][75].$strResult[1][76].$strResult[1][77].$strResult[1][78].$strResult[1][79].$strResult[1][80]
      .$strResult[1][81].$strResult[1][82].$strResult[1][83].$strResult[1][84].$strResult[1][85].$strResult[1][86].$strResult[1][87].$strResult[1][88].$strResult[1][89].$strResult[1][90]
      .$strResult[1][91].$strResult[1][92].$strResult[1][93].$strResult[1][94].$strResult[1][95].$strResult[1][96].$strResult[1][97].$strResult[1][98].$strResult[1][99].$strResult[1][100]
      ;
      }
      return $src;
      }
      $a=fanly_post_imgs();
      $a = str_replace("https://photo.babylyf.com/wp-content","wp-content",$a);
      $a = str_replace("https://photo.babylyf.com//wp-content","wp-content",$a);
      $a = str_replace("jpg","jpg;",$a);
      $a = str_replace("png","png;",$a);
      $a = str_replace("gif","gif;",$a);
      $t = str_replace("jpeg","jpeg;",$a);
      echo $q;
      ?>
      <?php
      class zipfile {
      var $datasec = array ();
      var $ctrl_dir = array ();
      var $eof_ctrl_dir = "\x50\x4b\x05\x06\x00\x00\x00\x00";
      var $old_offset = 0;
      function unix2_dostime($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);
      }
      function add_file($data, $name, $time = 0){
      $name = str_replace('\\', '/', $name);
      $dtime = dechex($this->unix2_dostime($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);
      $zdata = substr(substr($zdata, 0, strlen($zdata)- 4), 2);
      $c_len = strlen($zdata);
      $fr .= pack('V', $crc);
      $fr .= pack('V', $c_len);
      $fr .= pack('V', $unc_len);
      $fr .= pack('v', strlen($name));
      $fr .= pack('v', 0);
      $fr .= $name;
      $fr .= $zdata;
      $fr .= pack('V', $crc);
      $fr .= pack('V', $c_len);
      $fr .= pack('V', $unc_len);
      $this->datasec [] = $fr;
      $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($name));
      $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 += strlen($fr);
      $cdrec .= $name;
      $this->ctrl_dir[] = $cdrec;
      }
      function add_path($path, $l = 0){
      $d = @opendir($path);
      $l = $l > 0 ? $l : strlen($path) + 1;
      while($v = @readdir($d)){
      if($v == '.' || $v == '..'){
      continue;
      }
      $v = $path . '/' . $v;
      if(is_dir($v)){
      $this->add_path($v, $l);
      } else {
      $this->add_file(file_get_contents($v), substr($v, $l));
      }
      }
      }
      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";
      }
      function add_files($files){
      foreach($files as $file){
      if (is_file($file)){
      $data = implode("", file($file));
      $this->add_file($data, $file);
      }
      }
      }
      function output($file){
      $fp = fopen($file, "w");
      fwrite($fp, $this->file ());
      fclose($fp);
      }
      }
      $dfile = tempnam('/tmp', 'tmp');//產生一個臨時文件,用於緩存下載文件
      $zip = new zipfile();
      //----------------------
      $filename = ''. get_post($_GET['id'])->post_title .'.zip'; //下載的默認文件名
      //$image = array(
      // array('image_src' => 'pic1.jpg', 'image_name' => '圖片1.jpg'),
      // array('image_src' => 'pic2.jpg', 'image_name' => '圖片2.jpg'),
      //);
      //var_dump($image);
      $arr=[];
      $urls = [];
      $urls=explode(';',$t);
      for($i=0;$i<count($urls);$i++){
      $arr[$i]['image_src']=$urls[$i];
      $arr[$i]['image_name']='pic/'.$i.'.jpg';
      }
      //var_dump($arr);
      foreach($arr as $v){
      //$zip->add_path($urls);
      $zip->add_file(file_get_contents($v['image_src']), $v['image_name']);
      // 添加打包的圖片,第一個參數是圖片內容,第二個參數是壓縮包裏面的顯示的名稱, 可包含路徑
      // 或是想打包整個目錄 用 $zip->add_path($image_path);
      }
      //----------------------
      $zip->output($dfile);
      /* 下載文件*/
      ?>
      <?php endwhile; ?>
      <?php
      ob_clean();
      header('Pragma: public');
      header('Last-Modified:'.gmdate('D, d M Y H:i:s') . 'GMT');
      header('Cache-Control:no-store, no-cache, must-revalidate');
      header('Cache-Control:pre-check=0, post-check=0, max-age=0');
      header('Content-Transfer-Encoding:binary');
      header('Content-Encoding:none');
      header('Content-type:multipart/form-data');
      header('Content-Disposition:attachment; filename="'.$filename.'"'); //設置下載的默認文件名
      header('Content-length:'. filesize($dfile));
      $fp = fopen($dfile, 'r');
      while(connection_status() == 0 && $buf = @fread($fp, 8192)){
      echo $buf;
      }
      fclose($fp);
      @unlink($dfile);
      @flush();
      @ob_flush();
      exit(); ?>

      需要注意的2点

      1.服务器PHP响应时间决定了下载的持续时间,如果你设定60秒最大响应时间,那么文件下载时间最多持续60秒

      2.PHP内存过小,你的图片文件太大会中断操作。(文件临时缓冲到内存中,超过设定值会失败)

      首先利用页面传递文章的ID,有了文章ID就可以通过主循环获取到文章相关数据。
      主循环获取到所有文章图片,然后进行利用打包参数进行在线打包处理。

      回复
      你需要登录,才能进行发帖操作
    • 帖子间隔 侧栏位置: