Transfira o download do FTP para a saída

Eu estou tentando transmitir / pipe um arquivo para o navegador do usuário através de HTTP do FTP. Ou seja, estou tentando imprimir o conteúdo de um arquivo em um servidor FTP.

Isto é o que eu tenho até agora:

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 se parece com isso:

public function get($path, $stream) {
    ftp_fget($this->ftp, $stream, $path, FTP_BINARY);  // Line 200
}

Com essa abordagem, só posso enviar arquivos pequenos para o navegador do usuário. Para arquivos maiores, nada é impresso e recebo um erro fatal (legível dos logs do Apache):

Erro Fatal do PHP: Permitido tamanho de memória de 16777216 bytes esgotados (tentou alocar 15994881 bytes) em /xxx/ftpconnection.php na linha 200

Eu tentei substituirphp://output comphp://stdout sem sucesso (nada parece ser enviado para o navegador).

Como posso fazer o download eficiente do FTP ao enviar esses dados ao navegador ao mesmo tempo?

Nota: eu não gostaria de usarfile_get_contents('ftp://user:pass@host:port/path/to/file'); ou similar.

questionAnswers(6)

yourAnswerToTheQuestion