addEmptyDir doesn't exist now,
use $zip->addFile($file, $dir.$fichier);
nothing on the net about this,
addEmptyDir work on Ubuntu but not on Debian Etch
ZipArchive::addEmptyDir
(No version information available, might be only in CVS)
ZipArchive::addEmptyDir — Add a new directory
Opis
bool ZipArchive::addEmptyDir
( string $dirname
)
Adds an empty directory in the archive.
Parametry
- dirname
-
The directory to add.
Zwracane wartości
Zwraca TRUE w przypadku powodzenia, FALSE w przypadku błędu.
Przykłady
Example #1 Create a new directory in an archive
<?php
$zip = new ZipArchive;
if ($zip->open('test.zip') === TRUE) {
if($zip->addEmptyDir('newDirectory')) {
echo 'Created a new root directory';
} else {
echo 'Could not create the directory';
}
$zip->close();
} else {
echo 'failed';
}
?>
ZipArchive::addEmptyDir
pagetronic
12-Sep-2008 12:53
12-Sep-2008 12:53
Anonymous
25-Aug-2008 12:28
25-Aug-2008 12:28
Here's a simple recurring function to add a directory, all sub-directories and all files to an already created zip file;
<?php
// Function to recursively add a directory,
// sub-directories and files to a zip archive
function addFolderToZip($dir, $zipArchive){
if (is_dir($dir)) {
if ($dh = opendir($dir)) {
//Add the directory
$zipArchive->addEmptyDir($dir);
// Loop through all the files
while (($file = readdir($dh)) !== false) {
//If it's a folder, run the function again!
if(!is_file($dir . $file)){
// Skip parent and root directories
if( ($file !== ".") && ($file !== "..")){
addFolderToZip($dir . $file . "/", $zipArchive);
}
}else{
// Add the files
$zipArchive->addFile($dir . $file);
}
}
}
}
}
?>
Would be nice to see more input on these functions :)
Dayjo
benjamin dot seiller at antwerpes dot de
21-Jul-2008 01:37
21-Jul-2008 01:37
There is kind of a bug in the method
ZipArchive::addFile
which affects the class ZipFolder below.
It is related to the numer of max filehandles of the OS.
As workaround add a file-counter to the class and close + reopen the archive if a certain number of files (directories count as files!) is reached.
For more details see here:
http://de.php.net/manual/en/function.ziparchive-addfile.php
or go directly here
http://bugs.php.net/bug.php?id=40494
or here
http://pecl.php.net/bugs/bug.php?id=9443
jerome at buttered-cat dot com
15-Oct-2007 10:20
15-Oct-2007 10:20
Here's some code I wrote to add a NON-empty directory to ZipArchive, it's done pretty quickly but so far works great.
<?php
class ZipFolder {
protected $zip;
protected $root;
protected $ignored_names;
function __construct($file, $folder, $ignored=null) {
$this->zip = new ZipArchive();
$this->ignored_names = is_array($ignored) ? $ignored : $ignored ? array($ignored) : array();
if ($this->zip->open($file, ZIPARCHIVE::CREATE)!==TRUE) {
throw new Exception("cannot open <$file>\n");
}
$folder = substr($folder, -1) == '/' ? substr($folder, 0, strlen($folder)-1) : $folder;
if(strstr($folder, '/')) {
$this->root = substr($folder, 0, strrpos($folder, '/')+1);
$folder = substr($folder, strrpos($folder, '/')+1);
}
$this->zip($folder);
$this->zip->close();
}
function zip($folder, $parent=null) {
$full_path = $this->root.$parent.$folder;
$zip_path = $parent.$folder;
$this->zip->addEmptyDir($zip_path);
$dir = new DirectoryIterator($full_path);
foreach($dir as $file) {
if(!$file->isDot()) {
$filename = $file->getFilename();
if(!in_array($filename, $this->ignored_names)) {
if($file->isDir()) {
$this->zip($filename, $zip_path.'/');
}
else {
$this->zip->addFile($full_path.'/'.$filename, $zip_path.'/'.$filename);
}
}
}
}
}
}
// full path used to demonstrate it's root-path stripping ability
$zip = new ZipFolder('/tmp/test.zip', dirname(__FILE__).'/templates/', '.svn');
?>
