Hallo,
ich habe ein Script erstellt, welches eine Zip erstellt und anschließend festlegt mit welcher Downloadrate diese Zip-Datei heruntergeladen werden kann. Der Name der Zip-Datei wird vom Besucher über den Link bestimmt. Beispiel: http://domain.tld/zip.php?dl=archive.zip
Leider hat sich wohl ein (oder mehrere?) fehler eingeschlichen.
Deshalb folgt das fehlerhafte Script, welches aus den zwei darauffolenden einzelnen Scripten beruht. Dessen Funktionen habe ich ebenfalls kommentiert
----------------------------------------------
Der erste Teil des oberen Scriptes funktioniert, wenn man es einzeln als eigenständiges Script nutzt (Zip-Creator erstellt dynamische Zip-Datei mittels Angabe eines Ordners auf dem Server):
------------
Das zweite Script funktioniert als eigenständiges Script ebenfalls wie gewünscht und gibt die Downloadgeschwindigkeit beim Download einer Datei (hier "datei.zip") an:
Das ist mein erster Beitrag. Bitte nehmt Rücksicht auf mich, falls was nicht in Ordnung ist mit diesem Posting. Viele Grüße, Dennis
ich habe ein Script erstellt, welches eine Zip erstellt und anschließend festlegt mit welcher Downloadrate diese Zip-Datei heruntergeladen werden kann. Der Name der Zip-Datei wird vom Besucher über den Link bestimmt. Beispiel: http://domain.tld/zip.php?dl=archive.zip
Leider hat sich wohl ein (oder mehrere?) fehler eingeschlichen.
Deshalb folgt das fehlerhafte Script, welches aus den zwei darauffolenden einzelnen Scripten beruht. Dessen Funktionen habe ich ebenfalls kommentiert
PHP-Code:
<?php
// Startet den Buffer, sodass keine Header-Fehlermeldungen entstehen.
ob_start();
// Läd die Zip-Library
require("zip.lib.php");
// Erstellt eine neue Zipdatei
if (isset($_GET['dl'])) $file = $_GET['dl']; else die();
$zipfile = new zipfile("$file");
// Fügt die Classe DeepDir.php ein.
require_once("DeepDir.php");
// Verzeichnispfad eintragen (Inhalt des "Uordner" wird gezippt, Ordnerstruktur bleibt erhalten!)
$dir = new DeepDir();
$dir->setDir("NAME_UNTERORDNER_AUF_SERVER");
$dir->load();
foreach( $dir->files as $n => $pathToFile ){
$zipfile->addFileAndRead("$pathToFile");
}
// Wenn einzelne Dateien oben eingetragen werden dann die untere Zeile aktivieren
// $zipfile->addFileAndRead("$zip_datei");
ob_start();
// Gibt die Zip-Datei aus.
$zipfile->pparse();
ob_end_clean();
$page = ob_get_contents();
ob_end_clean();
$filedown = "$page"; // Datei zum Herunterladen
$speed = 6; // Downloadrate, hier 6 kb/s
header("Cache-control: private"); // Überlässt die Kontrolle der Dateiübertragung dem Script
header("Content-Type: application/octet-stream"); // Setzt den Header zum Download
header("Content-Length: ".filesize($filedown)); // Gibt die Dateigröße an
header("Content-Disposition: filename=$filedown"); // Definiert, wo die Datei liegt.
flush(); // Leert den Zwischenspeicher
$fd = fopen($filedown, "w"); // Öffnet die Datei zum Lesen
while(!feof($fd)) {
echo fread($fd, round($speed*1024)); // Liest und sendet exakt soviel KB, wie angegeben
flush(); // Leert wieder den Zwischenspeicher
sleep(1); // Setzt das Script für 1 Sekunde aus
fputs($fd,$filedown, strlen($filedown));
}
fclose ($fd);
?>
----------------------------------------------
Der erste Teil des oberen Scriptes funktioniert, wenn man es einzeln als eigenständiges Script nutzt (Zip-Creator erstellt dynamische Zip-Datei mittels Angabe eines Ordners auf dem Server):
PHP-Code:
<?php
// Startet den Buffer, sodass keine Header-Fehlermeldungen entstehen.
ob_start();
// Läd die Zip-Library
require("zip.lib.php");
// Erstellt eine neue Zipdatei
if (isset($_GET['dl'])) $file = $_GET['dl']; else die();
$zipfile = new zipfile("$file");
// Fügt die Classe DeepDir.php ein.
require_once("DeepDir.php");
// Verzeichnispfad eintragen (Inhalt des "Uordner" wird gezippt, Ordnerstruktur bleibt erhalten!)
$dir = new DeepDir();
$dir->setDir("NAME_UNTERORDNER_AUF_SERVER");
$dir->load();
foreach( $dir->files as $n => $pathToFile ){
$zipfile->addFileAndRead("$pathToFile");
}
// Wenn einzelne Dateien oben eingetragen werden dann die untere Zeile aktivieren
// $zipfile->addFileAndRead("$zip_datei");
// Gibt die Zip-Datei aus.
echo $zipfile->file();
?>
Das zweite Script funktioniert als eigenständiges Script ebenfalls wie gewünscht und gibt die Downloadgeschwindigkeit beim Download einer Datei (hier "datei.zip") an:
PHP-Code:
<?php
if (isset($_GET['dl'])) $file = $_GET['dl']; else die();
// $file = "datei.zip"; DIESE ZEILE WIRD N I C H T MEHR BENUTZT !!!
$speed = 6; // Downloadrate, hier 6 kb/s
if(file_exists($file) && is_file($file)) { // Prüfung auf Existenz der Datei
header("Cache-control: private"); // Überlässt die Kontrolle der Dateiübertragung dem Script
header("Content-Type: application/octet-stream"); // Setzt den Header zum Download
header("Content-Length: ".filesize($file)); // Gibt die Dateigröße an
header("Content-Disposition: filename=$file"); // Definiert, wo die Datei liegt.
flush(); // Leert den Zwischenspeicher
$fd = fopen($file, "r"); // Öffnet die Datei zum Lesen
while(!feof($fd)) {
echo fread($fd, round($speed*1024)); // Liest und sendet exakt soviel KB, wie angegeben
flush(); // Leert wieder den Zwischenspeicher
sleep(1); // Setzt das Script für 1 Sekunde aus
}
fclose ($fd);
}
?>
Kommentar