WinFuture-Forum.de: Zip-archiv Von Php Automatisch Entpacken Lassen - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

Zip-archiv Von Php Automatisch Entpacken Lassen Probleme mit Klasse "ZipArchive"


#1 Mitglied ist offline   Xenon 

  • Gruppe: aktive Mitglieder
  • Beiträge: 548
  • Beigetreten: 29. Juni 04
  • Reputation: 0
  • Geschlecht:Männlich

geschrieben 11. März 2008 - 19:41

Hi @ll =)

also folgendes:

Ich will, dass ich ein .zip auf meinen Webspace hochlade und dann per PHP automatisch in ein vorgegebendes Verzeichnis entpacken lasse.

Es gibt ja durch Zlib die Klasse "ZipArchive" die ein paar nette Methoden mitbringt...

Zumindest theoretisch.
Um einige Fragen vorweg zu eliminieren:
PHP5 is aktiv (5.2.5)
Zlib is enabled und Zip support auch.

Hier dann mal der Quellcode:
		 
		 $zip = new ZipArchive();
			 $r = $zip->open('cars.zip', ZIPARCHIVE::FL_UNCHANGED);
			 var_dump($r);
			 
			 $r = $zip->extractTo('http://www.w00t-crew.de/');
			 var_dump($r);
			 
			 $r = $zip->close();
			 var_dump($r);


liefert mir folgende Ausgabe:
bool(true) bool(false) bool(true)

sprich: die extractTo() raucht ab.
verzeichnis unter w00t-crew.de hat CHMOD777, genau wie die ausführende .php-Datei.
Vorweg sei gesagt, keine Ahnung was ZIPARCHIVE::FL_UNCHANGED bringt... php.net steht, es würde nur Originaldaten benutzen und keine veränderten...
Hmm, whatever, jedenfalls bringt nur so die open() true ^_^

Weg von den absoluten Pfaden hab ichs dann so angepasst:
		 
   $r = $zip->extractTo('/w00t/');


Kommt das:
Warning: ZipArchive::extractTo() [function.ZipArchive-extractTo]: Permission denied in /www/htdocs/blaah/blubb/etc on line 14


Wieder nich geklappt, keine Permission obwohl CHMOD...
hmm, war mir zu blöd, dann so:
		 
   $r = $zip->extractTo('/');


Wunder? Bringt das:
bool(true) bool(true) bool(true)

Denke mir, geil, funkt! Schaue aufn FTP --> NICHTS... liefert true aber keinerlei Files. Das cars.zip hat nen Ordner "cars" mit 3 .jpg's drinne, weit und breit nichts zu sehen...

Also irgendwo hängts ganz böse.

Hat einer ne Idee?

Danke schonmal ^_^

Gruß
XeNoN
0

Anzeige



#2 Mitglied ist offline   Witi 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.947
  • Beigetreten: 13. Dezember 04
  • Reputation: 43
  • Geschlecht:Männlich
  • Wohnort:Kingsvillage
  • Interessen:Frickeln

geschrieben 11. März 2008 - 22:20

Schon mal ohne ein führendes Slash probiert?
$r = $zip->extractTo('w00t/');

Und lege testhalber mal den Ordner w00t mit entsprechenden Rechten an.
0

#3 Mitglied ist offline   asko 

  • Gruppe: aktive Mitglieder
  • Beiträge: 144
  • Beigetreten: 17. November 02
  • Reputation: 0

geschrieben 12. März 2008 - 08:09

Hallo Xenon,

das hier
$r = $zip->extractTo('http://www.w00t-crew.de/');
kann nicht funktionieren, weil ZipArchive auf Datei-Ebene arbeitet und mit einer URL nichts anfangen kann. Es muß also eine Adresse auf dem Server angegeben werden und keine Webadresse.

Das hier
$r = $zip->extractTo('/w00t/');
wird auch nicht funktionieren, weil der Slash an erster Stelle bedeutet, dass das Verzeichnis w00t vom root ausgehend gesucht wird. Je nach dem wo dein base_dir ist, hast Du so keinen Zugriff auf die oberste Ebene.

Der Pfad muß so angegeben werden wie es Witi schon sagte. Das Verzeichnis sollte existieren und das übergeordnete Verzeichnis, in das die Dateien sollen, muß CHMOD 777 (bei PHP als Fast-CGI 755) haben.

Du brauchst auch keinen Rückgabewert abzulegen. Es sollte reichen wenn Du es so in der Art machst:
$zip = new ZipArchive();
if ($zip->open( 'cars.zip' ) === TRUE)
{
	$zip->extractTo( 'w00t/' );
	$zip->close();
	echo 'Zip-Datei erfolgreich entpackt';
}
else
{
	echo 'Konnte die Zip-Datei nicht entpacken';
}


Nicht vergessen sofort die Rechte der entpackten Dateien zu setzen, sonst kann's ärgerlich werden, wenn der safe_mode On ist. :wink:
0

#4 Mitglied ist offline   Xenon 

  • Gruppe: aktive Mitglieder
  • Beiträge: 548
  • Beigetreten: 29. Juni 04
  • Reputation: 0
  • Geschlecht:Männlich

geschrieben 12. März 2008 - 08:32

Danke für die Antworten. =)

Klingt alles logisch irgendwie :wink:
Bin grade arbeiten, aber werds heut abend mal testen.

Das geile is ja, das mit dem absoluten Pfad hat mir mein Webspace-Provider empfohlen oO
Naja, können ja auch nicht alles wissen...

zum safe_mode:
Gehe stark davon aus, dass dieser aktiv ist.

Mal aus interesse, was wäre die Konsequenz, wenn ich die Rechte nicht setze? Löscht er die Dateien wieder oder wird dann das Skript abgebrochen oder wie?

Wobei, wie is das gemeint "sofort"? Nach dem entpacken, indem ichs Verzeichnis durchlaufe, oder direkt nachm extractTo() ?
Wann überprüft der Safe_mode das?

Fragen über Fragen :imao:

PS: Schicke Seite asko, da schau ich ma rein (Signatur) :)

Dieser Beitrag wurde von Xenon bearbeitet: 12. März 2008 - 08:36

0

#5 Mitglied ist offline   Wiesel 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.989
  • Beigetreten: 09. Mai 06
  • Reputation: 525
  • Geschlecht:unbekannt
  • Wohnort:Punxsutawney, 742 Evergreen Terrace
  • Interessen:Mein Schneckenhaus

geschrieben 12. März 2008 - 08:40

Dein Provider hat Dir empfohlen mit absoluten Pfaden zu arbeite. Richtig. Nur du arbeitest nicht mit absoluten Pfaden.

Bei mir sieht es in etwa so aus

/home/3/mein_user_name@hoster/Unterordner1/unterordner2/ ...

Du musst jetzt also Deinen absoluten Pfad verwenden, in etwa so (ich nehme mal die Fehlermeldung von oben):

/www/htdocs/blaah/blubb/etc/w00t


greets
around the world
0

#6 Mitglied ist offline   asko 

  • Gruppe: aktive Mitglieder
  • Beiträge: 144
  • Beigetreten: 17. November 02
  • Reputation: 0

geschrieben 12. März 2008 - 09:04

Beitrag anzeigenZitat (Xenon: 12.03.2008, 08:32)

Das geile is ja, das mit dem absoluten Pfad hat mir mein Webspace-Provider empfohlen oO
Naja, können ja auch nicht alles wissen...

Das ist ja keine Falschaussage. Mit absoluten Pfaden gibt es da nur keine Verwechselungen, weil man immer vom gleichen Startpunkt ausgeht.


Beitrag anzeigenZitat (Xenon: 12.03.2008, 08:32)

zum safe_mode:
Gehe stark davon aus, dass dieser aktiv ist.

Mal aus interesse, was wäre die Konsequenz, wenn ich die Rechte nicht setze? Löscht er die Dateien wieder oder wird dann das Skript abgebrochen oder wie?

Die Konsequenz wäre, dass die Dateien dann dem User wwwrun gehört. Möchtest Du sie dann später über FTP löschen, funktioniert das nicht, weil Du eben mit deinem Benutzername eingeloggt bist und nicht als wwwrun. Du müsstest dann später also die Dateien mit einem PHP Script löschen, das natürlich erst mal wieder erstellt werden muß.

Beitrag anzeigenZitat (Xenon: 12.03.2008, 08:32)

Wobei, wie is das gemeint "sofort"? Nach dem entpacken, indem ichs Verzeichnis durchlaufe, oder direkt nachm extractTo() ?
Wann überprüft der Safe_mode das?

Sofort heisst sofort. Hochladen, entpacken, Rechte setzen, alles in einem Rutsch. Nur so kann man möglichen Problemen aus dem Weg gehen und vergisst es auch nicht.


Beitrag anzeigenZitat (Xenon: 12.03.2008, 08:32)

PS: Schicke Seite asko, da schau ich ma rein (Signatur) :wink:

Freut mich das sie Dir gefällt. :imao:
0

#7 Mitglied ist offline   Xenon 

  • Gruppe: aktive Mitglieder
  • Beiträge: 548
  • Beigetreten: 29. Juni 04
  • Reputation: 0
  • Geschlecht:Männlich

geschrieben 12. März 2008 - 22:11

Ok, getestet und geht NICHT.

Ich bin überfragt... kommt "Zip-Archiv erfolgreich entpackt" aber keine Dateien in "w00t/"

Ich blicks nich ;)

Dieser Beitrag wurde von Xenon bearbeitet: 12. März 2008 - 22:11

0

#8 Mitglied ist offline   Witi 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.947
  • Beigetreten: 13. Dezember 04
  • Reputation: 43
  • Geschlecht:Männlich
  • Wohnort:Kingsvillage
  • Interessen:Frickeln

geschrieben 13. März 2008 - 07:31

Kannst du davor mal das error reporting einschalten? Das machst du mit
error_reporting(E_ALL)
Unter Umständen könntest du nun eine Fehlermeldung sehen.
0

#9 Mitglied ist offline   Xenon 

  • Gruppe: aktive Mitglieder
  • Beiträge: 548
  • Beigetreten: 29. Juni 04
  • Reputation: 0
  • Geschlecht:Männlich

geschrieben 13. März 2008 - 19:52

hmm, Idiotenfehler ftw :wink:

Hat sich geklärt es funkt jetz..

Prob war: ich hatte die .php-Datei die entpacken soll in der index.php innem div-Container includet.
Die includete Datei lag aber in einen anderen Ordner als die index.php, da hat er wohl dann probs gehabt, von welchem Verzeichnis er nun ausgehen soll ;)

Aber jetz funkts, thx an euch :blink:
0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0