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 :

Socket PHP: Comment ça marche?


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    70
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2006
    Messages : 70
    Points : 57
    Points
    57
    Par défaut Socket PHP: Comment ça marche?
    Bonjour à vous!

    J'espère que vous allez toutes et tous très bien.

    Voilà, je viens soliciter vos lumières.

    J'aimerais me mettre au socket PHP. Je pense avoir de bonnes connaissances en PHP et en informatique [je précise cela afin d'éviter qu'on n'en revienne au B-A-BA, j'imagine que les socket est un sujet relativement pointu...?].

    L'ami Google malheureusement n'a pas sû me donner du tuto' explicite .
    Quand j'dis tuto: c'est un doc qui m'explique les fonctions de base. J'ai eu des "tuto" qui me balancait des appli' client/serveur complète... j'vois pas l'intérêt . Et c'est assez lourd à apréhender .


    Mon contexte:
    Valider un formulaire à distance et en récupérer la réponse text [cad le document HTML qui résulte de la validation du formulaire].

    Ma problématique:
    Je dois automatiser cette tâche, j'avais d'abord penser à un automate JavaScript en utilisant AJAX afin d'optimiser l'interface... et surtout de faire avec ce que je sais manipuler . Mais AJAX ne permet pas d'accéder à des URLs distantes [sauf via un proxy... ce qui revient à faire via des soket ].

    Mes questions:
    Comment créer un socket via PHP et envoyer des paramêtres en POST via cette dernière?
    Quelles différences entre fsockopen et socket_create? Et plus généralement entre fsock* et socket_*?


    Merci d'avance pour vos lumières .

  2. #2
    Membre du Club
    Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    70
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2006
    Messages : 70
    Points : 57
    Points
    57
    Par défaut Finalement: cURL
    Bon je découvre tout juste une librairie qui dans mon cas semble plus approprié que les socket:

    cURL!

    Visiblement, en plus, elle est dispo sur les mutualisés de mon hébergeur... Youpi ^^!

    Bref, par contre j'ai un tuto' en anglais... et au vue du résultat j'pense que j'ai zappé un truc dans le fonctionnement.

    Voici le code utilisé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, 'http://www.test.com');
    curl_setopt($ch, CURLOPT_HEADER, 1);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $data = curl_exec($ch);
    curl_close($ch);
     
    print_r($data);
    echo $data;
    test.com est bien entendu remplacé par un site que je sais fonctionnel et accessible.

    Mon soucis:
    Le script tourne pendant très longtemps avant de clore oO. Plusieurs minutes!

    Ma question:
    Que fait-il exactement pour mettre tant de temps?!

    Merci d'avance!

  3. #3
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    Je vous recommande de lire sa documentation (qui est à peu près à jour) et plus spécialement celle de curl_setopt où vous trouverez la liste des options et leur description (elles sont triées en fonction du type du paramètre attendu).

    Dans votre code, CURLOPT_HEADER, à vrai, demande que les entêtes HTTP vous soient aussi renvoyées et que le corps de la page vous soit retourné sous la forme d'une chaîne au lieu d'être directement affiché (renvoi par défaut sur le flux php://stdout) grâce à l'option CURLOPT_RETURNTRANSFER fixé à vrai.

    Vous pouvez fixer des timeout via les options CURLOPT_TIMEOUT et CURLOPT_CONNECTTIMEOUT et analyser le temps mis par la fonction curl_exec pour effectuer les différentes tâches (résolution de nom, connexion, etc) en étudiant la fonction curl_getinfo.

  4. #4
    Membre actif Avatar de leodi
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2004
    Messages : 172
    Points : 224
    Points
    224
    Par défaut
    http://stephaneey.developpez.com/tutoriel/php/sockets/
    C'est là que j'ai appris à m'en servir, c'est très bien fait.
    Bonne chance


    Edit : 100eme message !!

  5. #5
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    Citation Envoyé par leodi
    http://stephaneey.developpez.com/tutoriel/php/sockets/
    C'est là que j'ai appris à m'en servir, c'est très bien fait.
    C'est réinventer la roue, surtout pour le protocole HTTP, en plus d'être plus lent et d'oublier de gérer certains aspects (authentification, envoi de fichiers, etc) Toutefois, là où je vous rejoins c'est dans les cas où cURL n'est pas disponible : comment faire autrement ?

    Edit : les sockets ne seront plus une extension standard

  6. #6
    Rédacteur
    Avatar de Yoshio
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    1 732
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 732
    Points : 2 853
    Points
    2 853
    Par défaut
    stream_socket_client et stream_socket_server ?

  7. #7
    Membre du Club
    Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    70
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2006
    Messages : 70
    Points : 57
    Points
    57
    Par défaut
    Merci à tous pour ces lumières .

    Je suis assez d'accord avec les propos de julp.

    Pour ce qui est du tuto indiqué: c'est ce dernier que je critiquais dans mon dernier message.
    J'explore la doc PHP et je vais essayer des choses.

    Je reviendrais faire part de mes conclusions et classer ce POST en "résolu"... j'espère!

  8. #8
    Membre du Club
    Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    70
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2006
    Messages : 70
    Points : 57
    Points
    57
    Par défaut
    Au faites une question qui est restée sans réponse ici:

    Pourquoi est-ce si long?!

    Cad: quand j'accède manuellement via mon navigateur à la page http://www.test.com je ne met pas plus de 10 seconde pour afficher ladite page. Or mon script utilisant cURL tourne pendant plusieurs minutes avant d'aboutir. Et quel aboutissement... il n'affiche rien [même en désactivant CURLOPT_RETURNTRANSFER]!
    Voici le tableau que me renvoi curl_getinfo():
    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
    19
    20
    21
    22
    Array
    (
        [url] => http://www.test.com
        [http_code] => 0
        [header_size] => 0
        [request_size] => 0
        [filetime] => -1
        [ssl_verify_result] => 0
        [redirect_count] => 0
        [total_time] => 0
        [namelookup_time] => 0.002342
        [connect_time] => 0
        [pretransfer_time] => 0
        [size_upload] => 0
        [size_download] => 0
        [speed_download] => 0
        [speed_upload] => 0
        [download_content_length] => 0
        [upload_content_length] => 0
        [starttransfer_time] => 0
        [redirect_time] => 0
    )

  9. #9
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    Visiblement il n'a pas pu aller plus loin que la résolution de noms Serait-ce la plate-forme de votre hébergeur qui est configuré de sorte que vous ne puissez pas faire de telles requêtes (pare-feu) ? Avez-vous déjà rencontré ce problème (protocole ftp, avec les fonctions file_get_contents/fopen si allow_url_fopen est à On) ?

  10. #10
    Membre du Club
    Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    70
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2006
    Messages : 70
    Points : 57
    Points
    57
    Par défaut
    Tout d'abord, encore merci pour votre réactivité.

    Je n'ai jamais eu de soucis d'accès comme cité.

    J'ai contacté mon hébergeur via le support technique mis à disposition, je devrais avoir une réponse assez rapidement.

  11. #11
    Membre du Club
    Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    70
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2006
    Messages : 70
    Points : 57
    Points
    57
    Par défaut
    Mieux vaut tard que jamais : le soucis venait bien de mon hébergeur .
    Ca a été résolu depuis .

    cURL est LA solution .

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PHP 5.3] SSH en PHP, Comment ça marche
    Par coccoweb dans le forum Langage
    Réponses: 0
    Dernier message: 21/08/2011, 14h58
  2. socket et port, comment ça marche ?
    Par josmiley dans le forum Réseau/Web
    Réponses: 6
    Dernier message: 02/09/2010, 22h15
  3. socket: un script serveur? comment ca marche?
    Par yenlui dans le forum Langage
    Réponses: 4
    Dernier message: 15/06/2006, 16h28
  4. Comment définir un timeout sur une socket PHP ?
    Par N3odyme dans le forum Langage
    Réponses: 7
    Dernier message: 08/05/2006, 00h04
  5. [sockets]Comment intéragir avec une socket php ?
    Par le Daoud dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 31/10/2005, 11h50

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