一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

ajax php 聊天室实例代码

时间:2010-08-26 编辑:简简单单 来源:一聚教程网

php教程
/*
ajax php 聊天室实例代码
但是必须基于以下条款:
  * 署名。你必须明确标明作者的名字。.
  * 非商业用途。 你不可将当前作品用于商业目的。
  * 保持一致。 如果你基于当前作品更改、变换或构造新作品,你应当按照与当前协议完全相同的协议分发最终作品
  * 对于任何二次使用或分发,你必须让其他人明确当前作品的授权条款
  * 在得到作者的明确允许下,这里的某些条款可以放弃

此约定是法律文本 (完整的协议)的简单易读概要
****************************************/
//****************参数设置****************
//显示在线用户

 代码如下 复制代码

$disonline = true;
//新登陆时显示最近内容的条数(默认为30条)
$leastnum = 30;
//默认的房间名(默认是每天换一个文件),如果去掉d,则是每月换一个文件
$room = date("y-m-d");
//房间保存路径,必须以/结尾
$roomdir = "rooms/";
//编码方式
$charset = "utf-8";
//客户端最大显示内容条数(建议不要太大)
$maxdisplay = 300;


//语言
$lang = array(
//聊天室描述
"description"=>"欢迎来到迷你ajax聊天室。最新版本 1.2。下载请到www.111com.net",
//聊天室标题
"title"=>"mini ajax chatroom by longbill",
//第一个到聊天室的欢迎
"firstone"=>"welcome to longbill's mini ajax chatroom!",
//当信息有禁止内容时显示
"ban"=>"i am a pig!",
//关键字
"keywords"=>"聊天室,迷你,小型,ajax,chat,chatroom,longbill,111com.net,php,网页特效",
//发言提示
"hereyourwords" => "在这里发言!"
);

error_reporting(e_all ^ e_notice ^ e_warning);
header("content-type:text/html; charset=utf-8");

$get_past_sec = 3; //如果发现丢话,可以适当调大这个值
$touchs = 10; //检查在线人数的时间间隔

 

if (!function_exists("file_get_contents"))
{
 function file_get_contents($path)
 {
  if (!file_exists($path)) return false;
  $fp=@fopen($path,"r");
  $all=fread($fp,filesize($path));
  fclose($fp);
  return $all;
 }
}

if (!function_exists("file_put_contents"))
{
 function file_put_contents($path,$val)
 {
  $fp=@fopen($path,"w");
  fputs($fp,$val);
  fclose($fp);
  return true;
 }
}

 

$title = $lang["title"];
$earlier = 10;
$description = $lang["description"];
$origroom = $room;
$least = ($_get["dis"])?intval($_get["dis"]):$leastnum;
$touchme = $_post['touchme'];
if (!is_dir($roomdir)) @mkdir($roomdir) or die("error when creating folder $roomdir");
$room = $_get['room'];
if (!$room) $room = $_post["room"];
$room = checkfilename($room);
if (!$room) $room = $origroom;
$filename = $roomdir.$room.".dat.php";
$datafile = $roomdir.$room.".php";
if (!file_exists($filename)) @file_put_contents($filename,''." ".time()."|".$lang["firstone"]." ");
if (!file_exists($datafile)) @file_put_contents($datafile,''." ");
$action = $_post["action"];

function checkfilename($file)
{
 if (!$file) return "";
 $file = trim($file);
 $a = substr($file,-1);
 $file = eregi_replace("^[.\/]*","",$file);
 $file = eregi_replace("[.\/]*$","",$file);
 $arr = array("../","./","/","\","..\",".\");
 $file = str_replace($arr,"",$file);
 return $file;
}

 

 

 

 代码如下 复制代码

function get_ip()
{
 global $_server;
 if ($_server)
 {
  if ( $_server[http_x_forwarded_for] )
   $realip = $_server["http_x_forwarded_for"];
  else if ( $_server["http_client_ip"] )
   $realip = $_server["http_client_ip"];
  else
   $realip = $_server["remote_addr"];
 }
 else
 {
  if ( getenv( 'http_x_forwarded_for' ) )
   $realip = getenv( 'http_x_forwarded_for' );
  else if ( getenv( 'http_client_ip' ) )
   $realip = getenv( 'http_client_ip' );
  else
   $realip = getenv( 'remote_addr' );
 }
 return $realip;
}

function array2json($arr)
{
 $keys = array_keys($arr);
 $isarr = true;
 $json = "";
 for($i=0;$i  {
  if ($keys[$i] !== $i)
  {
   $isarr = false;
   break;
  }
 }
 $json = $space;
 $json.= ($isarr)?"[":"{";
 for($i=0;$i  {
  if ($i!=0) $json.= ",";
  $item = $arr[$keys[$i]];
  $json.=($isarr)?"":$keys[$i].':';
  if (is_array($item))
   $json.=array2json($item);
  else if (is_string($item))
   $json.='"'.str_replace(array(" "," "),"",$item).'"';
  else $json.=$item;
 }
 $json.= ($isarr)?"]":"}";
 return $json;
}

function keeponline()
{
 global $disonline,$datafile;
 if (!$disonline) return;
 $name = $_post['name'];
 $ip = get_ip();
 $onlines = @file_get_contents($datafile);
 $s1 = "|{$name}|{$ip}|";
 if (strpos($onlines,$s1) === false)
 {
  if (strpos($onlines,"|".$name."|") === false)
  {
   $fp = @fopen($datafile,"a+");
   if ($fp)
   {
    if (@flock($fp, lock_ex))
    {
     @fputs($fp,time()."|".time().$s1." ");
     @flock($fp, lock_un);
    }
    @fclose($fp);
   }
  }
  else
  {
   echo "name";
   die();
  }
 }
}

if ($action == "write")
{
 $color = $_post["color"];
 if (!eregi("[0-9a-fa-f]{6}",$color) || $color == "#000000") $color = "";
 $color = "#".$color;
 $size = intval($_post["size"]);
 $name = htmlspecialchars(str_replace(array(" "," "),"",$_post['name']));
 if (!$name) die("no name!!");
 $ip = get_ip();
 keeponline();
 
 $s = "";
 $style = "";
 $font = $_post["font"];
 if ($font == "songti") $font = "宋体";
 else if ($font == "heiti") $font = "黑体";
 else if ($font == "kaiti") $font = "楷体_gb2312";
 else $font = "";
 $style .= (!$font)?"":"font-family:".$font.";";
 $style .= (!$_post["bold"])?"":"font-weight:bold;";
 $style .= (!$color || $color == "#")?"":"color:{$color};";
 $style .= (!$size || $size == "16")?"":"font-size:{$size}px;";
 $t = time();
 $arr = explode(" ",$_post['content']);
 if (count($arr) > 20) die('error');
 for($i = 0;$i  {
  $content = $arr[$i];
  $content = trim($content);
  $content = str_replace(array(" "," "),"",$content);
  if (!$content) continue;
  $content = htmlspecialchars($content);
  $content = preg_replace("~[img](http://[a-za-z0-9.-_+%?]*)[/img]~i", "", $content);
  $content = ($style)?"{$content}":$content;
  $s.= $t."|".$name.":".$content." ";
 }
 
 

 

 

 

 代码如下 复制代码

if (!$s) die("no content!!");
 $fp = @fopen($filename,"a+");
 if (!$fp) die("repeat");
 $re_time = 0;
 while(!@flock($fp, lock_ex))
 {
  sleep(1);
  $re_time++;
  if ($re_time >=4) break;
 }
 if ($re_time <4)
 {
  @fputs($fp,$s);
  @flock($fp, lock_un);
 }
 else die("repeat");
 @fclose($fp);
 echo "ok";
}
else if ($action == "read")
{
 $first = $_post["first"];
 $lastmod = intval($_post["lastmod"]) - $get_past_sec; //得到两秒以内的所有发言,
 $alastmod = @filemtime($filename);
 if ($lastmod - $alastmod > 360*48) die;
 $name = $_post['name'];
 $name = str_replace(" ","",$name);
 $ip = get_ip();
 $json = array();
 $json["lastmod"] = time();
 $item = array();
 $newonline = array();
 $offline = array();

 $fp = @fopen($filename,'r');
 flock($fp,lock_ex);
 $s = fread($fp,filesize($filename));
 flock($fp,lock_un);
 fclose($fp);
 $lines = explode(" ",$s);
 
 if ($alastmod >= $lastmod && !$first)
 {
  foreach($lines as $l)
  {
   $item2 = array();
   $l = str_replace(array(" "," "),"",$l);
   if (strpos($l,"|") === false) continue;
   $arr = explode("|",$l);
   $t = intval($arr[0]);
   if ($t >= $lastmod)
   {
    $item2["time"] = date("h:i:s",$t);
    $item2["word"] = addslashes($arr[1]);
    $item[] = $item2;
   }
  }
 }
 else if ($first)
 {
  $item = array();
  $total = count($lines);
  for($i=$total-1;$i>=$total-$least;$i--)
  {
   if ($i<=0) break;
   $item2 = array();
   $l = str_replace(array(" "," "),"",$lines[$i]);
   if (strpos($l,"|") === false) continue;
   $arr = explode("|",$l);
   $t = intval($arr[0]);
   $item2["time"] = (date("m-d",time()) == date("m-d",$t))?date("h:i:s",$t):date("m-d h:i",$t);
   $item2["word"] = addslashes($arr[1]);
   $item[] = $item2;
  }
  $item = array_reverse($item);
 }
 
 $s = "";
 $nt = time();
 $onlines = array();
 if($disonline && $touchme)
 {
  $users = @file($datafile);
  foreach($users as $l)
  {
   $l = str_replace(array(" "," "),"",$l);
   if (strpos($l,"|") === false)
   {
    $s.=$l." ";
    continue;
   }
   $arr = explode("|",$l);
   if ($nt - intval($arr[1]) < $touchs*3)
   {
    if (trim($name) == trim($arr[2]))
    {
     $s.= $arr[0]."|".time()."|".$name."|".get_ip()."| ";
    }
    else $s.=$l." ";
    $onlines [] = htmlspecialchars($arr[2]);
   }
  }
  @file_put_contents($datafile,$s);
  $json["onlines"] = $onlines;
 }
 $json["lines"] = $item;
 echo array2json($json);
}
else if ($action == "keep" )
{
 keeponline();
 echo "keep ok";
}
else if ($action == "quit")
{
 $name = $_post['name'];
 if($disonline)
 {
  $users = @file($datafile);
  foreach($users as $l)
  {
   $l = str_replace(array(" "," "),"",$l);
   if (strpos($l,"|") === false)
   {
    $s.=$l." ";
    continue;
   }
   $arr = explode("|",$l);
   if (trim($name) == trim($arr[2])) continue;
   else $s.=$l." ";
  }
  @file_put_contents($datafile,$s);
  echo "ok";
 }
 die();
}
else
{
?>

 

 

 

 代码如下 复制代码



 迷你php+ajax聊天室演示 <?php echo $title;?>
 
 
 ">
 






loading...


loading online...



}
?>

下载地址
http://down.111com.net/down/code/php/liaotianshi/2010/0826/20450.html

热门栏目