9
votes

Création et téléchargement d'un fichier en PHP sur un serveur FTP sans économiser localement

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, $ out out étant une chaîne contenant le fichier texte complet: xxx < p> Ceci fonctionne lorsque je veux simplement exécuter le script dans un navigateur et télécharger le fichier, mais je cherche à l'envoyer à la place à un serveur FTP.

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 ftp_put () , mais je cherche à prendre $ OUT et écrivez-le directement sous forme de fichier avec $ FileName comme nom sur le serveur FTP. Je suis peut-être mal interprété des choses, mais quand j'ai essayé ftp_put et ftp_fput , 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?


0 commentaires

4 Réponses :


3
votes

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 xxx

dans ce cas Vous n'avez pas besoin d'envoyer les en-têtes que vous envoyiez dans votre exemple.


1 commentaires

Y a-t-il un moyen de le faire sans créer un fichier sur le système de fichiers?



21
votes

J'ai répondu ici au lieu des commentaires depuis que les commentaires ignorent le formatage du code.

Vous pouvez essayer: xxx

Ceci créera un flux temporaire sans l'écrire sur le disque. Je ne connais pas d'autre manière


0 commentaires

8
votes

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.');


0 commentaires

3
votes

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);


0 commentaires