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.