Ich versuche, eine Datei über HTTP vom FTP-Server zum Browser des Benutzers zu streamen/zu pipen. Das heißt, ich versuche, den Inhalt einer Datei auf einem FTP-Server zu drucken.Stream FTP-Download zur Ausgabe
Dies ist, was ich bisher:
public function echo_contents() {
$file = fopen('php://output', 'w+');
if(!$file) {
throw new Exception('Unable to open output');
}
try {
$this->ftp->get($this->path, $file);
} catch(Exception $e) {
fclose($file); // wtb finally
throw $e;
}
fclose($file);
}
$this->ftp->get
sieht wie folgt aus:
public function get($path, $stream) {
ftp_fget($this->ftp, $stream, $path, FTP_BINARY); // Line 200
}
Mit diesem Ansatz, ich bin nur in der Lage kleine Dateien an den Browser des Benutzers zu senden. Für größere Dateien, wird nichts gedruckt, und ich bekomme einen fatalen Fehler (lesbar von Apache-Logs):
PHP Fatal error: Allowed memory size of 16777216 bytes exhausted (tried to allocate 15994881 bytes) in /xxx/ftpconnection.php on line 200
versuchte ich php://output
mit php://stdout
ohne Erfolg zu ersetzen (es scheint nichts an den Browser gesendet zu werden).
Wie kann ich effizient von FTP herunterladen, während ich diese Daten gleichzeitig an den Browser sende?
Hinweis: Ich möchte nicht file_get_contents('ftp://user:[email protected]:port/path/to/file');
oder ähnliches verwenden.
ich würde wirklich an dieser Antwort auch interessiert sein! – knittl