Walter: *.tar.gz mit PHP entpacken

Hallo!

Die Datei  "zahlen.tar.gz"  enthält folgende Dateien:

1.txt
2.txt
3.txt

Folgendes PHP Script wird ausgeführt:

<pre>
<?php echo system('tar xzvf zahlen.tar.gz'); ?>
</pre>

Die Ausgabe im Browser sieht so aus:

zahlen/
zahlen/1.txt
zahlen/2.txt
zahlen/3.txt
zahlen/3.txt

Warum steht da zwei mal die Zeile mit 3.txt ?
3.txt wird scheinbar zwei mal entpackt.

Ich habe es auch schon mit anderen *.tar.gz  Archiven probiert,
die letzte Datei die entpackt wird, wird immer doppelt angeführt.

In der Shell passiert der Fehler nicht.

Ausgabe der Shell:

zahlen/
zahlen/1.txt
zahlen/2.txt
zahlen/3.txt

Was ist da los,  wie verhindere ich dass das PHP Script
die letzte Datei immer scheinbar doppelt entpackt?

Ist "system" vielleicht der falsche Befehl?

Danke, Werner

  1. Holladiewaldfee,

    Warum steht da zwei mal die Zeile mit 3.txt ?
    3.txt wird scheinbar zwei mal entpackt.

    Hm, nicht ganz einfach ;-)
    Prinzipiell sollte system() nur die letzte Zeile der Ausgabe zurückgeben. Allerdings scheint es, als würde zunächst die Ausgabe nach STDOUT des Programms an PHP weitergegeben, das die Sache dann einfach weiter an den Browser schickt. Die letzte Zeile schließlich (also die doppelte) sollte das eigentliche Ergenis des echo sein.

    Probier doch mal, was passiert wenn Du das echo weglässt:

    <pre>
    <?php system('tar xzvf zahlen.tar.gz'); ?>
    </pre>

    Wenn ich richtig liege sollte dann die doppelte letzte Zeile verschwinden.

    http://de3.php.net/manual/en/function.system.php

    Ciao,

    Harry

    --
      Irgendwann kommt die Waldfee - oder auch nicht ... (Projektphase: Keine Ahnung)
      Bis dahin:
      Ski- und Bergtouren in den Tölzer Voralpen und im Karwendel
  2. Hi,

    die Option -v zeigt sämtliche entpackten Dateien in der Console an. Wenn du das weglässt, wird gar nix mehr von den Dateinamen angezeigt.

    Ansonsten, wie schon gesagt, das echo weglassen, da system() in diesem Fall schon selbst eine Ausgabe erzeugt und die letze Zeile der eigentliche Rückgabewert ist.