php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2009

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 15.11.2009, 14:34  
Neuer Benutzer
 
Registriert seit: 18.08.2008
Beiträge: 29
PHP-Kenntnisse:
Fortgeschritten
deMaddin befindet sich auf einem aufstrebenden Ast
deMaddin eine Nachricht über ICQ schicken deMaddin eine Nachricht über MSN schicken
Standard [Erledigt] ZipArchive: Vorhandene Dateien beim entpacken überschreiben?

Moin.

Arbeite mit meinem Framework an einem PIP (PackageInstallationPlugin), welches die Paketinformationen aus einer package.xml ausliest und das Paket installiert. Funktioniert auch alles soweit.

Nun soll er auch noch Dateien installieren. Die Dateien werden als files.zip in dem Paket selbst gepackt und vom System auf ../ entpackt (../ ist das Standardverzeichniss vom System, ausgehend aus ./acp).

Das Entpacken von neuen Dateien aus files.zip funktioniert, wenn er allerdings eine Datei entpacken soll, die bereits existiert, überschreibt er die alte nicht. An den Dateiberechtigungen liegt es nicht; habe per chmod -R 0777 in der Komandozeile alle Dateien global beschreibbar gemacht, trotzdem gleiches Problem

Fehlermeldungen kommen keine.

Folgendermaßen wird das Archiv geöffnet:
PHP-Code:
    public function openArchive() {
        if (
$this->isOpened) return;

        
//create new archive object
        
$this->archive = new ZipArchive();

        
//open the archive
        
$this->file $this->archive->open($this->archiveName);

        
//archive is opened now
        
$this->isOpened true;
    } 
Habe btw. auch das setzen von den Flags ZipArchive::CHECKCONS, ZipArchive::OVERWRITE und ZipArchive::EXCL probiert, jedoch ohne Erfolg.

Hier einige Daten zum System:
PHP Version: 5.3.0
System: Ubuntu Netbook Remix 9.10 (läuft auf LAMPP) [Linux darwin 2.6.31-14-generic #48-Ubuntu SMP Fri Oct 16 14:04:26 UTC 2009 i686]
API: Apache 2.0 Handler
Registered PHP Streams: https, ftps, compress.zlib, compress.bzip2, php, file, glob, data, http, ftp, phar, zip
Zip-based phar archives: enabled
Zip: enabled


Am System sollte es nicht liegen...

Gibt es eine Lösung, das vorhandene Dateien beim Entpacken eines ZIP-Archives (per ZipArchive::extractTo()) überschrieben werden?

Gruß,
deMaddin
deMaddin ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 15.11.2009, 16:21  
Erfahrener Benutzer
 
Benutzerbild von jw-lighting
 
Registriert seit: 25.03.2009
Beiträge: 126
PHP-Kenntnisse:
Fortgeschritten
jw-lighting befindet sich auf einem aufstrebenden Ast
jw-lighting eine Nachricht über ICQ schicken
Standard

Hast du schon versucht, vor dem speichern der Datei aus dem Archiv eine evtl. alte Datei erst zu löschen?
__________________
jw-lighting ist offline  
Alt 15.11.2009, 17:13  
Neuer Benutzer
 
Registriert seit: 18.08.2008
Beiträge: 29
PHP-Kenntnisse:
Fortgeschritten
deMaddin befindet sich auf einem aufstrebenden Ast
deMaddin eine Nachricht über ICQ schicken deMaddin eine Nachricht über MSN schicken
Standard

Meinst du es so (Anhand eines Beispiels mit ./acp/test.php):
1. ./acp/test.php auf dem Server (=alte Datei, welche mit der test.php aus dem Archiv überschrieben werden soll) von Hand löschen
2. files.zip (mit der neueren Version von ./acp/test.php) auf dem Server mit PHP entpacken

In dem Fall könnte ich es zwar so machen (neue Dateien, welche bisher auf dem Server nicht existieren, lädt er ja auch ohne Probleme beim entpacken hoch), aber damit würde der Sinn des Programmes verfehlt werden... schließlich soll das Paket neue Dateien enthalten, welche die alten überschreiben- und bei der Installation soll man nichts anderes machen müssen, als das Paket (mit der package.xml und den Dateien) auf den Server zu laden und im ACP das Setup zu starten.
deMaddin ist offline  
Alt 15.11.2009, 18:34  
Erfahrener Benutzer
 
Benutzerbild von jw-lighting
 
Registriert seit: 25.03.2009
Beiträge: 126
PHP-Kenntnisse:
Fortgeschritten
jw-lighting befindet sich auf einem aufstrebenden Ast
jw-lighting eine Nachricht über ICQ schicken
Standard

mit per Hand machen meine ich die verwendung von unlink

Du müsstest also eine Liste mit allen im Archiv vorhanden Datein haben, die du im Programm mit dem lokalen Dateisystem vergleichst. Wenn das Script dann feststellt, das es eine Datei schon gibt, die auch im Archiv vorhanden ist, also überschrieben werden musst, kann das Script sie dann vor'm entpacken mit unlink löschen.
__________________
jw-lighting ist offline  
Alt 15.11.2009, 18:54  
Neuer Benutzer
 
Registriert seit: 18.08.2008
Beiträge: 29
PHP-Kenntnisse:
Fortgeschritten
deMaddin befindet sich auf einem aufstrebenden Ast
deMaddin eine Nachricht über ICQ schicken deMaddin eine Nachricht über MSN schicken
Standard

Das habe ich mir auch schon überlegt.
Die Frage ist: Wie bekomme ich eine Liste der Dateien, die ich per Verwendung von foreach() o.ä. mit den richtigen Unterverzeichnissen einfach auslesen kann?
deMaddin ist offline  
Alt 15.11.2009, 22:06  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.990
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

lass mich das für dich Googlen
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist gerade online  
Alt 16.11.2009, 19:28  
Neuer Benutzer
 
Registriert seit: 18.08.2008
Beiträge: 29
PHP-Kenntnisse:
Fortgeschritten
deMaddin befindet sich auf einem aufstrebenden Ast
deMaddin eine Nachricht über ICQ schicken deMaddin eine Nachricht über MSN schicken
Standard

Thx .
Kannte bereits eine ähnliche Funktion von readdir() (welche auch auf PHP.net bei ZipArchive gezeigt wurde), wusste aber nicht, wie ich die Dateien dann auslesen soll.

Hier meine Lösung (bzw. die Lösung zusammengefasst in eine Funktion):
PHP-Code:
    public function openDir($dir$subdir false) {
        
//reset variable- no files have been added to the list yet
        
$files = array();

        
//add trailing slash
        
if ($dir{strlen($dir)-1} != '/') {
            
$dir .= '/';
        }

        
//open dir
        
if ($handle opendir($dir)) {
            while ((
$file readdir($handle)) !== false) {
                
//if this file is a dir, open the dir and read the sub files
                
if (is_dir($dir.$file)) {
                    
//ignore relative directorys "." and ".." (current and parent directory)
                    
if ($file != '.' && $file != '..') {
                        
//open sub dir
                        
foreach ($this->openDir($dir.$filetrue) as $newFile) {
                            
//add files from the sub dir with the right path to the file list
                            
if (!$subdir) {
                                
$files[] = $dir.$file.'/'.$newFile;
                            }else{
                                
$files[] = $newFile;
                            }
                        }
                    }
                }else{
                    
//this is a file- add it to the file list
                    
if (!$subdir) {
                        
//this is not inserted by a sub file- add the path including the path
                        
$files[] = $dir.$file;
                    }else{
                        
//dont add the path, only add the file
                        
$files[] = $file;
                    }
                }
            }
        }

        
//return file list with right paths
        
return $files;
    } 
deMaddin ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
ZIP entpacken und Ordnerstruktur übernehmen webproger PHP Tipps 2009 4 26.07.2009 15:46
Dateien verschieben entpacken usw. xe0n PHP Tipps 2009 2 14.05.2009 21:18
Entpacken von zip Dateien mit PHP Mila2008 PHP Tipps 2008 8 18.11.2008 16:23
PHP Dateien verschlüsseln GSJLink PHP-Fortgeschrittene 2 26.04.2008 12:29
[Logik] Mehrere Dateien als Anhang per Formular versenden PsychoEagle PHP Tipps 2008 2 27.08.2007 08:58
Dateien entpacken (GZIP) PHP Tipps 2006 2 26.01.2006 13:46
Zip-File entpacken Juuro PHP Tipps 2005-2 10 07.06.2005 22:26
Dateien entpacken msdose PHP Tipps 2005 6 22.02.2005 11:04
[Erledigt] Dateien aus Verzeichnissen vom Webserver auslesen und linken PHP Tipps 2004 3 08.09.2004 10:07

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
ubuntu zip entpacken, pkg entpacken, linux entpacken überschreiben, ubuntu server zip entpacken, linux entpacken und überschreiben, pkg datei entpacken, package dateien entpacken, zip entpacken ubuntu, linux zip entpacken überschreiben, zip ubuntu entpacken, unzip dateien überschreiben, php 5.3 entpacken zip, entpacken linux überschrieben, zip dateien entpacken zu package, ubuntu php ziparchive, zip entpacken php linux, linux zip entpacken, welches programm entpackt und überschreibt?, datei entpacken und überschreiben, ubuntu 9.10 zip entpacken

Alle Zeitangaben in WEZ +2. Es ist jetzt 20:44 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum