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.

questionAnswers(6)

yourAnswerToTheQuestion