IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Envoi de fichier par HTTP


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Homme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2009
    Messages : 311
    Points : 127
    Points
    127
    Par défaut Envoi de fichier par HTTP
    Bonjour,

    Je dois mettre en place un outil avec une interface qui dois permet d'uplaoder un fichier afin de l'envoyer à un serveur distant via http.
    Les requêtes http doivent etre envoyées en méthode "POST".

    voici un exemple d'adresse :

    http://<LOGIN_PARTENAIRE>:<password_partenaire>@editest.xxx.fr:6666/invoke/fr.xxxx.
    achats.livraison.flux/receiveASN?userList=<LOGIN_PARTENAIRE>&passList=<password_pa
    rtenaire>
    ma question est simple, quelles sont les étapes à effectuer pour mettre en place cet outil ?
    Est ce que vous connaissez un tuto qui pourrais me permettre de faire ça simplement ?

    autre question :

    est ce que je suis limité au niveau de la taille des fichier pour un envoi par http ? si oui de combien ?

    Merci à tous !

  2. #2
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    507
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mai 2006
    Messages : 507
    Points : 704
    Points
    704
    Par défaut
    Bonjour,

    je crois que toutes tes réponses sont par là http://php.developpez.com/faq/langag...ichiers_upload

  3. #3
    Membre habitué
    Homme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2009
    Messages : 311
    Points : 127
    Points
    127
    Par défaut
    Merci à toi , il y a des choses intéressantes. Seulement , comment je fais pour envoyer le login et mot de passe pour qu'ils n'apparaissent pas de façon clair sur l'adresse http ?

  4. #4
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    507
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mai 2006
    Messages : 507
    Points : 704
    Points
    704
    Par défaut
    Au vue de ce que tu as mis plus haut, je dirais qu'il faut que tu joues directement avec le protocole HTTP...
    Cependant si c'est ton serveur qui envoi le fichier vers un autre serveur, la page php avec l'url et les identifiants resteront sur le serveur... Donc c'est transparent pour l'utilisateur final. Mais il se peut que j'ai mal compris ton problème.

  5. #5
    Membre habitué
    Homme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2009
    Messages : 311
    Points : 127
    Points
    127
    Par défaut
    Je ne suis pas expert ni de l'HTTP ni du php.

    J'ai donc besoin qu'on me guide dans la mise en place de cet outil. Ayant chercher sur le net, j'ai trouver un code (langage vb) qui permet l'envoie de fichier via HTTP. dans ce code la personne utilise HttpRequest j'ai vérifié il existe aussi pour le php. ne devrais je pas l'utiliser ? Voici un exemple d'utilisation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <?php
    $r = new HttpRequest('http://example.com/form.php', HttpRequest::METH_POST);
    $r->setOptions(array('cookies' => array('lang' => 'de')));
    $r->addPostFields(array('user' => 'mike', 'pass' => 's3c|r3t'));
    $r->addPostFile('image', 'profile.jpg', 'image/jpeg');
    try {
        echo $r->send()->getBody();
    } catch (HttpException $ex) {
        echo $ex;
    }
    ?>
    le problème c'est que je ne comprend pas tout le code ! Comment pourrais je adapter ce code à mon besoin. De plus, j'ai vu qu'il existait des limite concernant la taille du fichier (100Ko). Comment faire pour envoyer un fichier si celui ci venait a dépasser la limite ? Est ce possible de gérer une segmentation du fichier envoyé ?

    Sur le lien que tu m'as envoyé, il y a :
    Comment envoyer un fichier depuis le navigateur sur le serveur à travers un formulaire HTML ?
    Je crois que c'est pour l'envoie d'un fichier sur un serveur en local , je me trompe ?

    Merci pour tes réponses

  6. #6
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    507
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mai 2006
    Messages : 507
    Points : 704
    Points
    704
    Par défaut
    Euh pour commencer, ton outil est dans quel langage ?
    Et ton outil est un applicatif installé sur la machine client ou est-ce un site web / web-app / ... sur un serveur ?

    HTTP n'étant pas un langage mais en protocole, tu peux l'utiliser partout, mais chaque langage va avoir des fonctions / méthodes propres pour l'utiliser...

  7. #7
    Membre habitué
    Homme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2009
    Messages : 311
    Points : 127
    Points
    127
    Par défaut
    Concernant le langage , j'ai le choix entre le php ou le Java.
    L'appli doit etre installé sur un serveur A et l'envoie de fichier de se faire vers un serveur B distant (chez un partenaire).

    la fonction HttpRequest est disponible en php et en Java.

  8. #8
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Tu ne peux en aucun cas envoyer un fichier xxxx.yyy d'un serveur vers un autre, si non imagines la sécuritée

    Bien sur on peut simuler un FTP mais en aucun cas un HTTP.
    A++
    Christele

  9. #9
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    507
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mai 2006
    Messages : 507
    Points : 704
    Points
    704
    Par défaut
    Dans ce cas, pour le php, tu fais une page web avec un formulaire d'upload de fichier (cf le lien +haut), et une fois que le fichier est sur le serveur A tu l'envoies vers ton serveur B. Dans ce cas, tu peux tout à fait mettre les identifiants dans l'url puisque ceux-ci resteront dans du code php sur le serveur A...
    Ou si tu veux faire plus propre tu utilises effectivement httprequest ou curl ou autres qui te permets d'utiliser le protocole http simplement.

  10. #10
    Membre habitué
    Homme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2009
    Messages : 311
    Points : 127
    Points
    127
    Par défaut
    JE vais me documenter sur HttpRequest merci pour tes précisions, je te tiens au courant merci

  11. #11
    Invité
    Invité(e)
    Par défaut
    Non la formule proposée (HttpRequest) ne convient pas et est hors sujet.

    Je résumes ... seul un php situé sur le serveur recevant le fichier
    peut l'uploader d' un autre serveur.Si non les site receveur aurait une faille majeure

  12. #12
    Membre habitué
    Homme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2009
    Messages : 311
    Points : 127
    Points
    127
    Par défaut
    Le serveur B a surement prévu de sécuriser la réception de fichier puisqu'il nous demande de fonctionner comme ça !

    sinon à l'utilisation de HttpRequest, j'ai une erreur du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Fatal error: Class 'HttpRequest' not found in C:\wamp\www\edi_poyet\httptr.php on line 30
    Je précise que j'ai deja installer les extension nécaissaire (php_http.dll) et redémarré mon serveur Apache.

  13. #13
    Membre régulier Avatar de MTroy_
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 63
    Points : 83
    Points
    83
    Par défaut
    Bonsoir,

    Il faut inclure la classe correspondante pour pouvoir instancier.

    exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    include('HttpRequest.class.php');
    HttpRequest ou curl c'est pareil, httprequest (extension pecl) utilise curl en background, la différence c'est la syntaxe, qui est plus propre.

    As tu pensé aux sockets ?
    Plus rapide que webkit!
    Chuck Norris n'utilise pas de navigateur. Il lit le code source et imagine la page. Question de gain de temps...

  14. #14
    Membre habitué
    Homme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2009
    Messages : 311
    Points : 127
    Points
    127
    Par défaut
    Les sockets ? j'y ai pensé oui, mais pour utiliser des sockets ne faut il pas agir sur les 2 serveurs (Serveur A et B ) ? Je n'ai aucun pouvoir sur le serveur B . . .

    Je vais tester l'include merci

    <== à 10h50 ==>

    L'include ne résolvait pas mon problème qui était autre, J'avais en effet le mauvais fichier php_http.php, j'ai télécharger le bon, le problème est résolu.

    Afin de faire des tests, j'ai mis en place un script qui effectue divers traitements sur un fichier téléchargé en HTTP via une méthode POST. Le but est donc de tester l'envoie de fichier par méthode POST. En me référent au manuel de HttpRequest je vois qu'il existe plusieurs méthode pour l'envoie par POST :

    addRawPostData
    setRawPostData
    setPostFields
    setPostFiles
    addPostFile
    Quelles est la différence entre ADD et SET ? laquelle dois je utiliser ? pourquoi ?

    Merci à tous

  15. #15
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par siro1 Voir le message
    Le serveur B a surement prévu de sécuriser la réception de fichier puisqu'il nous demande de fonctionner comme ça !
    Tu ne veux pas me lire
    S'ils demandent de fonctionner ainsi, pourquoi ne donnent ils pas le code qui ouvre la porte a un upload chez eux ?

    Demandes leurs au cas ou, tu n'est surement pas le premier a leur demander "le code type"

  16. #16
    Membre habitué
    Homme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2009
    Messages : 311
    Points : 127
    Points
    127
    Par défaut
    Je suis intégrateur Sage X3, cette outil va fonctionner en périphérie p/r à Sage, je suis en train de faire des tests pour un client, Pour l'instant il n'est pas question d'une mise en place. Donc pour résumer, si je leur demande les login et mot de passe tu te doute bien qu'il vont ======>

  17. #17
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    @Christèle
    Si on lui confirme que c'est de cette façon là de le faire, alors c'est ainsi, ça doit fonctionner.
    La porte est ouverte si on peu dire.

    Une requête HTTP (ou HTTPS) ne se limite pas à être envoyée par un navigateur vers un serveur, on peu le faire en Php et de plusieurs manières, de son serveur vers un autre serveur.
    Quelque part notre serveur fait office de client.
    La requête HTTP peu contenir tout ce qu'on veut :entête, contenu, intégrer un cookie, cookie de session, une authentification, des images (flux), etc, etc ... en GET, POST, etc ...

    Tout cela à partir du moment où le serveur en face accepte de le recevoir, et ici ça à l'air d'être la cas vu qu'ils l'ont conçu pour cela.


    Il y a cURL, très certainement le moyen le plus connu car Php l'intègre et elle est activée en règle général.
    Mais aussi HttpRequest, mais elle ne fait pas partie de Php, faut installer la librairie.
    Il y a aussi les WebServices (REST, SOAP).


    @Siro1
    Pour faire des sockets, ne faut-il pas qu'en fasse il y ait un serveur de socket ?
    Si c'est le cas, ça serait peut être mieux, car souvent ces serveurs sont sécurisés (ssl).


    As tu activé la librairie, c'est à dire ajouté ceci au php.ini ?

    Mise à par ça, essai avec cURL, c'est pas simple, mais c'est quasi certain de pouvoir le faire.
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  18. #18
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par siro1 Voir le message
    Je suis intégrateur Sage X3, cette outil va fonctionner en périphérie p/r à Sage
    Je mesures l' incohérence entre faire de l'ERP donc d' étre de ce niveau, comme Arcanes par exemple que je connais bien, ( ils sont 25 et réalisent 4Mo d' euros de chiffre d'affaire ... ) et poser ta question d'upload se site a site ... il faudra que tu m'explique cela.

    @RunCodePhp tu as déjas transféré des objets avec du CURL
    tu fais pourtant parmis ceux que je classe top niveau ici !

  19. #19
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Citation Envoyé par christele_r
    @RunCodePhp tu as déjas transféré des objets avec du CURL
    De quel Objet parles tu ?

    D'après ce que j'ai compris, il s'agirait d'envoyer un fichier via HTTP, et à ma connaissance cela est possible car je le fais déjà, via cURL.
    Enfin, c'est un code venant d'un CMS, mais peu importe.
    On peu faire du PUT via cURL, et très certainement avec HttpRequest.
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  20. #20
    Membre habitué
    Homme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2009
    Messages : 311
    Points : 127
    Points
    127
    Par défaut
    @christele_r : je ne suis pas ici pour parler de mon niveau. Arrêtons de polluer le post.

    @RunCodePhp : La librairie est activé, plus de problème avec ça. J'ai rapidement regardé cURL, beaucoup trop compliqué pour moi (ou peut etre parce que je ne l'ai regardé que rapidement). En tout cas j'avance :
    J'ai mis en place le formulaire, le script d'envoie et le script de récéption (pour le test).

    le formulaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <FORM action="httptr.php" method="POST" ENCTYPE="multipart/form-data">
    	<INPUT type="hidden" name="MAX_FILE_SIZE" value="2000000" />
    	<INPUT name="xmldata0" type="file" > 
    	<INPUT name="valider" type="submit" value="valider">
    </FORM>
    envoie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    if(! empty($_FILES['xmldata0']) && $_FILES['xmldata0']['error'] == UPLOAD_ERR_OK && is_uploaded_file($_FILES['xmldata0']['tmp_name']))
    	{	
    		$file = $_FILES['xmldata0']['tmp_name'];
    		$xmldata0= file_get_contents($file);
    		$r = new HttpRequest('http://localhost/edi_poyet/integrer_xml.php', HttpRequest::METH_POST);
    		$r->setOptions(array('cookies' => array('lang' => 'fr')));
    		//$r->addPostFields(array('user' => CONFIG_USERNAME , 'pass' => CONFIG_PASSWORD ));
     
    		$r->setBody($xmldata0);
    		//$r->addPostFile('xmldata0',$xmldata0, 'text/xml');
     
    		try {
    			echo $r->send()->getBody();
    		} catch (HttpException $ex) {
    			echo 'Erreur Fatale : '.$ex;
    		}
    	}
    La récéption :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    $vardate=date('Ymd').'_'.date('His');
     
    //ERREUR ici => Notice: Use of undefined constant xmldata0 - assumed 'xmldata0' in C:\wamp\www\edi_poyet\integrer_xml.php
    $FichierXml = $_POST[xmldata0];
     
    $XML = $FichierXml;
    $FichierXml = utf8_encode (trim($FichierXml)) ;
    $order_xml = simplexml_load_string($FichierXml);
    $num_BdC = (string)$order_xml->ListOfOrder->Order->OrderHeader->OrderNumber->BuyerOrderNumber;
    $NomFichierXML='FE'.$num_BdC.'_'.$vardate.'.xml';
    file_put_contents($NomFichierXML, $XML, FILE_APPEND);
    j'ai donc une erreur pour xmldata0, j'ai testé et le POST est vide ...

    quel doit etre le type de xmldata0 ?

    Merci encore à vous !

Discussions similaires

  1. Réponses: 2
    Dernier message: 07/02/2008, 10h28
  2. [HTTP] Envoi de fichiers par http post
    Par java_girl dans le forum Entrée/Sortie
    Réponses: 6
    Dernier message: 28/08/2006, 16h44
  3. Téléchargement de fichiers par HTTP / FTP
    Par Gladiator dans le forum Serveurs (Apache, IIS,...)
    Réponses: 2
    Dernier message: 07/12/2005, 11h28
  4. [HTTP] Envoi de fichiers par http
    Par Delendial dans le forum Entrée/Sortie
    Réponses: 7
    Dernier message: 03/09/2004, 09h37
  5. [Débutant] Envoi de fichier par socket
    Par zapho dans le forum Entrée/Sortie
    Réponses: 13
    Dernier message: 26/05/2004, 18h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo