J'essaie de flux/pipe d'un fichier dans le navigateur de l'utilisateur via HTTP à partir de FTP. Autrement dit, j'essaie d'imprimer le contenu d'un fichier sur un serveur FTP.Stream FTP téléchargement à la sortie
C'est ce que j'ai jusqu'à présent:
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
ressemble à ceci:
public function get($path, $stream) {
ftp_fget($this->ftp, $stream, $path, FTP_BINARY); // Line 200
}
Avec cette approche, je ne suis en mesure d'envoyer de petits fichiers au navigateur de l'utilisateur. Pour des fichiers plus volumineux, rien est imprimé et je reçois une erreur fatale (lisible à partir des journaux Apache):
PHP Fatal error: Allowed memory size of 16777216 bytes exhausted (tried to allocate 15994881 bytes) in /xxx/ftpconnection.php on line 200
J'ai essayé de remplacer php://output
avec php://stdout
sans succès (rien ne semble être envoyé au navigateur).
Comment puis-je télécharger efficacement à partir du FTP tout en envoyant ces données au navigateur en même temps?
Remarque: Je ne voudrais pas utiliser file_get_contents('ftp://user:[email protected]:port/path/to/file');
ou similaire.
Je serais vraiment intéressé par cette réponse aussi! – knittl