cvs: phpdoc-fr /reference/sockets reference.xml

From: Date: Thu, 25 Jul 2002 03:26:33 +0000
Subject: cvs: phpdoc-fr /reference/sockets reference.xml
Groups: php.doc.fr 
Request: Send a blank email to doc-fr+get-10@lists.php.net to get a copy of this message
dams Wed Jul 24 23:26:33 2002 EDT Modified files: /phpdoc-fr/reference/sockets reference.xml Log:

Index: phpdoc-fr/reference/sockets/reference.xml diff -u phpdoc-fr/reference/sockets/reference.xml:1.2 phpdoc-fr/reference/sockets/reference.xml:1.3 --- phpdoc-fr/reference/sockets/reference.xml:1.2 Mon Apr 15 20:55:10 2002 +++ phpdoc-fr/reference/sockets/reference.xml Wed Jul 24 23:26:33 2002 @@ -1,162 +1 @@ -<?xml version="1.0" encoding="iso-8859-1"?> - <reference id="ref.sockets"> - <title>Sockets</title> - <titleabbrev>Sockets</titleabbrev> - <partintro> - &warn.experimental; - <simpara> - L'extension socket impl&eacute;mente une interface bas niveau avec les - fonctions de communication par socket. Cela permet de mettre en place - un serveur aussi bien qu'un client. - </simpara> - <para> - Les fonctions socket d&eacute;crites ici sont rassembl&eacute;es dans une extension - PHP. Pour &ecirc;tre activ&eacute;es, il faut utiliser l'option de compilation - <option role="configure">--enable-sockets</option> au script - <command>configure</command>. - </para> - <para> - Pour une interface client plus g&eacute;n&eacute;rique, reportez vous &agrave; - <function>fsockopen</function> et <function>pfsockopen</function>. - </para> - <para> - Lorsque vous utiliserez les fonctions de sockets qui sont d&eacute;crites ici, - gardez bien &agrave; l'esprit que m&ecirc;me si elles ont souvent des noms identiques - aux fonctions C, elles ont souvent des prototypes diff&eacute;rents. Lisez attentivement - la documentation pour &eacute;viter les confusions. - </para> - <para> - Cela dit, ceux qui n'ont pas l'habitude de la programmation avec les sockets - pourront trouver beaucoup de documentation pertinente dans les pages de - manuel Unix, et de nombreux tutorial de programmation C sur le web, dont la - plus part peuvent &ecirc;tre repris apr&egrave;s de l&eacute;g&egrave;re - modifications, en PHP. - </para> - <para> - <example> - <title>Exemple de programmation Socket : serveur TCP/IP</title> - <para> - Cet exemple est un serveur perroquete : tout ce que vous lui envoyez - vous est retourn&eacute;. Changez les variables - <varname>address</varname> et <varname>port</varname> pour les adapter &agrave; - votre configuration, et lancez le script. Vous pouvez vous connecter - au serveur avec une commande telle que <command>telnet 192.168.1.53 10000</command> - (avec l'adresse et le port qui sont ceux de votre configuration). - Pour vous d&eacute;connecter, tapez 'quit'. - </para> - <programlisting role="php"> -&lt;?php -error_reporting(E_ALL); -/* On autorise le script &agrave; attendre les connexions ind&eacute;finiment. */ -set_time_limit(0); -/* Modifiez ces valeurs pour qu'elles soient celles de votre configuration */ -$address = '192.168.1.53'; -$port = 10000; -if (($sock = socket(AF_INET, SOCK_STREAM, 0)) &lt; 0) { - echo "socket() a &eacute;chou&eacute; : raison : " . strerror($sock) . "\n"; -} -if (($ret = bind($sock, $address, $port)) &lt; 0) { - echo "bind() a &eacute;chou&eacute; : raison: " . strerror($ret) . "\n"; -} -if (($ret = listen($sock, 5)) &lt; 0) { - echo "listen() a &eacute;chou&eacute; : raison: " . strerror($ret) . "\n"; -} -do { - if (($msgsock = accept_connect($sock)) &lt; 0) { - echo "accept_connect() a &eacute;chou&eacute; : raison : " . strerror($msgsock) . "\n"; - break; - } - do { - $buf = ''; - $ret = read($msgsock, $buf, 2048); - if ($ret &lt; 0) { - echo "read() a &eacute;chou&eacute; : raison : " . strerror($ret) . "\n"; - break 2; - } - if ($ret == 0) { - break 2; - } - $buf = trim($buf); - if ($buf == 'quit') { - close($msgsock); - break 2; - } - $talkback = "PHP: Vous avez dit '$buf'.\n"; - write($msgsock, $talkback, strlen($talkback)); - echo "$buf\n"; - } while (<literal>TRUE</literal>); - close($msgsock); -} while (<literal>TRUE</literal>); -close($sock); -?&gt; - </programlisting> - </example> - </para> - <para> - <example> - <title>Exemple avec les sockets : Client TCP/IP</title> - <para> - Cet exemple est un client HTTP basique. Il se connecte &agrave; une page - envoi les ent&ecirc;tes (requ&ecirc;te HEAD), affiche le retour, et quitte. - </para> - <programlisting role="php"> -&lt;?php -error_reporting(E_ALL); -echo "&lt;h2>TCP/IP Connection&lt;/h2>\n"; -/* Demande le port du service WWW. */ -$service_port = getservbyname('www', 'tcp'); -/* Demande l'IP du serveur de destination. */ -$address = gethostbyname('www.php.net'); -/* Cr&eacute;e la connexion TCP/IP. */ -$socket = socket(AF_INET, SOCK_STREAM, 0); -if ($socket &lt; 0) { - echo "socket() a &eacute;chou&eacute; : raison : " . strerror($socket) . "\n"; -} else { - "socket() r&eacute;ussi: " . strerror($socket) . "\n"; -} -echo "Connexion &agrave; '$address' on port '$service_port'..."; -$result = connect($socket, $address, $service_port); -if ($result &lt; 0) { - echo "connect() a &eacute;chou&eacute; : raison : : ($result) " . strerror($result) . "\n"; -} else { - echo "OK.\n"; -} -$in = "HEAD / HTTP/1.0\r\n\r\n"; -$out = ''; -echo "Envoi des ent&ecirc;tes HTTP HEAD..."; -write($socket, $in, strlen($in)); -echo "OK.\n"; -echo "Lecture de la r&eacute;ponse :\n\n"; -while (read($socket, $out, 2048)) { - echo $out; -} -echo "Fermeture de la socket..."; -close($socket); -echo "OK.\n\n"; -?&gt; - </programlisting> - </example> - </para> - </partintro> - -&reference.sockets.functions; - - </reference> - <!-- Keep this comment at the end of the file -Local variables: -mode: sgml -sgml-omittag:t -sgml-shorttag:t -sgml-minimize-attributes:nil -sgml-always-quote-attributes:t -sgml-indent-step:1 -sgml-indent-data:t -indent-tabs-mode:nil -sgml-parent-document:nil -sgml-default-dtd-file:"../../../manual.ced" -sgml-exposed-tags:nil -sgml-local-catalogs:nil -sgml-local-ecat-files:nil -End: ---> - +<?xml version="1.0" encoding="iso-8859-1"?><!-- $Revision: 1.3 $ --> <reference id="ref.sockets"> <title>Socket</title> <titleabbrev>Sockets</titleabbrev> <partintro> &warn.experimental; <simpara> L'extension socket implŽmente une interface bas niveau avec les fonctions de communication par socket, basŽes sur les sockets BSD si populaires, et fournit la possibilitŽ de fonctionner aussi bien sous forme de client que de serveur. </simpara> <para> Les fonctions de socket dŽcrites ici font partie d'une extension PHP qui doit tre activŽe lors de la compilation en utilisant l'option <option role="configure">--enable-sockets</option>, avec la commande <command>configure</command>. </para> <para> Pour une interface socket cliente plus gŽnŽrique, voyez <function>fsockopen</function> et <function>pfsockopen</function>. </para> <para> Lorsque vous utilisez ces fonctions, il est important de vous rappeler que si de nombreuses fonctions ont le mme nom que leur alter ego en langage C, elles ont souvent des dŽclarations diffŽrentes. Lisez attentivement les descriptions pour Žviter des confusions. </para> <para> L'extension socket a ŽtŽ Žcrite pour fournir une interface utilisable avec les puissantes sockets fournies par BSD. Un soin particulier a ŽtŽ apportŽ pour que les fonctions soient aussi efficaces sous Unix que sous Windows32. Presque toutes les fonctions de sockets peuvent Žchouer dans certaines circonstances, et Žmettent ainsi un message d'alerte <constant>E_WARNING</constant> dŽcrivant l'erreur. Parfois, cela ne se fait pas selon les souhaits du dŽveloppeur. Par exemple, la fonction <function>socket_read</function> peut tout ˆ coup Žmettre un message <constant>E_WARNING</constant> car la connexion a ŽtŽ inopinŽment interrompu. Il est commun de supprimer les erreurs avec l'opŽrateur <literal>@</literal> et de traiter les erreurs avec la fonction <function>socket_last_error</function>, au niveau application. Vous pouvez appeler <function>socket_strerror</function> avec le code d'erreur pour connaître le message d'erreur, humainement lisible. Reportez vous ˆ leur description pour plus de dŽtails. </para> <note> <para> Les messages <constant>E_WARNING</constant> gŽnŽrŽ par l'extension socket sont en anglais, mais le message d'erreur s'affichera en fonction de la configuration locale (<constant>LC_MESSAGES</constant>): <programlisting role="php"><![CDATA[Warning - socket_bind() unable to bind address [98]: Die Adresse wird bereits verwendet]]> </programlisting> </para> </note> <para> Cela dit, ceux qui ne sont pas familiers avec la programmation par socket peuvent toujours trouver beaucoup de documentation dans les pages de manuel Unix appropriŽes, et il y a une grande quantitŽ d'introductions en langage C sur le web, qui peuvent tre facilement rŽutilisŽs, avec des adaptations mineures. <ulink url="http://www.developerweb.net/sock-faq/">UNIX Socket FAQ</ulink> est un bon dŽbut. </para> <para> <example> <title>Exemple de socket : serveur TCP/IP simple</title> <para> Cet exemple montre comment crŽer un serveur simple. Changez les variables <varname>address</varname> et <varname>port</varname> pour vous adapter ˆ votre configuration, et exŽcutez le. Vous pourrez alors vous connecter au serveur avec une commande comme ceci : <command>telnet 192.168.1.53 10000</command> (en supposant que l'adresse et le port correspondent ˆ votre configuration). Tout ce que vous saisissez aprs cela sera envoyŽ au serveur, et affichŽ en retour. Pour vous dŽconnecter, tapez 'quit'. </para> <programlisting role="php"><![CDATA[#!/usr/local/bin/php -q<?phperror_reporting (E_ALL);/* Permet au script de s'exŽcuter indŽfiniment, pour attendre une connexion. */set_time_limit (0);/* Active explicitement l'envoi automatique aux visiteurs * au fur et ˆ mesure que nous recevons les donnŽes */ob_implicit_flush ();$address = '192.168.1.53';$port = 10000;if (($sock = socket_create (AF_INET, SOCK_STREAM, 0)) < 0) { echo "socket_create() failed: reason: " . socket_strerror ($sock) . "\n";}if (($ret = socket_bind ($sock, $address, $port)) < 0) { echo "socket_bind() a ŽchouŽ : raison : " . socket_strerror ($ret) . "\n";}if (($ret = socket_listen ($sock, 5)) < 0) { echo "socket_listen() a ŽchouŽ : raison : " . socket_strerror ($ret) . "\n";}do { if (($msgsock = socket_accept($sock)) < 0) { echo "socket_accept() a ŽchouŽ : raison : " . socket_strerror ($msgsock) . "\n"; break; } /* Envoie des instructions. */ $msg = "\nBienvenue au serveur de test PHP. \n" . "Pour quitter, tapez 'quit'. Pour Žteindre le serveur, tapes 'shutdown'.\n"; socket_write($msgsock, $msg, strlen($msg)); do { if (FALSE === ($buf = socket_read ($msgsock, 2048))) { echo "socket_read() a ŽchouŽ : raison : " . socket_strerror ($ret) . "\n"; break 2; } if (!$buf = trim ($buf)) { continue; } if ($buf == 'quit') { break; } if ($buf == 'shutdown') { socket_close ($msgsock); break 2; } $talkback = "PHP : Vous avez dit '$buf'.\n"; socket_write ($msgsock, $talkback, strlen ($talkback)); echo "$buf\n"; } while (true); socket_close ($msgsock);} while (true);socket_close ($sock);?>]]> </programlisting> </example> </para> <para> <example> <title>Exemple avec les sockets : Client TCP/IP simple</title> <para> Ce exemple illustre un client HTTP simple. Il se connecte simplement ˆ une page, envoie une requte HEAD, affiche le rŽsultat, et se termine. </para> <programlisting><![CDATA[<?phperror_reporting (E_ALL);echo "<h2>Connexion TCP/IP</h2>\n";/* Lit le port du service WWW. */$service_port = getservbyname ('www', 'tcp');/* Lit l'adresse IP du serveur de destination */$address = gethostbyname ('www.exemple.com');/* Cree une socket TCP/IP. */$socket = socket_create (AF_INET, SOCK_STREAM, 0);if ($socket < 0) { echo "socket_create() a ŽchouŽ : raison : " . socket_strerror ($socket) . "\n";} else { echo "OK.\n";}echo "Essai de connexion ˆ '$address' sur le port '$service_port'...";$result = socket_connect ($socket, $address, $service_port);if ($result < 0) { echo "socket_connect() a ŽchouŽ : raison : ($result) " . socket_strerror($result) . "\n";} else { echo "OK.\n";}$in = "HEAD / HTTP/1.0\r\n\r\n";$out = '';echo "Envoi de la requte HTTP HEAD...";socket_write ($socket, $in, strlen ($in));echo "OK.\n";echo "Lire la rŽponse : \n\n";while ($out = socket_read ($socket, 2048)) { echo $out;}echo "Fermeture de la socket...";socket_close ($socket);echo "OK.\n\n";?>]]> </programlisting> </example> </para> </partintro>&reference.sockets.functions; </reference><!-- Keep this comment at the end of the fileLocal variables:mode: sgmlsgml-omittag:tsgml-shorttag:tsgml-minimize-attributes:nilsgml-always-quote-attributes:tsgml-indent-step:1sgml-indent-data:tindent-tabs-mode:nilsgml-parent-document:nilsgml-default-dtd-file:"../../../manual.ced"sgml-exposed-tags:nilsgml-local-catalogs:nilsgml-local-ecat-files:nilEnd:vim600: syn=xml fen fdm=syntax fdl=2 sivim: et tw=78 syn=sgmlvi: ts=1 sw=1--> \ No newline at end of file
« previous php.doc.fr (#10) next »