SommaireTelecharger la documentationChapitre suivantChapitre precedent  

  .: News :.: Edito :.: Scripts :.: Forum :.: Erreurs :.: Jobs :. 
 
Sommaire

Référence des fonctions

Apache
Tableaux
Aspell
Nombres de grande taille
Compression Bzip2
Calendrier
Paiement CCVS
Support COM pour Windows
Objets
ClibPDF
Crack
CURL
Paiement Cybercash
CyberMUT : Crédit Mutuel
Administration Cyrus IMAP
Caractères
DBA
Dates et heures
dBase
DBM
dbx
DB++ Functions
Direct IO
Accès aux dossiers
DOM XML
.NET
Gestion des erreurs
FrontBase
FilePro
Système de fichiers
Forms Data Format
FriBiDi
FTP
Fonctions
Gettext (GNU)
GMP
HTTP
Hyperwave
ICAP
Iconv
Images
IMAP
Informix
InterBase
IRC
Java
LDAP
Email
Traitement de email
Mathématiques
Chaînes de caractères multi-octets
MCAL
Chiffrage mcrypt
Fonctions MCVE
Hash
Microsoft SQL Server
Ming pour Flash
Fonctions diverses
mnoGoSearch
mSQL
MySQL
Sessions Mohawk
Fonctions muscat
Réseau
Ncurses : fonctions de contrôle du terminal
Lotus Notes functions
ODBC unifié
Oracle 8
OpenSSL
Oracle
Ovrimos SQL
Entrées/sorties
Overload
PDF
Paiement par Verisign
Options PHP et informations
POSIX
PostgreSQL
Contrôle des processus
Exécution de programmes externes
Printer functions
Pspell
Readline (GNU)
Recode (GNU)
Expressions régulières compatibles Perl
qtdom
Expressions régulières
Sémaphores et gestion de la mémoire partagée
SESAM
Sessions
Mémoire partagée
Shockwave Flash
SNMP
Sockets
Chaîne de caractères
Sybase
URL
Variables
Fonctions vpopmail
API Windows 32 bits
WDDX
Analyseur syntaxique XML
XMLRPC
XSLT
YAZ
NIS
Zip (décompression)
Zlib (Compression)

6.94 Sockets


Attention

Ce module est EXPERIMENTAL . Cela signifie que le comportement de ces fonctions, leurs noms et concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS! Soyez-en conscient, et utiliser ce module à vos risques et périls.

L'extension socket implé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.

Les fonctions socket décrites ici sont rassemblées dans une extension PHP. Pour être activées, il faut utiliser l'option de compilation --enable-sockets au script

configure
.

Pour une interface client plus générique, reportez vous à fsockopen et pfsockopen.

Lorsque vous utiliserez les fonctions de sockets qui sont décrites ici, gardez bien à l'esprit que même si elles ont souvent des noms identiques aux fonctions C, elles ont souvent des prototypes différents. Lisez attentivement la documentation pour éviter les confusions.

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 être repris après de légère modifications, en PHP.

Exemple de programmation Socket : serveur TCP/IP

Cet exemple est un serveur perroquete : tout ce que vous lui envoyez vous est retourné. Changez les variables address et port pour les adapter à votre configuration, et lancez le script. Vous pouvez vous connecter au serveur avec une commande telle que

telnet 192.168.1.53 10000
(avec l'adresse et le port qui sont ceux de votre configuration). Pour vous déconnecter, tapez 'quit'.


<?php
error_reporting
(E_ALL);
/* On autorise le script à attendre les connexions indé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_INETSOCK_STREAM0)) < 0) {
    echo 
"socket() a échoué : raison : " strerror($sock) . "\n";
}
if ((
$ret bind($sock$address$port)) < 0) {
    echo 
"bind() a échoué : raison: " strerror($ret) . "\n";
}
if ((
$ret listen($sock5)) < 0) {
    echo 
"listen() a échoué : raison: " strerror($ret) . "\n";
}
do {
    if ((
$msgsock accept_connect($sock)) < 0) {
        echo 
"accept_connect() a échoué : raison : " strerror($msgsock) . "\n";
        break;
    }
    do {
        
$buf '';
        
$ret read($msgsock$buf2048);
        if (
$ret 0) {
            echo 
"read() a échoué : 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$talkbackstrlen($talkback));
        echo 
"$buf\n";
    } while (
<tt>TRUE</tt> );
    close($msgsock);
} while (
<tt>TRUE</tt> );
close($sock);
?>

Exemple avec les sockets : Client TCP/IP

Cet exemple est un client HTTP basique. Il se connecte à une page envoi les entêtes (requête HEAD), affiche le retour, et quitte.


<?php
error_reporting
(E_ALL);
echo 
"<h2>TCP/IP Connection</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ée la connexion TCP/IP. */
$socket socket(AF_INETSOCK_STREAM0);
if (
$socket 0) {
    echo 
"socket() a échoué : raison : " strerror($socket) . "\n";
} else {
    
"socket() réussi: " strerror($socket) . "\n";
}
echo 
"Connexion à '$address' on port '$service_port'...";
$result connect($socket$address$service_port);
if (
$result 0) {
    echo 
"connect()  a échoué : raison : : ($result) " strerror($result) . "\n";
} else {
    echo 
"OK.\n";
}
$in "HEAD / HTTP/1.0\r\n\r\n";
$out '';
echo 
"Envoi des entêtes HTTP HEAD...";
write($socket$instrlen($in));
echo 
"OK.\n";
echo 
"Lecture de la réponse :\n\n";
while (
read($socket$out2048)) {
    echo 
$out;
}
echo 
"Fermeture de la socket...";
close($socket);
echo 
"OK.\n\n";
?>

Sommaire

  • accept_connect : Accepte une connexion sur une socket.
  • bind : Lie un nom à une socket.
  • close : Ferme une socket.
  • connect : Initie une connexion avec une socket.
  • listen : Attend une connexion sur une socket.
  • read : Lit sur une socket
  • socket : Crée une socket (point de communication).
  • strerror : Décrit une erreur de socket.
  • write : Ecrit sur une socket
Constantes

  • AF_INET
  • AF_UNIX
  • SOCK_DGRAM
  • SOCK_PACKET
  • SOCK_RAW
  • SOCK_RDM
  • SOCK_SEQPACKET
  • SOCK_STREAM

Chapitre précédentChapitre suivantAccueil nexen.net