Przesyłanie strumieniowe FTP na wyjście
Próbuję przesłać strumieniowo plik do przeglądarki użytkownika za pomocą protokołu HTTP z FTP. To znaczy próbuję wydrukować zawartość pliku na serwerze FTP.
Oto, co mam do tej pory:
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 tak:
public function get($path, $stream) {
ftp_fget($this->ftp, $stream, $path, FTP_BINARY); // Line 200
}
Dzięki takiemu podejściu mogę przesyłać tylko małe pliki do przeglądarki użytkownika. W przypadku większych plików nic nie jest drukowane i pojawia się błąd krytyczny (możliwy do odczytania z dzienników Apache):
Błąd fatalny PHP: Dozwolona wielkość pamięci 16777216 bajtów wyczerpana (próbowano przydzielić 15994881 bajtów) w /xxx/ftpconnection.php w linii 200
Próbowałem wymienićphp://output
zphp://stdout
bez powodzenia (nic nie wydaje się być wysyłane do przeglądarki).
Jak mogę efektywnie pobierać z FTP podczas jednoczesnego wysyłania tych danych do przeglądarki?
Uwaga: nie chciałbym używaćfile_get_contents('ftp://user:pass@host:port/path/to/file');
lub podobne.