J'ai un problème à connecter deux processus différents que j'ai travaillé. J'ai été chargé de tirer des données d'une base de données, de créer un fichier à partir des données, puis de le télécharger sur un serveur FTP.
Jusqu'à présent, j'ai le fichier créé et téléchargeable à l'aide de ce code, Je connais ma connexion au serveur FTP est Travailler juste, et je navigue correctement au bon répertoire, et j'ai pris des fichiers de disque et les mettre sur le FTP à l'aide de $ out out code> étant une chaîne contenant le fichier texte complet: p>
ftp_put () code>, mais je cherche à prendre
$ OUT CODE> et écrivez-le directement sous forme de fichier avec
$ FileName code> comme nom sur le serveur FTP. Je suis peut-être mal interprété des choses, mais quand j'ai essayé
ftp_put code> et
ftp_fput code>, il semblait qu'ils veulent des emplacements de fichiers, pas des flux de fichiers. Y a-t-il une fonction différente que je pourrais envisager? p> p>
4 Réponses :
En réalité FTP_PLUT attend le chemin du fichier local (en tant que chaîne), essayez donc d'écrire les données dans un fichier temporaire, puis ftp_pissez-le sur le serveur dans ce cas Vous n'avez pas besoin d'envoyer les en-têtes que vous envoyiez dans votre exemple. p> p>
Y a-t-il un moyen de le faire sans créer un fichier sur le système de fichiers?
J'ai répondu ici au lieu des commentaires depuis que les commentaires ignorent le formatage du code.
Vous pouvez essayer: p> Ceci créera un flux temporaire sans l'écrire sur le disque. Je ne connais pas d'autre manière p> p>
voici solution de MATEI d'en haut comme fonction complète FTP_FILE_PUT_Contents ():
function ftp_file_put_contents($remote_file, $file_string) { // FTP login details $ftp_server='my-ftp-server.de'; $ftp_user_name='my-username'; $ftp_user_pass='my-password'; // Create temporary file $local_file=fopen('php://temp', 'r+'); fwrite($local_file, $file_string); rewind($local_file); // FTP connection $ftp_conn=ftp_connect($ftp_server); // FTP login @$login_result=ftp_login($ftp_conn, $ftp_user_name, $ftp_user_pass); // FTP upload if($login_result) $upload_result=ftp_fput($ftp_conn, $remote_file, $local_file, FTP_ASCII); // Error handling if(!$login_result or !$upload_result) { echo('<p>FTP error: The file could not be written to the FTP server.</p>'); } // Close FTP connection ftp_close($ftp_conn); // Close file handle fclose($local_file); } // Function call ftp_file_put_contents('my-file.txt', 'This text will be written to your text file via FTP.');
La solution la plus simple utilise File_put_contents Code>
avec wrapper d'URL FTP :
$conn_id = ftp_connect('hostname'); ftp_login($conn_id, 'username', 'password'); ftp_pasv($conn_id, true); $h = fopen('php://temp', 'r+'); fwrite($h, $out); rewind($h); ftp_fput($conn_id, '/path/to/file', $h, FTP_BINARY, 0); fclose($h); ftp_close($conn_id);