PHP,SOAP,WSDL [Résolu/Fermé]

Signaler
Messages postés
118
Date d'inscription
samedi 19 janvier 2008
Statut
Membre
Dernière intervention
24 août 2009
-
Messages postés
14
Date d'inscription
jeudi 21 juin 2012
Statut
Membre
Dernière intervention
29 décembre 2013
-
Bonjour,

je cherche à faire un web service qui va envoyer des fichiers. J'ai donc un fichier .wsdl, et un fichier serveur.php sur un serveur distant, un fichier client.php avec un input file.
En local c'est pas dur à faire, vu que le fichier est sur le même pc, mais en distant il m'est impossible de passer le chemin du fichier en paramètre vu qu'il se trouve sur le client et non sur le serveur.
Je cherche un moyen d'envoyer des fichier de type (doc, pdf..) mais je ne sais pas comment faire.

si qqn sait comment faire avec des exemples des fichiers ça m'aiderait beaucoup. Merci

13 réponses

Messages postés
2025
Date d'inscription
jeudi 22 septembre 2005
Statut
Membre
Dernière intervention
18 novembre 2015
202
Salut,
tu veux en fait si j'ai bien compris transférer un fichier d'un serveur à un autre c'est ça ?
Messages postés
118
Date d'inscription
samedi 19 janvier 2008
Statut
Membre
Dernière intervention
24 août 2009
67
en fait c'est un web service qui pourra etre mis sur n'importe quel site web.

genre tu mets sur ton site le client soap et ça envoie le fichier sur le serveur et ça l'enregistre... Autant le client/serveur soap marche bien mais passer des fichiers je trouve pas d'exemple ou de tuto sur le net
Messages postés
2025
Date d'inscription
jeudi 22 septembre 2005
Statut
Membre
Dernière intervention
18 novembre 2015
202
Autant le client/serveur soap marche bien mais passer des fichiers je trouve pas d'exemple ou de tuto sur le net

Merci mais j'ai bien compris et je sais ce qu'est un webservice en SOAP.

Par contre tu dis bien que ton problème c'est un transfert de fichier non ou je comprend rien à ce que t'écris ?
Messages postés
118
Date d'inscription
samedi 19 janvier 2008
Statut
Membre
Dernière intervention
24 août 2009
67
ouai c'est un transfert de fichier.
mon but c'est avec qq chose comme ça :

$fichier = $_FILES['fichier'];
$response = $client->__soapCall('envoie',array('fichier'=> $fichier));

avec ma méthode envoie($fichier) sur le serveur je récupère ce fichier pour l'enregistrer
Messages postés
2025
Date d'inscription
jeudi 22 septembre 2005
Statut
Membre
Dernière intervention
18 novembre 2015
202
Oki c'est donc un tranfert de fichier:)
Pour moi il faut que tu coté client qui reçoit $_FILES à travers un formulaire, il faut stocker le fichier dans un répertoire temporaire, puis ensuite tu ouvres une connection ftp vers le serveur principal et tu transfert le fichier via FTP : https://www.php.net/manual/fr/book.ftp.php , puis tu supprimes le fichier dans le repertoire temporaire si ça a réussi sinon t'avises :)

Voilà moi c'est comme ça que je conçois le problème.
C'est plus vraiment du WS alors. :)
Messages postés
118
Date d'inscription
samedi 19 janvier 2008
Statut
Membre
Dernière intervention
24 août 2009
67
ouai voila, il me faut du WS, puis je peux pas souiller les pc clients en stockant d'abord le fichier chez eux.
Je sais que c'est possible en silverlight + php y a moyen avec de l'encodage en base 64 et pour juste php ça existe aussi. j'arrive à encoder le bordel mais le décoder et le save non...
Messages postés
2025
Date d'inscription
jeudi 22 septembre 2005
Statut
Membre
Dernière intervention
18 novembre 2015
202
je peux pas souiller les pc clients en stockant d'abord le fichier chez eux.
? ? ?
Heuu moi je parle de communication de serveur à serveur y a pas de poste client, puis forcer un client...

Je comprends pas tout la, mais toi t'as l'air donc bon courage :)

P.S : silverlight beurk, Flex ouaiis :)
Messages postés
118
Date d'inscription
samedi 19 janvier 2008
Statut
Membre
Dernière intervention
24 août 2009
67
en fait ce sera mis sur des sites web (c'est eux que j'appelle client). J'ai peut être trouvé un moyen mais il me manque qq chose. J'aimerais lire le contenu d'un $_files pour faire qq chose comme ça :

$fichier = $_FILES['fichier'];

$fcontent = fread ($fichier['contenu'], filesize($cv));

$cv64 = base64_encode($fcontent);

sauf que la bien sur ça marche pas, fread lit des fichiers ouvert mais tout est distant c'est pas possible
Messages postés
4088
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
849
Bonjour,

Je peux t'aider sur la conception de la chose d'un point de vue théorique mais pas concrète.
J'ai déjà fait des webservices avec échange de fichier dans les requêtes SOAP en Java, mais pas en PHP.

Cela dit le principe doit être le même, deux cas :
1) Envoi de client à serveur :
- Le client lit le fichier, récupère le contenu, envoi sous forme de DataHandler le contenu du fichier dans la requète SOAP directement.
- Le serveur réceptionne la requête SOAP, regarde s'il y a des choses dans les "attachments", si oui récupère le contenu et... la suite c'est selon ce que doit faire ton web service, le mieux se contentait de stocker le fichier reçus, donc enregistrement sur fichier coté serveur.

2) Envoi du serveur au client :
- Exactement la même chose mais coté serveur.

Conclusion, de n'importe quel coté, il faut d'abord lire le fichier, récupérer son contenu et l'envoyé en tant qu'attachement à ta requète SOAP.

Normalement le fait d'inclure des attachements à ta requète SOAP n'impacte en rien ton WSDL. (Du moins en Java, mais j'imagine que c'est géré de la même manière pour le PHP puisque SOAP est comme un composant / une technologie indépendante du langage qui l'utilise).

Reste donc à trouver de la doc PHP sur comment ajouter des attachements à une requête SOAP en PHP.
Si je trouve je te fais signe.
Messages postés
118
Date d'inscription
samedi 19 janvier 2008
Statut
Membre
Dernière intervention
24 août 2009
67
c'est bon en fait j'ai résolu mon problème vendredi déjà.

j'ai juste fait un truc que j'aime pas faire, j'ai upload le fichier sur le client (personne avec le soap-client) je l'ouvre je le lis, j'envoi les données en base64, et coté serveur je réceptionne, je créer un fichier vide puis j'insère les données et bien entendu je supprime le fichier de chez le client. Je peux passer tout type de format sans soucis.

faut juste pensé à mettre
<wsdl:part name="file_content" type="xsd:base64Binary" />

dans le wsdl pour qu'il sache que le paramètre contienne ça.
Messages postés
2025
Date d'inscription
jeudi 22 septembre 2005
Statut
Membre
Dernière intervention
18 novembre 2015
202
On y vient finalement au stockage temporaire de la photo sur le serveur client... ;)
Messages postés
4088
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
849
Effectivement c'est une solution.

Juste une petite remarque sur "<wsdl:part name="file_content" type="xsd:base64Binary" />"

C'est utile surtout lorsque tu souhaites passer des fichiers binaires. Pour ce qui est de fichiers texte ou xml par exemple, tu n'en as pas besoin. Tout dépends aussi de la manière dont tu lis les informations de ton fichier pour les transmettre en paramètre, si tu les lis en binaires et non en texte, effectivement tu as tout intérêt à indiquer la ligne que tu as ajouté.
Messages postés
14
Date d'inscription
jeudi 21 juin 2012
Statut
Membre
Dernière intervention
29 décembre 2013
3