Création et chargement d'un fichier en PHP sur un serveur FTP sans enregistrement local
Je vais avoir un problème de connexion à deux processus différents que j'ai de travail. J'ai été chargé d'extraire les données d'une base de données, la création d'un fichier de données, puis de le télécharger vers un serveur FTP.
Jusqu'à présent, j'ai le fichier en cours de création et téléchargeable à l'aide de ce code, $out
étant une chaîne qui contient le texte complet du fichier:
if ($output == 'file')
{
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Content-Length: ".strlen($out));
header("Content-type: application/txt");
header("Content-Disposition: attachment; filename=".$file_name);
echo($out);
}
Cela fonctionne quand je veux, il suffit d'exécuter le script dans un navigateur et télécharger le fichier, mais je suis à la recherche à la place de l'envoyer à un serveur FTP.
Je sais que ma connexion au serveur FTP fonctionne parfaitement bien, et je suis correctement la navigation vers le bon répertoire, et j'ai pris les fichiers à partir du disque et de les mettre sur le FTP à l'aide de ftp_put()
, mais je suis à la recherche de prendre $out
et de l'écrire directement dans un fichier avec $filename
comme son nom sur le serveur FTP. J'ai peut-être mal interpréter les choses, mais quand j'ai essayé ftp_put
et ftp_fput
, il me semblait qu'ils veulent emplacements des fichiers, pas des flux de fichier. Est-il une autre fonction que j'ai pu envisager?
Vous devez vous connecter pour publier un commentaire.
J'ai répondu ici, au lieu de les commentaires car les commentaires ignorer le code de mise en forme.
vous pourriez essayer:
cela va créer un cours d'eau temporaire sans l'écrire sur le disque. Je ne connais pas d'autre moyen
Ici est matei du solution à partir de ci-dessus comme fonction complète ftp_file_put_contents():
Fait ftp_put attend le chemin d'accès vers le fichier local (comme une chaîne de caractères), donc, essayez d'écrire les données dans un fichier temporaire, puis ftp_put sur le serveur
Dans ce cas, vous n'avez pas besoin d'envoyer les en-têtes que vous envoyiez à votre exemple.
La solution la plus simple est d'utiliser
file_put_contents
avec URL FTP wrapper:Si cela ne fonctionne pas, c'est probablement parce que vous n'avez pas URL wrappers activé dans PHP.
Si vous avez besoin de plus de contrôle sur l'écriture (mode de transfert, en mode passif, le décalage, la lecture de limite, etc), utiliser le
ftp_fput
avec une poignée à laphp://temp
(ouphp://mémoire
) flux de:(ajouter la gestion des erreurs)
Ou vous pouvez ouvrir/créer le fichier directement sur le serveur FTP. C'est particulièrement utile, si le fichier est gros, tant que vous n'aurez pas garder tout le contenu dans la mémoire.
Voir Générer fichier CSV sur un serveur FTP externe en PHP.