PHP IRC chat script

Place to place any code snippets, completed games, or even uncompleted games for IR users to use.
Post Reply
shadow310
Posts: 8
Joined: Sat Oct 15, 2011 10:11 pm

PHP IRC chat script

Post by shadow310 »

ok i no this is my first post but i have been reading your forums and i think i will share some code with you that i found

Many of you have probaly heard of, IRC (Internet Relay Chat). Developed in 1988 by Jarkko Oikarinen, it was a great way to communicate, it still is.

Today, i will show you how to create a simple irc client that will Recive from an IRC server. If intresent is shown in this tutorial i will make a second one on how to send text as well.

Lets Begin.
First we will need to create a file that contains the data for the IRC server (I.E. Serverhost, channel, port)

Config.php

Code: Select all

<?php
//The server host is the IP or DNS of the IRC server.
$server_host = "irc.smirl.com";
//Server Port, this is the port that the irc server is running on. Deafult: 6667
$server_port = 6667;
//Server Chanel, After connecting to the IRC server this is the channel it will join.
$server_chan = "#smirl";
?> 
Ok, now that thats out of the way, we are going to make the form that will allow the user to select a nickname to use on IRC, and connect and recive data from the irc server.

Index.php

Code: Select all

<?php
//First lets set the timeout limit to 0 so the page wont time out.
set_time_limit(0);
//Also inclue our config file
include("Config.php");
//Second lets grab our data from our form.
$nickname = $_POST['nick'];
//Now lets check to see if there is a nickname set.
if(empty($nickname))
{
    //Whoops we dont have a nickname set. 
    echo "<form name=\"form1\" method=\"post\" action=\"index.php\">\n\r";
    echo "<p align=\"center\">Please Insert a Nickname.\n\r";
    echo "<input type=\"text\" name=\"nick\"> \n\r";
    echo "</p>\n\r";
    echo "<p align=\"center\">\n\r";
    echo "<input type=\"submit\" name=\"Submit\" value=\"Join IRC\">\n\r";
    echo "</p>\n\r";
    echo "</form>\n\r";
}
else
{
    //Ok, We have a nickname, now lets connect.
    $server = array(); //we will use an array to store all the server data.
    //Open the socket connection to the IRC server
    $server['SOCKET'] = @fsockopen($server_host, $server_port, $errno, $errstr, 2);
    if($server['SOCKET'])
    {
        //Ok, we have connected to the server, now we have to send the login commands.
        SendCommand("PASS NOPASS\n\r"); //Sends the password not needed for most servers
          SendCommand("NICK $nickname\n\r"); //sends the nickname
          SendCommand("USER $nickname USING PHP IRC\n\r"); //sends the user must have 4 paramters
        while(!feof($server['SOCKET'])) //while we are connected to the server
        {
            $server['READ_BUFFER'] = fgets($server['SOCKET'], 1024); //get a line of data from the server
            echo "[RECIVE] ".$server['READ_BUFFER']."<br>\n\r"; //display the recived data from the server
            
            /*
            IRC Sends a "PING" command to the client which must be anwsered with a "PONG"
            Or the client gets Disconnected
            */
            //Now lets check to see if we have joined the server
            if(strpos($server['READ_BUFFER'], "422")) //422 is the message number of the MOTD for the server (The last thing displayed after a successful connection)
            {
                //If we have joined the server
                
                SendCommand("JOIN $server_chan\n\r"); //Join the chanel
            }
            if(substr($server['READ_BUFFER'], 0, 6) == "PING :") //If the server has sent the ping command
            {
                SendCommand("PONG :".substr($server['READ_BUFFER'], 6)."\n\r"); //Reply with pong
                //As you can see i dont have it reply with just "PONG"
                //It sends PONG and the data recived after the "PING" text on that recived line
                //Reason being is some irc servers have a "No Spoof" feature that sends a key after the PING
                //Command that must be replied with PONG and the same key sent.
            }
            flush(); //This flushes the output buffer forcing the text in the while loop to be displayed "On demand"
        }
    }
}
function SendCommand ($cmd)
{
    global $server; //Extends our $server array to this function
    @fwrite($server['SOCKET'], $cmd, strlen($cmd)); //sends the command to the server
    echo "[SEND] $cmd <br>"; //displays it on the screen
}
?> 
and here is an example of a successful connection.
[SEND] PASS NOPASS
[SEND] NICK xanderman1
[SEND] USER xanderman1 USING PHP IRC
[RECIVE] :irc.smirl.com NOTICE AUTH :*** Found your hostname (cached)
[RECIVE] :irc.smirl.com 001 xanderman1 :Welcome to the SMiRLnet IRC Network xanderman1!xanderman1@15.138-62-69.ftth.swbr.surewest.net
[RECIVE] :irc.smirl.com 002 xanderman1 :Your host is irc.smirl.com, running version Unreal3.2.4
[RECIVE] :irc.smirl.com 003 xanderman1 :This server was created Thu May 18 2006 at 20:18:46 EDT
[RECIVE] :irc.smirl.com 004 xanderman1 irc.smirl.com Unreal3.2.4 iowghraAsORTVSxNCWqBzvdHtGp lvhopsmntikrRcaqOALQbSeIKVfMCuzNTGj
[RECIVE] :irc.smirl.com 005 xanderman1 SAFELIST HCN MAXCHANNELS=20 CHANLIMIT=#:20 MAXLIST=b:60,e:60,I:60 NICKLEN=30 CHANNELLEN=32 TOPICLEN=307 KICKLEN=307 AWAYLEN=307 MAXTARGETS=20 WALLCHOPS WATCH=128 :are supported by this server
[RECIVE] :irc.smirl.com 005 xanderman1 SILENCE=15 MODES=12 CHANTYPES=# PREFIX=(ohv)@%+ CHANMODES=beIqa,kfL,lj,psmntirRcOAQKVCuzNSMTG NETWORK=SMiRLnet CASEMAPPING=ascii EXTBAN=~,cqnr ELIST=MNUCT STATUSMSG=@%+ EXCEPTS INVEX CMDS=KNOCK,MAP,DCCALLOW,USERIP :are supported by this server
[RECIVE] :irc.smirl.com 251 xanderman1 :There are 1 users and 5 invisible on 1 servers
[RECIVE] :irc.smirl.com 253 xanderman1 1 :unknown connection(s)
[RECIVE] :irc.smirl.com 254 xanderman1 3 :channels formed
[RECIVE] :irc.smirl.com 255 xanderman1 :I have 6 clients and 0 servers
[RECIVE] :irc.smirl.com 265 xanderman1 :Current Local Users: 6 Max: 32
[RECIVE] :irc.smirl.com 266 xanderman1 :Current Global Users: 6 Max: 6
[RECIVE] :irc.smirl.com 422 xanderman1 :MOTD File is missing
[SEND] JOIN #smirl
[RECIVE] :xanderman1 MODE xanderman1 :+iwx
[RECIVE] :xanderman1!xanderman1@SMiRLnet-126BAC88.ftth.swbr.surewest.net JOIN :#smirl
[RECIVE] :irc.smirl.com 353 xanderman1 = #smirl :xanderman1 +UnstableOne +LISTEN +Chapstick5 @SMiRL
[RECIVE] :irc.smirl.com 366 xanderman1 #smirl :End of /NAMES list.
[RECIVE] :SMiRL!smirlgirl@D4A43FB.5DFBF1FB.E4527667.IP MODE #smirl +v xanderman1
[RECIVE] :UnstableOne!UnstableOn@SMiRLnet-126BAC88.ftth.swbr.surewest.net QUIT :Client exited
[RECIVE]
[RECIVE] PING :irc.smirl.com
[SEND] PONG :irc.smirl.com
[RECIVE] :xanderman!xandercage@5D186102.CA943BF.90E5F2F5.IP JOIN :#smirl
[RECIVE] :SMiRL!smirlgirl@D4A43FB.5DFBF1FB.E4527667.IP MODE #smirl +v xanderman
[RECIVE] :xanderman!xandercage@5D186102.CA943BF.90E5F2F5.IP PRIVMSG #smirl :Hello xanderman1
There are many ways you can parse the recived lines too, you can have alot of fun with this and make a realy nice client with this.
shadow310
Posts: 8
Joined: Sat Oct 15, 2011 10:11 pm

Re: PHP IRC chat script

Post by shadow310 »

i think you may be able to make it more dimamic by making yo8u script pull the users (players) id out the database and making the irc chat connect with that name but i don't no how to do it i hope this helps and halls you a nice guy your videos are great and i i hope to see more videos soon :D
User avatar
Jackolantern
Posts: 10891
Joined: Wed Jul 01, 2009 11:00 pm

Re: PHP IRC chat script

Post by Jackolantern »

Wow, nice! This could have a lot of applications in PBBGs and elsewhere :) Very few people seem to use sockets in PHP, although they are quite flexible.
The indelible lord of tl;dr
User avatar
Ark
Posts: 427
Joined: Wed Jun 01, 2011 10:25 pm

Re: PHP IRC chat script

Post by Ark »

Looks awesome! unfortunately i don't know anything about using sockets. I would love to see the other part of the tutorial!
Orgullo Catracho
Xaleph
Posts: 897
Joined: Mon Feb 07, 2011 2:55 am

Re: PHP IRC chat script

Post by Xaleph »

Very few people use sockets because there is no real use for it. An open socket connection is impossible in PHP. The only thing i ever use it for is for dynamic DNS checking.
User avatar
Jackolantern
Posts: 10891
Joined: Wed Jul 01, 2009 11:00 pm

Re: PHP IRC chat script

Post by Jackolantern »

Xaleph wrote:An open socket connection is impossible in PHP.
Not true, but quite strange to pull-off lol! There are several PHP socket servers that are built by putting loops in the script. While you won't be able to hold as many users as an optimized Java or .NET server, it can greatly simplify the creation of a socket server by moving the responsibility of threading from you to the web server, which of course is already threading multiple requests. It can be a good solution for smaller real-time applications!
The indelible lord of tl;dr
shadow310
Posts: 8
Joined: Sat Oct 15, 2011 10:11 pm

Re: PHP IRC chat script

Post by shadow310 »

well i saw it and thort well i think indie can use this :)
Post Reply

Return to “Code Sharing”