Ik heb een functie die "recursively" door folders & bestanden gaat en deze "zipt", maar ik krijg deze foutmelding:
Warning: opendir(...) [function.opendir]: failed to open dir: Too many open files in ... on line 73


Maar ik sluit wel de "handle" af voordat ik 'm laat "recursen" (zipEntry()):
<?php
	if ($handle = opendir($from)) {
		while (false !== ($entry = readdir($handle))) {
			if ($entry != "." && $entry != "..") {
				if (is_dir($from.'/'.$entry)) {
					$dirs[] = $entry;
				}
				else {
					$files[] = $entry;
				}
			}
		}

		closedir($handle);

		foreach($dirs as $dir) {
			$zip->addEmptyDir($to.'/'.$dir);
			zipEntry($zip, $from.'/'.$dir, $to.'/'.$dir);
		}

		foreach($files as $file) {
			$zip->addFile($from.'/'.$file, $to.'/'.$file);
		}
	}
?>


Is er een max "opens" die je kunt maken achter elkaar?
Een beetje uitleg?
Chris NVT op 06/08/2012 14:10:47

Een beetje uitleg?


Die had ik er tussen maar prongelijk bij het wijzigen weer weg gehaalt o_o
momentje :P
na wat testen lijkt
<?php
	$zip->addFile($from.'/'.$file, $to.'/'.$file);
?>

de boosdoener te zijn..

- SanThe - op 06/08/2012 14:20:24

Misschien hier wat aan?
http://phpwiki.santhe.nl/index.php/Show_alle_bestanden_die_in_een_map_en_in_alle_submappen_van_die_map_staan


dit geeft nu iets van tienduizende bestande weer o_o
maar ik zal kijken of ik en zip functie kan maken die gebruik maakt van die array, hartelijk dank :D
maar ik ben bang dat ik weer de zelfde foutmelding krijg door de addFile functie :I
@Ricardo Vermeltfoort
Ik heb ooit eens zo'n script gemaakt om een site te backuppen en dan op een andere server te zetten / te mailen. Eerst had ik hetzelfde probleem, maar na lang zoeken kwam ik erachter dat u om de 256 à 512 bestanden de functie moet sluiten en opnieuw openen en normaal zou het dan wel moeten werken.
Heb een nieuwe versie gemaakt die gebruikt maakt van de showfiles functie door SanThe (bedankt daarvoor, hier werkte het dus wel mee :D)
hier de code voor iedereen die het handig zal vinden :P
<?php

if (file_exists('zipall.zip')) {
	if (!isset($_REQUEST['deleteandcontinue']) ||
		!$_REQUEST['deleteandcontinue'])
	{
		print 'File already exists, <a href="zipall.php?deleteandcontinue=1">delete and continue</a>?';
		exit;
	}

	unlink('zipall.zip');
}

$dirinhoud = showfiles('./');
/* be prepared for a big zip file :3 */
if (!zipToFile($dirinhoud, 'zipall.zip'))
	print 'failed';

header('Content-type: application/zip');
header('Content-Disposition: attachment; filename="zipall.zip"');
readfile('zipall.zip');

/* showfiles() door SanThe */
function showfiles($map = "./", $return = array())
{
	if(@$dir = opendir($map))
	{
		while (false !== ($file = readdir($dir)))
		{
			if ($file != "." && $file != "..")
			{
				if(is_dir($map . $file))
					$return = showfiles($map . $file . "/", $return);
				else
					$return[] = $map . $file;

			}
		}
	}

	@closedir($dir);
	return $return;
}

function zipToFile($in, $out)
{
	$zip = new ZipArchive;
	if ($zip->open($out, ZipArchive::CREATE) !== TRUE)
		return false;

	foreach($in as $file)
		$zip->addFile($file, substr($file, 2));

	$zip->close();
	return true;
}
?>

Reageren