Ik wou eens proberen zelf een pagina te maken om mijn directories er iets mooier te laten uitzien. En ook om alle bestanden downloadbaar te maken als .zip. Nu werkt alles redelijk, maar ik kan de zip's niet beschikbaar maken.

Error : PCLZIP_ERR_INVALID_PARAMETER (-3) : Invalid variable type p_filelist

 
<html>
<head>
<?php require_once("filesize_lib.php"); ?>
<?php require_once("pclzip.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>
Kan je a.u.b. code-tags gebruiken? Alvast bedankt.

[size=xsmall]Toevoeging op 08/12/2010 16:27:01:[/size]

Kan je a.u.b. code-tags gebruiken? Alvast bedankt.
Sorry, ik vergeet het hier nogal makkelijk. Misschien kan iemand ze ook eens als een knopje toevoegen in de editor?
Ze staat er de knopjes, maar dan moet je eerst op de knop reageren drukken.
Hoe bedoel je precies beschikbaar stellen?
Uiteindelijk leest dit script alle subdirectories uit de directory waarin het geplaatst wordt uit. Deze subdirectories wil ik beschikbaar stellen om te downloaden, maar om het de gebruiker makkelijk te maken wil ik de directory integraal als zip beschikbaar maken. Ook beter voor m'n bandbreedte trouwens. Helaas maakt dit script met de pclzip.lib de zip niet als download beschikbaar, wat ik wel verwacht had.
waar komt de variabele p_filelist voor??
John, deze bestaat niet. Blijkbaar geef ik een foutief soort variabele door - althans dat denk ik. Het vreemde is dat ik overal $file gebruik en dat het daar wel werkt.

De fout zit hem in onderstaande, maar waar dat weet ik dus niet. Heb al vanalles geprobeerd maar krijg het niet aan de praat.

[code="php"]
<?php
$zip = new PclZip("tmp/archief.zip");
if($zip->create($file) == 0)
die("Error : " . $zip->errorInfo(true));
echo '<a href="'.$zip.'">'.$zip.'</a>';
?>[/code]

Folder "tmp" is door mij aangemaakt in de root. "archief.zip" is fictief, ik weet niet goed wat dit doet.
$file is de file zelf, die werkt bij alle andere bovenstaande en geeft de naam of de bestandsgrootte weer.
misschien ergens in de classe van PclZip deze variabele ?
Ik schat in dat je variabele $file onjuiste info meegeeft naar de class
Probeer/Test eens een hard gecodeerde filename in single quotes.
foutmelding weg? Dan moet je het daarin zoeken.
Thanks! Ik geloof dat ik de oorsprong van het probleem gevonden heb. De oplossing daar zal ik misschien nog wat hulp bij nodig hebben... .

[code="php"]<?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;
}?>[/code]

[size=xsmall]Toevoeging op 13/12/2010 11:30:44:[/size]

Mmh, ik geef $file door, wat een variable is, maar het moet dus een array zijn. Iemand enig idee hoe ik dat oplos in bovenstaande code?

[size=xsmall]Toevoeging op 14/12/2010 10:14:38:[/size]

Ok, ik vind het niet. Iemand nog suggesties?

Reageren