Estoy tratando de transmitir/canalizar un archivo al navegador del usuario a través de HTTP desde FTP. Es decir, estoy tratando de imprimir el contenido de un archivo en un servidor FTP.Transmitir la descarga de FTP a la salida
Esto es lo que tengo hasta ahora:
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 a esto:
public function get($path, $stream) {
ftp_fget($this->ftp, $stream, $path, FTP_BINARY); // Line 200
}
Con este enfoque, sólo soy capaz de enviar archivos pequeños al navegador del usuario. Para archivos más grandes, nada se imprime y se me sale un error fatal (legible desde los registros de Apache):
PHP Fatal error: Allowed memory size of 16777216 bytes exhausted (tried to allocate 15994881 bytes) in /xxx/ftpconnection.php on line 200
he intentado reemplazar php://output
con php://stdout
sin éxito (nada parece ser enviados al navegador).
¿Cómo puedo descargar de manera eficiente desde FTP mientras envío esos datos al navegador al mismo tiempo?
Nota: No me gustaría usar file_get_contents('ftp://user:[email protected]:port/path/to/file');
o similar.
¡Estaría realmente interesado en esta respuesta también! – knittl