Próbuję przesyłać strumieniowo/potokować plik do przeglądarki użytkownika poprzez HTTP z FTP. To znaczy, próbuję wydrukować zawartość pliku na serwerze FTP.Strumień FTP do pobrania na wyjście
To, co mam tak daleko:
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
wygląda następująco:
public function get($path, $stream) {
ftp_fget($this->ftp, $stream, $path, FTP_BINARY); // Line 200
}
Dzięki takiemu podejściu, jestem w stanie jedynie do wysyłania małych plików do przeglądarki użytkownika. W przypadku większych plików, nic nie zostanie wydrukowany i otrzymuję błąd krytyczny (odczytać z logów Apache):
PHP Fatal error: Allowed memory size of 16777216 bytes exhausted (tried to allocate 15994881 bytes) in /xxx/ftpconnection.php on line 200
Próbowałem zastępując php://output
z php://stdout
bez powodzenia (nic nie wydaje się być wysyłane do przeglądarki).
Jak skutecznie pobierać z serwera FTP podczas wysyłania tych danych do przeglądarki w tym samym czasie?
Uwaga: Nie chciałbym używać file_get_contents('ftp://user:[email protected]:port/path/to/file');
lub podobnego.
Byłbym też bardzo zainteresowany tą odpowiedzią! – knittl