使用PCLZIP.LIB创建zip文件:无效的变量类型错误

时间:2010-12-14 12:34:06

标签: php

尝试为每个子目录创建一个带有下载功能的自动目录列表器。我想将这些子目录作为.zip文件提供,以便于下载和在服务器上使用更少的带宽。

以下脚本运行正常,直到我添加了pclzip.lib并尝试让它创建一个zip文件。

<html>
<head>
<?php require_once("pclzip.lib.php");?>
<?php require_once("filesize_lib.php"); ?>

<style type="text/css">

.readme{
width:500px;
height:150px;
background: silver;
overflow-x: hidden;
overflow-y: scroll;
}


</style>

</head>
<body>
<?php
    $readme = "/readme.txt";
    $download = "downloads";
  // Openen
    $dir = new DirectoryIterator('.');
  // Doorlopen
?>
<table width="960px" border="1px"><tr><td width="185px"><strong>Name</strong></td><td width="50px"><strong>Type</strong></td><td width="50px"><strong>Size</strong></td><td width="125px"><strong>Last Modified</strong></td><td><strong>Short description</strong></td><td width="50px"><strong>Download</strong></td></tr>
<?php
    foreach ($dir as $file)
      {
        if (! $file->isDot()
               && $file != ".."
            && $file != "index.php"
            && $file != "filesize_lib.php"
            && $file != "downloads"
            )
        {        ?><tr><td><?php
                  echo '<a href="'.$file.'">'.$file.'</a>';
                ?></td><td><?php
                echo filetype($file);
                  ?></td><td><?php
                  echo fileORdirSize($file).'<br/>';
                 ?></td><td><?php
                  echo date("M j, Y", filemtime($file));    
                  ?></td><?php
                      if (filetype($file) == "dir"){
                          ?>                  
                          <td><div class="readme"><?php
                          echo file_get_contents($file.$readme);    
                          ?></div></td><?php
                      } else {
                          ?><td>Files don't have descriptions, but can be tested directly from this page.</td><?php
                      }
                  ?><td><?php
                    $zip = new PclZip("tmp/archief.zip");
                        if($zip->create($file) == 0)
                          die("Error : " . $zip->errorInfo(true));                
                  echo '<a href="'.$zip.'">'.$zip.'</a>';
                  ?></td></tr><?php
        }
  }
?>
</table>
</body>
</html> 

我收到的错误如下:

Invalid variable type p_filelist [code -3]

我认为这是因为我正在为pclzip.lib提供单个变量而不是数组。不幸的是,我不知道如何解决这个问题。请参阅下面的问题代码(根据我的说明):

<?php    // ----- Init
    $v_string_list = array();
    $v_att_list = array();
    $v_filedescr_list = array();
    $p_result_list = array();

    // ----- Look if the $p_filelist is really an array
    if (is_array($p_filelist)) {

      // ----- Look if the first element is also an array
      //       This will mean that this is a file description entry
      if (isset($p_filelist[0]) && is_array($p_filelist[0])) {
        $v_att_list = $p_filelist;
      }

      // ----- The list is a list of string names
      else {
        $v_string_list = $p_filelist;
      }
    }

    // ----- Look if the $p_filelist is a string
    else if (is_string($p_filelist)) {
      // ----- Create a list from the string
      $v_string_list = explode(PCLZIP_SEPARATOR, $p_filelist);
    }

    // ----- Invalid variable type for $p_filelist
    else {
      PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid variable type p_filelist");
      return 0;
    }?>

1 个答案:

答案 0 :(得分:0)

尝试在循环开始之前实例化你的zip类,并使用add()方法而不是create()方法,否则你只需用下一个存档覆盖每个存档。

如果要在一次调用中添加一系列文件,则任一方法都需要一个文件数组或一个以逗号分隔的文件列表。

确保在调用create()或add()方法之前将$ file强制转换为字符串,然后传递一个对象

同时确保您传递$ file包括任何目录引用,否则PCLZip将找不到该文件