login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Zip uitpakken

Offline Ultimatum - 03/07/2007 00:45 (laatste wijziging 03/07/2007 19:48)
Avatar van UltimatumPHP expert Het uitpakken van een zipfile gaat goed als er nog niets in een map staat, ga ik een zip uitpakken waar al een foto in de map staat, dan zet hij de foto die er al instond nog een keer in. Dus dan is het dubbel

(Ik heb het hier over een zip automatisch uitpakken op de server )

Dus kan iemand kijken wat er mis is met mijn class?

  1. <?php
  2. class zip extends upload {
  3.  
  4. public function __construct($file, $dir, $category = '') {
  5.  
  6. if(!empty($category)) {
  7.  
  8. $this->directory = $dir .'/'. categoryName($category);
  9.  
  10. } else {
  11.  
  12. $this->directory = $dir;
  13.  
  14. }
  15.  
  16. $zip = zip_open($_FILES[$file]['tmp_name']);
  17. while($zipEntry = zip_read($zip)) {
  18.  
  19. $entry = zip_entry_open($zip, $zipEntry);
  20. $fileName = str_replace(' ', '_', zip_entry_name($zipEntry));
  21. $targetDir = $this->directory .'/'. substr($fileName, 0, strrpos($fileName ,'/'));
  22. $filesize = zip_entry_filesize($zipEntry);
  23.  
  24. if (is_dir($targetDir) || mkdir($targetDir)) {
  25. if ($filesize > 0) {
  26. $contents = zip_entry_read($zipEntry, $filesize);
  27. file_put_contents($this->directory .'/'. $fileName, $contents);
  28. }
  29. }
  30. }
  31. }
  32. }
  33. ?>


Dit hele verhaal werkt, maar ik denk dat het probleem ligt bij die file_put_contents ofzo..

Niemand?

7 antwoorden

Gesponsorde links
Offline smoos - 03/07/2007 21:51
Avatar van smoos PHP gevorderde Als je een eigen server of een virtual server kan regelen (op linux natuurlijk) dan kan je gewoon een linux commanda oproepen om het uit te pakken, lekker simpel
Offline EXcium - 03/07/2007 22:20
Avatar van EXcium Lid Dit vroeg hij niet.
Offline Ultimatum - 03/07/2007 22:49
Avatar van Ultimatum PHP expert Nee inderdaad, dit staat toch in de php categorie? Waarom zou ik dan met Linux willen werken.
Offline JBke - 03/07/2007 22:59 (laatste wijziging 03/07/2007 23:04)
Avatar van JBke PHP gevorderde bouw en functie in om na te gaan of het bestand reeds bestaat of niet met file_exists() anders idd doet hij geen check en pakt hij alle bestanden uit je zip. controle functie is de oplossing.

  1. <?php
  2. if (is_dir($targetDir) || mkdir($targetDir)) {
  3. if ($filesize > 0) {
  4. $contents = zip_entry_read($zipEntry, $filesize);
  5. if (!file_exists($this->directory .'/'. $fileName, $contents)) {
  6. file_put_contents($this->directory .'/'. $fileName, $contents);
  7. } else {
  8. // vraag om bestaand te overschrijven, zo ja delete existing, file_put.
  9. }
  10. }
  11. }
  12. ?>
Offline Ultimatum - 03/07/2007 23:56
Avatar van Ultimatum PHP expert Maar dat dubbele bestand staat niet in de zip, daarom snap ik het niet. Zal zo even die code van je proberen 
Offline JBke - 04/07/2007 00:37
Avatar van JBke PHP gevorderde o ok ja nu zie ik het, ga eens na of je niet heel de dir uitleest ipv enkel het zipje. Kan zijn dat door de zip uit te pakken hij temp files of zo aanmaakt daarna gewoon de dir uitleest en dan met file_put.... het wegschrijft, dan kan je uiteraard uw probleem hebben.
Offline Ultimatum - 04/07/2007 01:04 (laatste wijziging 05/07/2007 02:34)
Avatar van Ultimatum PHP expert Met de file_exists is er jammer genoeg geen verandering...

Hij blijft de foto die er al instaat nog een keer toevoegen..

[update]
Het lukt nog steeds niet, iemand die een idee heeft?

Ik heb ook geprobeerd de map te verwijderen en dan opnieuw aanmaken dan dan bestanden uitpakken, maar weer 1 foto teveel 
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.332s