Ik ben bezig een scriptje te schrijven waarmee je een .zip archive kunt maken.
Hiervoor maak ik gebruik van de classe ZipArchive en DirectoryIterator (beide zitten standaard in PHP).
Alles gaat goed totdat ik probeer een subdirectory toe te voegen, dan krijg ik de fout dat er te veel files open zijn.
Het betreft hier de volgende stuk code:
Mijn vraag is nu dus eigenlijk:
Hoe kan ik dit het beste oplossen? Of zijn er makkelijkere manieren om een zip archive te maken met behulp van PHP.
Ik gebruik trouwens PHP versie: 5.2.6RC-3 (gentoo build)
Hiervoor maak ik gebruik van de classe ZipArchive en DirectoryIterator (beide zitten standaard in PHP).
Alles gaat goed totdat ik probeer een subdirectory toe te voegen, dan krijg ik de fout dat er te veel files open zijn.
Heb ondertussen al ondekt dat het een bekende "bug" is bij PHP.Fatal error: Uncaught exception 'RuntimeException' with message 'DirectoryIterator::__construct(/home/joshua/projects/php/testtest/test/): failed to open dir: Too many open files' in /home/joshua/projects/php/test/backup2.class.php:23
Stack trace:
#0 /home/joshua/projects/php/test/backup2.class.php(23): DirectoryIterator->__construct('/home/joshua/pr...')
#1 /home/joshua/projects/php/test/backup2.class.php(15): backup->scanFiles('/home/joshua/pr...')
#2 /home/joshua/projects/php/test/backup2.class.php(30): backup->createZip()
#3 /home/joshua/projects/php/test/backup2.class.php(15): backup->scanFiles('/home/joshua/pr...')
#4 /home/joshua/projects/php/test/backup2.class.php(30): backup->createZip()
#5 /home/joshua/projects/php/test/backup2.class.php(15): backup->scanFiles('/home/joshua/pr...')
#6 /home/joshua/projects/php/test/backup2.class.php(30): backup->createZip()
#7 /home/joshua/projects/php/test/backup2.class.php(15): backup->scanFiles('/home/joshua/pr...')
#8 /home/joshua/projects/php/test/backup2.class.php(3 in /home/joshua/projects/php/test/backup2.class.php on line 23
Het betreft hier de volgende stuk code:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
| <? class backup extends ZipArchive { public $zipFile; public $location; public function __construct($zipFile,$location) { $this->zipFile = $zipFile; //Name of the zip file, don't forget the extension $this->location = $location; //Location of the directory we need to create an archive from. self::createZip($zipFile); //Create the zip file. } public function createZip() { if (self::open($this->zipFile,ZIPARCHIVE::CREATE)) { //It's able to create the zip file. self::scanFiles($this->location); } else { //It's unable to create the zip file. } } public function scanFiles($location) { $dir = new DirectoryIterator($this->location); while ($dir->valid()) { if ($dir->isDir() && !$dir->isDot()) { self::addEmptyDir($dir->current()); self::scanFiles($this->location. "" .$location); } elseif (!$dir->isDot()) { self::addFile($location. "" .$dir->current(),$dir->current()); } $dir->next(); } self::close(); } } ?> |
Mijn vraag is nu dus eigenlijk:
Hoe kan ik dit het beste oplossen? Of zijn er makkelijkere manieren om een zip archive te maken met behulp van PHP.
Ik gebruik trouwens PHP versie: 5.2.6RC-3 (gentoo build)