Avatar billede frigsfrogs Nybegynder
22. januar 2003 - 20:12 Der er 10 kommentarer

IRC ved hjælp af php...

heysa. jeg har siddet lidt og kigget efter nogle steder der stod forklaret hvordan man kommer på irc ved hjælp af php. jeg fandt noget script men kan ikke få det til at virke ordentligt. med det kode nedenfor kan jeg komme på quakenet og komme på en kanal som jeg skal. men browseren står og "hænger" og selvom jeg lukker browseren så blir den bruger jeg logger på med på irc indtil jeg genstarter min computer... så der må være noget fejl i enten scriptet eller opsætningen af min apache webserver... så hvis i har nogle forslag så er i meget velkomne til at komme med dem :)

her er koden jeg har fundet:

<html>

<?
        // Set the PHP Timeout to 0, so we wont get killed by PHP
        set_time_limit(0);
        // define \r\n for easy use
        define ('CRLF', "\r\n");

        // Just some variables we need to connect
        $nick = 'phpfrix';
        $username = 'blah';
        $localhost = 'frigsfrogs.dyndns.dk';
        $remotehost = 'copenhagen.dk.quakenet.eu.org';
        $realname = 'PHP IRC test';
        $channel = '#test';
        // Open the socket
        $fp = fsockopen($remotehost,6668, &$err_num, &$err_msg, 30);
        if(!$fp) { // Error trying to connect
            print "Sorry, the server is not currently available!";
            exit;
        }
        // Send the connect data (This is a part of the IRC RCF, read it if you are going to code more irc stuff)
        $Header = 'NICK ' . $nick . CRLF;
        $Header .= 'USER ' . $username . ' ' . $localhost . ' ' . $remotehost . ' :' . $realname . CRLF;
        fputs($fp, $Header);
        // define response as a variable, so we wont get a error.
        $response = '';
        while (!feof($fp)) { // Make a while loop untill the socket is closed
            $response .= fgets($fp, 1024); // Append 1024 bytes to $response (if any), from the socket buffer
            while (substr_count($response,CRLF) != 0) { // Check if there is CRLF (linesplit) in $response, and

do that untill none
                $offset = strpos($response, CRLF); // Just to know where the line ends
                $data = substr($response,0,$offset); // Split the line from the rest of the data
                $response = substr($response,$offset+2); // Split the rest from the line
                if ( substr($data,0,1) == ':' ) { // If the first char is : then go to this loop
                    // Lines starting whit : are in this format
                    // :sender command :text
                    // So we need to split it like that
                    $offsetA = strpos($data, ' '); // Find first space
                    $dFrom = substr($data,1,$offsetA-1); // set $dFrom as the sender
                    $offsetB = strpos($data, ' :'); // Find the first :
                    $dCommand = substr($data,$offsetA+1,$offsetB-$offsetA-1); // Set $dCommand as the

command
                    $dText = substr($data,$offsetB+2); // set $dText as the text.
                    if ( substr($dCommand,0,3) == '004' ) {
                        // This is just a part of the connect headers that the server send.

(001,002,003,004,005)
                        // Some server dont send 005, so i use 004 to know if i´m connected
                        fputs($fp,'JOIN ' . $channel . CRLF); // Join $channel
                    }
                    elseif ( substr($dCommand,0,7) == 'PRIVMSG' ) {
                        // If somebody msgs us, or if there is some tolk on a channal, this is send.
                        if ( Ord(substr($dText,0,1)) == 1 ) {
                            // If first chars acsii code is 1 then its a CTCP question.
                            if ( substr($dText,1,4) == 'PING' ) {
                                // Sombody CTCP pinged us, lets respond
                                fputs($fp,':' . $nick . ' NOTICE ' . $dFrom . ' :' . chr(1)

. 'PING ' . substr($dText,6) . chr(1) . CRLF);
                            }
                            elseif ( substr($dText,1,7) == 'VERSION' ) {
                                // Somebody versiond us, lets respond
                                fputs($fp,':' . $nick . ' NOTICE ' . $dFrom . ' :' . chr(1)

. 'VERSION PHPirc' . chr(1) . CRLF);
                            }
                        }
                        else {
                            // Else, do this. This is just a relay of all privemsg sent to use,

will go right to the server.
                            // so we can send RAW message for testing:)
                            fputs($fp,$dText . CRLF);
                        }
                    }
                   
                }
                elseif ( substr($data,0,4) == 'PING' ) { // Else if first 4 chars are PING do this
                    // If the server pings us, respond. This must be done or we will get timeout
                    fputs($fp,'PONG ' . substr($data,5) . CRLF);
                }
            }
        }
        // If we are here, then the server has disconnected use
       
        // Close the socket
        fclose ($fp);   
    ?>


</html>
Avatar billede alrua Nybegynder
22. januar 2003 - 20:45 #1
det ser ud somom det der script bruger almindelige sockets...der er faktisk et php-element som kan bruges til irc:
http://www.php.net/manual/en/ref.ircg.php

Jeg ved ikke så meget om det, men du kan jo prøve at læse noget i manualen eller søge på google eller sådan noget :)

Sig endelig til hvad du finder ud af.

-Alrua
Avatar billede frigsfrogs Nybegynder
22. januar 2003 - 21:36 #2
jep den der har jeg skam os set og ville have brugt den hvis jeg kunne... men har læst flere steder at den IKKE virker i apache / windows... så det dutter ik :(
Avatar billede enragedbudda Nybegynder
22. januar 2003 - 21:57 #3
jeg låner lige dit script, og prøver at få det til at funke...

du kan følge med i udviklingen her:
http://irc.enragedbudda.dk/

Jeg skriver når jeg får (hvis jeg får) det til at virke...
Avatar billede enragedbudda Nybegynder
22. januar 2003 - 21:59 #4
er det bare mig eller er den her linje lidt tvivlsom: :)?

do that untill none
Avatar billede enragedbudda Nybegynder
22. januar 2003 - 22:06 #5
har du selv skrevet den kode?
Avatar billede enragedbudda Nybegynder
22. januar 2003 - 22:08 #6
nå nu laver det ingen fejl... men connecter heller ikke...
Avatar billede frigsfrogs Nybegynder
22. januar 2003 - 23:07 #7
det er ik noget jeg selv har lavet... fandt det et eller andet sted og folk siger det burde virke.. hmmmm... ka du ik få det til at connecte overhovedet?
Avatar billede frigsfrogs Nybegynder
22. januar 2003 - 23:08 #8
eller du har ik en anden metode at logge på osv? og joine kanaler og skrive osv...
Avatar billede enragedbudda Nybegynder
23. januar 2003 - 15:48 #9
nej desværre :)...
Der var en del tvivlsomme linjer som ikke hører hjemme i PHP... Den har jeg lavet om til kommentare, det var det det lignede mest :)...
Avatar billede frigsfrogs Nybegynder
23. januar 2003 - 21:48 #10
jamen fik du det da til at virke oder was?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester