Zip-bestand maken

Status
Niet open voor verdere reacties.

Supersnail

Terugkerende gebruiker
Lid geworden
25 jul 2001
Berichten
1.804
Hallo,

Ik probeer om met PHP alle bestanden in een bepaalde directory in een zip-bestand te plaatsen. Hiervoor heb ik deze functie
PHP:
function create_zip($dir)
{
	if (is_writable($dir))
	{
		$zip = new ZipArchive;
		$res = $zip->open($dir . '/test.zip', ZipArchive::CREATE);
		echo $zip->getStatusString();
		if ($res === true)
		{
			if ($handle = opendir($dir))
			{
				while (false !== ($entry = readdir($handle)))
				{
					if ($entry != "." && $entry != "..")
					{
						if (!$zip->addFile($entry))
						{
							die ("Couldn't add file to zip archive");
						}
						echo $zip->getStatusString();
					}
				}
				closedir($handle);
			}
			else
			{
				die ("Couldn't open dir");
			}
			if (!$zip->close())
			{
				die ("Couldn't save zip file");
			}
			echo $zip->getStatusString();
			echo "zip created";
		}
		else
		{
			die ("Couldn't create zip file");
		}
	}
}

Als ik deze functie aanroep vanuit mijn script is dit de uitvoer
No errorNo errorNo errorNo errorNo errorNo errorNo errorNo errorNo errorNo errorNo errorNo errorNo errorNo errorNo errorNo errorNo errorNo errorNo errorNo errorNo errorNo errorNo errorNo errorNo errorNo errorNo errorNo errorNo errorNo errorNo errorNo errorNo errorNo errorNo errorNo errorNo errorNo errorNo errorNo errorCouldn't save zip file

PHP kan dus schrijven naar de directory, overal is de status "No error", maar bij $zip->close gaat er iets mis en wordt er false opgeleverd. Het zip-bestand is ook niet te vinden in de directory.

Hoewel ik helemaal bovenin het php-bestand
PHP:
ini_set('display_errors', 'On');
error_reporting(E_ALL);
heb staan, krijg ik geen foutmelding te zien. Ook in de access_log en error_log van Apache is niet te zien waarom het misgaat.

Wat zou het probleem kunnen zijn of hoe kan ik zien wat er misgaat?

Bij voorbaat dank.
 
Wat gebeurt er als je
Code:
$res = $zip->open($dir . '/test.zip', ZipArchive::CREATE);
verandert in
Code:
$res = $zip->open($dir . 'test.zip', ZipArchive::CREATE);
 
Heb je wel rechten om in de desbetreffende dir te schrijven? ik zie alleen maar dat je leesrechten hebt gecontroleerd
 
Dankjewel voor jullie antwoorden, maar ik heb het probleem net opgelost via deze comment op php.net
If you're adding multiple files to a zip and your $zip->close() call is returning FALSE, ensure that all the files you added actually exist. Apparently $zip->addFile() returns TRUE even if the file doesn't actually exist. It's a good idea to check each file with file_exists() or is_readable() before calling $zip->addFile() on it.

De bestanden bestonden wel, maar readdir levert de bestandsnamen op zonder pad. Daarom kon addFile de bestanden niet vinden en faalde de close. Ik heb het opgelost door de regel
PHP:
if (!$zip->addFile($entry))
te veranderen in
PHP:
if (!$zip->addFile($dir . '/' . $entry, $entry))
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan