2010-06-18 10 views
4

J'espère que quelqu'un ici pourrait m'aider, parce que je ne pouvais pas trouver de solution avec Google. Ce que je dois faire est de générer une chaîne XML (qui fonctionne) une sauvegarde directement dans un fichier sur un serveur sftp. Jusqu'ici, tout va bien ... J'ai utilisé le code suivant avec ftp et ça fonctionne, mais pas avec ftps. J'ai donc besoin d'une autre configuration d'options pour le flux ou d'une manière différente de résoudre cette tâche.Comment puis-je écrire un fichier sur un serveur sftp avec PHP?

Voici mon code actuel:

$host = 'ftp.example.com'; 

$port = 22; 

$user = 'xxxxxx'; 

$pass = 'xxxxxx'; 

$file = 'test_' . time() . '.txt'; 

$ftpPath = sprintf('ftp://%s:%[email protected]%s:%d/%s', $user, $pass, $host, $port, $file); 

$context = stream_context_create(array('ftp' => array('overwrite' => true))); 

file_put_contents($ftpPath, 'test', 0, $context); 
+0

Vous devez ajouter 4 espaces avant chaque ligne de code afin de la rendre facilement lisible. –

+0

Oh oui, mon code s'est effondré, désolé. Il a fixé. – Daniel

Répondre

1

Vous avez besoin d'un PHP avec le support OpenSSL compilé Ensuite, utilisez FTPS. // au lieu de ftp: //. More info on FTPS.

+0

Le support OpenSSL est activé et j'ai déjà essayé avec ftps, mais évidemment le serveur est un sftp. Est-ce important? – Daniel

+0

Oui. SFTP est quelque chose de très différent de FTPS. – Sjoerd

0

Une solution plus simple consisterait à enregistrer le fichier dans un répertoire temporaire, puis à exécuter une commande shell pour envoyer le fichier.

+0

Ok, que j'ai pensé aussi, mais si possible, je veux éviter cela parce que cela pourrait causer d'autres problèmes. – Daniel

0

Utilisez ssh2.sftp:// au lieu de ftp://. Voir ssh2_sftp.

+0

Ok, ça semble être la bonne façon, mais ça devient un peu plus complexe. – Daniel