11

I've been at this for a while. This actually worked one time, then never again. it simply does not create the zip file. The file does exist.

$zip = new ZipArchive();
$filename = "./test" . time() .".zip";

if ($zip->open($filename, ZIPARCHIVE::CREATE)!==TRUE) {      
    exit("cannot open <$filename>\n");
}

$thisdir = "$_SERVER[DOCUMENT_ROOT]/zip";
$zip->addFile($thisdir . "/trash-icon.png", "/gabage.png");
echo "numfiles: " . $zip->numFiles . "\n";
echo "status:" . $zip->status . "\n";
$zip->close();

If I add something like

$zip->addFromString("testfilephp.txt", "#1 This is a test string added as testfilephp.txt.\n"); 

it creates the zip with the txt file in it.. but a no go for anytype of existing file.

Vance
  • 121
  • 1
  • 1
  • 5
  • `/trash-icon.png` is almost certainly wrong, as it points to the server's root directory. Are you 100% sure the files you are trying to add in fact exist? – Pekka Mar 24 '11 at 17:23
  • Are you certain that /trash-icon.png actually exists, remembering that it is in the filesystem root directory – Mark Baker Mar 24 '11 at 17:24
  • http://www.php.net/manual/de/function.ziparchive-addfile.php#101605 – mario Mar 24 '11 at 17:25
  • hah. I guess it was the file. it's working now. Thanks guys – Vance Mar 24 '11 at 17:33

3 Answers3

14

The ZipArchive::addFile() method accepts the path to the file as its first parameter, but not all paths are created equal. addFile() method silently rejects the file and you never know what went wrong. As can be derived from the question, an alternative approach would be:

// $zip->addFile($file);
$content = file_get_contents($file);
$zip->addFromString(pathinfo ( $file, PATHINFO_BASENAME), $content);

In addition to getting the code working, file_get_contents() also generates decent error messages.

JohnnyB
  • 151
  • 1
  • 5
2

The ZipArchive::addFile() method accepts the path to the file as its first parameter.


Here, you are using :

$zip->addFile("/trash-icon.png", "/gabage.png");

Which means you are trying to add the /trash-icon.png file to your archive.


Are you sure this file exists ?

Note there is a / at the beginning of that file's path, which indicates it's an absolute path.
Maybe that / should be removed, to use a relative path ?

Pascal MARTIN
  • 395,085
  • 80
  • 655
  • 663
1

I had similar kind of issue and it was related with the file that I was going to add to the zip archive.

Before adding file to zip archive, it's always better to check if the file exists.

$thisdir = "$_SERVER[DOCUMENT_ROOT]/zip";
if (file_exists($thisdir . "/trash-icon.png")) {
    $zip->addFile($thisdir . "/trash-icon.png", "/gabage.png");
}
Mukesh Chapagain
  • 25,063
  • 15
  • 119
  • 120