Huhu mal wieder...
Also ich hab\' den connect in den IRC per PHP wie folgt gelöst:
Code:
<?
// PHP Timeout auf 0 setzen...
set_time_limit(0);
// rn definieren
define (\'CRLF\', "rn");
// Variablen
$nick = \'Scott\'; // nick
$username = \'Scott\'; // username (username@hostname)
$localhost = \'squealj.net\'; // localhost (macht er aber eh automatisch ;)
$remotehost = \'irc.d-t-net.de\'; // irc server
$realname = \'PHP IRC Bot\'; // realname
$channel = \'#stealth\'; // chan, der beim verbinden aufgemacht wird
// socket öffnen
$fp = fsockopen($remotehost,6667, &$err_num, &$err_msg, 30);
if(!$fp) { // (Verbindungsfehler)
print "Sorry, the server is currently not available!";
exit;
}
// Verbindungsdaten senden (wie im rfc beschrieben)
$Header = \'NICK \' . $nick . CRLF;
$Header .= \'USER \' . $username . \' \' . $localhost . \' \' . $remotehost . \' :\' . $realname . CRLF;
fputs($fp, $Header);
$response = \'\';
while (!feof($fp)) { // while schleife, bis socket wieder geschlossen wird
$response .= fgets($fp, 1024); // 1024 bytes an $response hängen...
while (substr_count($response,CRLF) != 0) { // Prüfen ob CRLF in $response
$offset = strpos($response, CRLF); // Überprüfung auf Zeilenende
$data = substr($response,0,$offset); // Zeile von restlichen Daten splitten
$response = substr($response,$offset+2);
if ( substr($data,0,1) == \':\' ) { // Wenn erstes Zeichen \':\'...
// (Zeilen, welche mit \':\' beginnen sind in folgendem Format:
// :sender command :text
$offsetA = strpos($data, \' \'); // erstes Space finden
$dFrom = substr($data,1,$offsetA-1); // $dFrom als Sendervariable
$offsetB = strpos($data, \' :\'); // wieder den ersten \':\' finden
$dCommand = substr($data,$offsetA+1,$offsetB-$offsetA-1); // $dCommand als Kommandovariable
$dText = substr($data,$offsetB+2); // $dText als Textvariable
if ( substr($dCommand,0,3) == \'004\' ) {
fputs($fp,\'JOIN \' . $channel . CRLF); // $channel joinen
}
elseif ( substr($dCommand,0,7) == \'PRIVMSG\' ) {
if ( Ord(substr($dText,0,1)) == 1 ) {
// Wenn acsii code des ersten Zeichens = 1, müssen wir auf den ctcp request antworten
if ( substr($dText,1,4) == \'PING\' ) {
fputs($fp,\':\' . $nick . \' NOTICE \' . $dFrom . \' :\' . chr(1) . \'PING \' . substr($dText,6) . chr(1) . CRLF);
}
elseif ( substr($dText,1,7) == \'VERSION\' ) {
// Antwort auf Version Request
fputs($fp,\':\' . $nick . \' NOTICE \' . $dFrom . \' :\' . chr(1) . \'VERSION PHPirc\' . chr(1) . CRLF);
}
}
else {
// An dieser Stelle solltest Du RAW messages an den Server senden können...
}
}
}
elseif ( substr($data,0,4) == \'PING\' ) { // Wenn die ersten vier Zeichen \'PING\' lauten, antworten...
fputs($fp,\'PONG \' . substr($data,5) . CRLF);
}
}
}
// Server hat die Verbindung aufgehoben; Sockets sind geschlossen
fclose ($fp);
?>
Ist nicht alles auf meinem Mist gewachsen, sondern eher so zusammengeklaut ;-) Funktioniert aber mehr oder weniger. Ich hab\'s (mit ein paar anderen scripts) zum loggen in eine mySQL Datenbank benutzt.
MfG
SquealJ [
http://www.squealj.net/]