尝试为每个子目录创建一个带有下载功能的自动目录列表器。我想将这些子目录作为.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;
}?>
答案 0 :(得分:0)
尝试在循环开始之前实例化你的zip类,并使用add()方法而不是create()方法,否则你只需用下一个存档覆盖每个存档。
如果要在一次调用中添加一系列文件,则任一方法都需要一个文件数组或一个以逗号分隔的文件列表。
确保在调用create()或add()方法之前将$ file强制转换为字符串,然后传递一个对象
同时确保您传递$ file包括任何目录引用,否则PCLZip将找不到该文件