Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   ZipArchives (https://www.delphipraxis.net/165353-ziparchives.html)

RWarnecke 25. Dez 2011 19:32

ZipArchives
 
Hallo zusammen,

ich erzeuge online auf einem Webserver ein ZIP Archiv. Das funktioniert auch wunderbar, nur leider zeigt er mir erst bei einem Refresh die richtige Dateigröße an :
Code:
    function downloadDirZIP($zipcontent, $zipname)
    {
    $zipfilename = $zipname.".zip";
    chdir("/var/www/domain/httpdocs/tmp/");
    ftp_sync($_SESSION['cid'],$zipcontent);
    $ar_zipfiles = ftpRecursiveFileListing($_SESSION['cid'],'/'.$zipcontent);
    $zip = new ZipArchive();
    if ($zip->open("./".$zipfilename, ZIPARCHIVE::CREATE)!==TRUE) {
    exit("ZIP-Archive <$zipfilename> konnte nicht geöffnet werden.\n");
    }
    // Add the selected files and directories to the zip archive
    foreach ($ar_zipfiles as $k => $v) {
    for($i=0; $i<="" code="">
    if (!is_dir("./".$k."/".$ar_zipfiles[$k][$i])) {
    $zip->addFile("./".$k."/".$ar_zipfiles[$k][$i], $k."/".$ar_zipfiles[$k][$i]);
    }
    }
    }
    // To close the zip archive
    $zip->close;
    echo "Dateigröße 1 : ".filesize("./".$zipfilename)."
    ";
    }
Meine Vermutung geht dahin, dass die ZIP-Funktion close noch nicht komplett ausgeführt wird und ich deshalb keine Dateigröße angezeigt bekomme. Liege ich mit meiner Vermutung richtig und/oder wo ist der Fehler ?

Crosspost hier.

Gruß
Rolf

RWarnecke 29. Dez 2011 04:27

AW: ZipArchives
 
Hallo zusammen,

hat keiner eine Idee oder vielleicht eine Lösung, warum keine Dateigröße angezeigt wird ?

himitsu 29. Dez 2011 08:41

AW: ZipArchives
 
Hmmm, du könntest über den HTTP-Header oder via Meta-Tag sagen, daß sich diese HTML/Text-Datei oft ändert und der Browser sie jedemal komplett laden soll.

franktron 29. Dez 2011 08:45

AW: ZipArchives
 
Warum machst du das chdir("/var/www/domain/httpdocs/tmp/");
und gibst es nicht im Filename mit an ?

Was sagen den die Apache Logs ?

RWarnecke 29. Dez 2011 13:03

AW: ZipArchives
 
Zitat:

Zitat von franktron (Beitrag 1143563)
Warum machst du das chdir("/var/www/domain/httpdocs/tmp/");
und gibst es nicht im Filename mit an ?

Ich hatte Probleme bei der Pfadzusammensetzung.

Zitat:

Zitat von franktron (Beitrag 1143563)
Was sagen den die Apache Logs ?

Die Apache-LOGs zeigen keinen Fehler.
Das Problem mit der Anzeige der Dateigröße besteht nur dann, wenn die Datei in dem TMP-Verzeichnis noch nicht existiert.

Zitat:

Zitat von himitsu (Beitrag 1143562)
Hmmm, du könntest über den HTTP-Header oder via Meta-Tag sagen, daß sich diese HTML/Text-Datei oft ändert und der Browser sie jedemal komplett laden soll.

Ich kann ja im Header nicht die Dateigröße angeben, wenn ich diese vorher nicht bestimmen kann. Das Ergebnis von filesize läuft normal in eine Variable. Ich habe hier lediglich nur ein Echo eingebaut, damit ich weiß was filesize zurück gibt.

Luckie 29. Dez 2011 13:10

AW: ZipArchives
 
Zitat:

Zitat von RWarnecke (Beitrag 1143121)
Meine Vermutung geht dahin, dass die ZIP-Funktion close noch nicht komplett ausgeführt wird und ich deshalb keine Dateigröße angezeigt bekomme.

Das kann es nicht sein, da du keine Threads benutzt. Die Anweisungen werden also sequenziell abgearbeitet.

RWarnecke 29. Dez 2011 13:12

AW: ZipArchives
 
Zitat:

Zitat von Luckie (Beitrag 1143607)
Das kann es nicht sein, da du keine Threads benutzt. Die Anweisungen werden also sequenziell abgearbeitet.

Hallo Michael, es war ja nur eine Vermutung. Danke für den Hinweis.

himitsu 29. Dez 2011 13:14

AW: ZipArchives
 
Es könnte auch am Dateisystemcache des Apache liegen.

Es gibt da irgendwo einen PHP-Befehl, um Diesen zu leeren. (aber sei sparsam mit sowas)
Also nach dem Erstellen der Datei.



Nee, daß die Dateigröße selber nicht in den Header kommt, ist auch klar. Du gibst ja nicht die Zip-Datei zurück, aber bei sowas würde es sich anbieten (die Dateigröße im HTTP-Header wird in vielen Downloadscripten gerne vergessen).

Aber daß beim näcsten Laden die datei neu vom Server abgefragt und nicht einfach die Browsercache verwendet wird, daß kann man beeinflussen.
Also wenn das Problem in dieser Browsercache liegen würde.

RWarnecke 29. Dez 2011 13:29

AW: ZipArchives
 
Zitat:

Zitat von himitsu (Beitrag 1143610)
Es könnte auch am Dateisystemcache des Apache liegen.

Es gibt da irgendwo einen PHP-Befehl, um Diesen zu leeren. (aber sei sparsam mit sowas)
Also nach dem Erstellen der Datei.

Ich verstehe da den Zusammenhang mit dem Cache noch nicht, da die richtige Dateigröße ja nach dem zweiten Mal ausführen richtig von filesize zurückgegeben wird.

himitsu 29. Dez 2011 13:31

AW: ZipArchives
 
Wenn filesize in der "alten" Cache die Dateigröße ausließt, dann muß Diese nicht mit der Datei im "aktuelleren" Dateisystem übereinstimmen. :zwinker:

Ich hatte da mal das Problem, daß eine gelöschte Datei noch für eine Weile als existent angezeigt wurde.
Als ich dann die Cache geleert hatte, ging es plötzlich.

RWarnecke 29. Dez 2011 15:52

AW: ZipArchives
 
Hallo

ich habe da den Befehl
Code:
clearstatcache();
gefunden. Laut Beschreibung löscht er den Cache, wo auch filesize drauf zugreift. Er wirkt nur nicht. Die Dateigröße wird trotzdem nicht angezeigt. Wenn ich jetzt statt dem Echo mit filesize eine file_exists-Abfrage durchführe, fällt diese immer False aus. Das heißt er gibt mir an, dass die ZIP-Datei nicht vorhanden ist. Schaue ich per FTP in das Verzeichnis, ist die Datei vorhanden.

Irgendwie bin ich mit meinem Latein am Ende. Hat noch jemand eine Idee ?

Edit:
Wenn ich jetzt direkt nach dem $zip->close; folgendes einsetze :
Code:
$adresse = "/var/www/domain/httpdocs/tmp/"; // Pfad angeben
$verz = openDir($adresse);
while ($file = readDir($verz)) {
  echo $file . "<br>";
}
closeDir($verz);
Fehlt die Zip-Datei in der Ausgabe.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:07 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz