Tutorials Infos - Anleitungen - Hilfe - Dreamcodes
 

Php Irc Client

Ich will versuchen eine einfache Verbindung zu einen IRC Server mit PHP zu erklären. Also fangen wir einmal an... Zuerst benötigt man einen Befehl der dem Server mitteilt das er das Script nicht nach der vorgegebenen max_execution_time, die standartmässig auf 30 Sekunden eingestellt ist, abbricht. Dieser funktioniert allerdings nur wenn der Server nicht im PHP Save Modus läuft, was allerdings die meisten Online Webserver haben! Wenn man einen eigenen Server hat kann man dies auch für alle Scripte in der PHP Config Datei einstellen, dazu einfach "max_execution_time = 30;" ändern. Dadurch würde dieser Befehl natürlich überflüssig werden.

<?
set_time_limit
(0); 
?>


Nun brauchen wir eine Verbindung zu einen Server, diese erlangen wir über den befehl fsockopen(), wobei der Server und Port sich natürlich von meinem Bespiel unterscheiden können.

<?
$server 
"irc.de.quakenet.org";
$port "6667";
$verbindung fsockopen($server$port); 
?>


So nun haben wir eine Verbindung zum Server...das wars auch schon, wir wollen natürlich mehr, z.B. müssen wir uns beim IRC Server "registrieren" bevor wir die IRC Befehle nutzen können. Dies geschiet über den Befehl mit dem wir in Zukunft alle irc befehle an den Server schicken werden, fputs($verbindung, "IRC-BEFEHL\n\r") die Variable $verbindung sagt aus das der Befehl an unsere oben gestartete Serververbindung geschickt wird das \n\r ist sozusagen das "Enter Zeichen". Nun wollen wir den neugelernten Befehl fputs() dazu verwenden uns beim IRC Server zu registrieren, mit den IRC Befehlen USER und NICK.

<?
fputs
($verbindung"USER $nick 0 0 :$realname\r\n");
fputs($verbindung"NICK $nick\r\n");
# Für IRC Server die Passwörter verlangen
$passwort "passwort";
fputs($verbindung"PASS $passwort\r\n");
?>


An dieser Stelle sollte nun nach einiger Zeit die Ping Anfrage des Servers kommen, oder eine Fehlermeldung falls der Nickname falsch oder benutz ist. Um festzusellen was uns der Server mitteilt sollten wir eine Schleife verwenden da der Befehl fgets($verbindung, 1024) nur eine Zeile auslesen kann. Natürlich soll er nicht nur eine Zeile auslesen sondern solange auslesen wie der Client connected ist, dafür verwendet man die While Schleife while(!feof($verbindung)) {}.

<?
while (!feof($verbindung)) 
{
$new fgets($verbindung1024);

?>


Wenn man jetzt das ganze per echo ausgeben würde wird man bemerken das der Client nicht wirklich connected sondern an der Ping abfrage des Servers hängenbleibt (manche Server haben den Ping reply nicht unbedingt am Anfang aber die meisten eben). Um zu antworten müssen wir überprüfen ob die Zeile die wir soeben erhalten haben einen PING Befehl enthält, und die nötige ID die angehängt ist rausfiltern, damit wir mit dem PONG Befehl antworten können. Das ganze kommt natürlich in unsere Schleife rein, direkt nachdem wir die Neue Zeile erhalten haben. Auch werden wir diesmal zum Schluss (nach durchlaufen der Schleife) die Verbindung zum Server "Ordnungsgemäß" beenden und zwar mit dem Befehl fclose($verbindung) vor dem man auch noch eine IRC Quit Message schicken könnte mit fputs($verbindung, "QUIT : $quit\n\r"). Es bewirkt beides das gleiche, allerdings hat man mit der IRC Quitmessage dann die möglichkeit seinen Eigenen Text reinzuschreiben und wenn man nur mit fclose($verbindung) beendet erhalten die anderen die Meldung Read error to Nickname[Addresse]: EOF from client. Und das wir mitkriegen ob wir irgendwelche fehler vom Server bekommen haben werden wir das ganze nun endlich mit echo $new . "\r\n"; ausgeben.

<?
while (feof($verbindung
{
$new fgets($verbindung1024);
# ++ Ping
if(substr($new,0,4) == "PING")
{
$ping explode(":"$new); # Trennt den PONG Befehl von der ID
$reply $ping[1]; # speichert die ID in $reply
fputs($verbindung"PONG $reply\r\n"); # Sendet den vom Server erwarteten PONG Befehl - Nun kann man die IRC Befehle nutzen
}
# -- Ping
echo $new "\r\n"
}
# Quitnachricht
$quit "Simple PHP IRC Client -
dreamcodes.info";
fputs($verbindung"QUIT : $quit\n\r");
fclose($verbindung); 
?>


So wenn alles glatt geht ist es geschafft! Die IRC Verbindung steht. Nun kann man diese Simple Verbindung für seine eigenen Zwecke ausbauen mit fputs($verbindung, "IRC-BEFEHL\r\n") kann jetzt ein beliebiger IRC Befehl an den Server geschickt werden oder empfangen und verarbeitet werden.
So hier endet es auch schon, ich hoffe ihr habt einigermassend kapiert was ich meine, dies sollte ja eigentlich nur die Grundverbindung vermitteln.

 
ID: 378
eingestellt am: 18.03.2004
Autor: Phppower
Status zum lesen: Gast
gelesen: 5558
Webseite: www.dreamcodes.com
[Drucken]