PHPLivex

PHPLiveX是一个PHP类库可用于在web页面中使用Ajax调用PHP函数。它非常易于使用,在调用一个PHP函数不需要附加额外的功能,包含一个灵活地预加载属性,兼容IE, Opera, Mozilla, Firefox等浏览器。

 <?
#########################################
# PHPLiveX Library      #
# (C) Copyright 2006 Arda Beyazo餷u  #
# Version: 2.0       #
# Home Page: phplivex.sourceforge.net #
#########################################

class PHPLiveX {    ///创建PHPLiveX 类

var $Url;


var $Error = "";

var $FList = array();

function PHPLiveX($funcList = ""){   ////构造函数,传入自定义函数
 if(strpos($funcList, ",") !== false){
  $funcArray = explode(",", $funcList);
  for($i=0;$i<count($funcArray);$i++){
   $funcArray[$i] = stripslashes(trim($funcArray[$i]));
   if(function_exists($funcArray[$i])){
    $this->FList[$i] = $funcArray[$i];
   }else{
    $this->Error .= "'".$funcArray[$i]."' function cannot be found!";
   }
  }
  reset($this->FList);
 }
 elseif($funcList != "") $this->FList[0] = $funcList;
 
 if(isset($_SERVER['QUERY_STRING'])) $query = "?".$_SERVER['QUERY_STRING'];  
 else $query = "";
 $this->Url = $_SERVER['PHP_SELF'].$query;
 
 $this->Execute();
}

function Export($funcList = ""){   ///分离自定义函数
 if($funcList == "") return;
 elseif(strpos($funcList, ",") !== false){
  $funcArray = explode(",", $funcList);
  for($i=0;$i<count($funcArray);$i++){
   $funcArray[$i] = stripslashes(trim($funcArray[$i]));
   $this->FList[] = $funcArray[$i];
  }
 }else{
  $this->FList[] = $funcList;
 }
 $this->Execute();
}

function Execute(){
 $funcName = "";
 $funcArgs = array();
 if(isset($_POST['funcName'])){
  $funcName = $_POST['funcName'];
  if(isset($_POST['funcArgs']))
      $funcArgs = $_POST['funcArgs'];
 
  if(!in_array($funcName, $this->FList)){
   $this->Error = "' $funcName ' function couldn't be found!";
  }else{
   $runFunc = call_user_func_array($funcName, $funcArgs);
   echo "<phplivex>".$runFunc."</phplivex>";
   exit();
  }
 }
}

function CreateJS(){
 ob_start();
 
 ?>
 /////////////////////////////////////////
 // PHPLiveX Library                    //
 // (C) Copyright 2006 Arda Beyazo餷u   //
 // Version: 2.0                        //
 // Home Page: phplivex.sourceforge.net //
 /////////////////////////////////////////
 
 
 var TYPE = "e";
 var MODE = "rw";
 var TARGET = "NULL";
 var PRELOAD = "NULL";
 
 function urlToTr(str){
  str=str.replace(/%E7/g,"?);
  str=str.replace(/%C7/g,"?);
  str=str.replace(/%F0/g,"?);
  str=str.replace(/%D0/g,"?);
  str=str.replace(/%FD/g,"?);
  str=str.replace(/%DD/g,"?);
  str=str.replace(/%F6/g,"?);
  str=str.replace(/%D6/g,"?);
  str=str.replace(/%FE/g,"?);
  str=str.replace(/%DE/g,"?);
  str=str.replace(/%FC/g,"?);
  str=str.replace(/%DC/g,"?);
  return unescape(str);
 }

 function trToUrl(str){
  str=str.replace(/?g,escape("?));
  str=str.replace(/?g,escape("?));
  str=str.replace(/?g,escape("?));
  str=str.replace(/?g,escape("?));
  str=str.replace(/?g,escape("?));
  str=str.replace(/?g,escape("?));
  str=str.replace(/?g,escape("?));
  str=str.replace(/?g,escape("?));
  str=str.replace(/?g,escape("?));
  str=str.replace(/?g,escape("?));
  str=str.replace(/?g,escape("?));
  str=str.replace(/?g,escape("?));
  return str;
 }
 
 function PLX_ShowError(err){
  if(err != ""){
   alert(err);
   return false;
  }else{
   return true;
  }
 }
 
 function PLX_GetXmlHttp(){
  objXmlHttp = false;
        if (window.XMLHttpRequest) { // Mozilla, Safari,...
            objXmlHttp = new XMLHttpRequest();
            if (objXmlHttp.overrideMimeType) {
                objXmlHttp.overrideMimeType('text/xml');
            }
        } else if (window.ActiveXObject) { // IE
            try {
                objXmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
            } catch (e) {
                try {
                    objXmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
                } catch (e) {}
            }
        }

        if (!objXmlHttp) {
            alert('Giving up :( Cannot create an XMLHTTP instance');
            return false;
        }

  return objXmlHttp;
 }
 
 function PLX_CreatePreloading(preLoad){
  document.getElementById(preLoad).style.visibility = 'visible';
 }
 
 var preId = 0;
 
 function PLX_CreateOutput(funcName, funcArgs){
  var post_data = "funcName=" + escape(funcName);
  var args = new Array();
  if(funcArgs != ""){
   if(funcArgs.indexOf(",") != -1){
    args = funcArgs.split(",");
    for (i=0;i<args.length;i++) post_data += "&funcArgs[]=" + escape(args[i]);
   }else{
    post_data += "&funcArgs[]=" + escape(funcArgs);
   }
  }
  var XmlHttp = PLX_GetXmlHttp();
  var ajaxType = false;
  if(TYPE != "r") ajaxType = true;
  XmlHttp.open("POST", "<? echo $this->Url ?>", ajaxType);
  XmlHttp.setRequestHeader("Method", "POST " + "<? echo $this->Url ?>" + " HTTP/1.1");
  XmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=iso-8859-9");
  XmlHttp.setRequestHeader("Pragma", "no-cache");
  XmlHttp.setRequestHeader("Cache-Control", "no-cache, must revalidate");
  XmlHttp.send(trToUrl(post_data));
 
  if(TYPE != "r"){
   var preLoad = "NULL";
   if(preId != 0){
    PLX_CreatePreloading(preId);
    preLoad = preId;
    preId = 0;
   }
 
   XmlHttp.onreadystatechange = function(){
    if (XmlHttp.readyState == 4){
     output = urlToTr(XmlHttp.responseText);
     var outparts = output.split("<phplivex>");
     output = outparts[outparts.length-1].replace("/</phplivex>/", "");

     if(preLoad != "NULL"){
      document.getElementById(preLoad).style.visibility = 'hidden';
     
     }
    
     if(TYPE == "e") document.body.innerHTML += "";
     else if(MODE == "aw") document.getElementById(TARGET).innerHTML += output;
     else if(MODE == "rw") document.getElementById(TARGET).innerHTML = output;
    
     TYPE = "e";
     MODE = "rw";
    }
 
   }
  }else{
   output = urlToTr(XmlHttp.responseText);
   var outparts = output.split("<phplivex>");
   output = outparts[outparts.length-1].replace("/</phplivex>/", "");
   return output;
  }
 }
 
 <?
 $html = ob_get_contents();
 ob_end_clean();
 echo $html;
 
}

function CreateFunction($funcName){
 ob_start();
 ?>
 
 function <? echo $funcName ?>() {
 
  var args = new Array(); var plx_args = new Array();
  for(i=0;i<<? echo $funcName ?>.arguments.length;i++) args[i] = <? echo $funcName ?>.arguments[i];
  if(args[args.length-1].indexOf(",") != -1) plx_args = args[args.length-1].split(",");
  else plx_args[0] = args[args.length-1];
 
  for(i=0;i<plx_args.length;i++){
   if(plx_args[i].indexOf("type=") != -1){
    TYPE = plx_args[i].substr(5);
   }else if(plx_args[i].indexOf("target=") != -1){
    TARGET = plx_args[i].substr(7);
    TYPE = "print";
   }else if(plx_args[i].indexOf("mode=") != -1){
    MODE = plx_args[i].substr(5);
   }else if(plx_args[i].indexOf("preload=") != -1){
    PRELOAD = plx_args[i].substr(8);
   }
  }
 
  args.splice(args.length-1, 1);
  var FuncArgs = args.join();
 
  if(PRELOAD != "NULL") preId = PRELOAD;
  PRELOAD = "NULL";
  <?

   
  ?>
  try{
   if(TYPE == "r" || TYPE == "e"){
    return PLX_CreateOutput("<? echo $funcName ?>", FuncArgs);
   }else{
    PLX_CreateOutput("<? echo $funcName ?>", FuncArgs);
   }
  }catch(ex){
   PLX_ShowError(ex);
  }
 
  
 }
 <?
 $html = ob_get_contents();
 ob_end_clean();
 return $html;

}

function Run(){
 $html = "";
 if(count($this->FList) > 0){
  $html = $this->CreateJS();
  for($i=0;$i<count($this->FList);$i++){
   $html .= $this->CreateFunction($this->FList[$i]);
  }
 }
 echo $html;
}


}


?>

PHP_Live_Chat_Pro 是全球十佳PHP在线客服排名第一的在线即时聊天系统,官方售价50美金, 此源码内附中英文双版、使用文档、视频教程。 亲测安装绝对没问题,请大家放心下载、愉悦使用 (注:php 版本要求5.4以上)。 ============================================= PHP_Live_Chat_Pro 更新日志: 2018年4月29日: 添加了新语言: DE - 感谢kevmaster, IT - 感谢whitehub, RU - 感谢websystemspro, 新用户开始讲话时添加声音通知 修复了widget初始化代码中的HTTP / HTTPS协议切换, 某些服务器上存在固定图像上传问题, 添加了对某些HTTP请求中发生的多个以逗号分隔的IP地址的正确解析, 修复PHP兼容性细节导致“弃用的构造函数”警告, 修复了某些网站上发生的小部件到页面通信问题, 修复了消息体中无协议链接的解析。 2017年11月7日: 修复了文件上传代码中的PHP兼容性错误, 在消息中修复URL解析以正确处理URL中的括号字符, 将小部件初始化代码更改为异步,非阻塞的代码, 某些服务器上发生固定会话超时错误, 为运营商添加状态开关(在线/离线), 修复了在某些服务器上安装时导致错误的SQL代码, 修复了有时初始欢迎信息的错误时间计算, 更新的SMTP处理代码,允许禁用SSL证书验证, 修复了在某些服务器上登录后导致问题的SQL兼容性错误。 2017年7月26日: 修复了缺失的翻译, 增加了对移动应用和QR码部分的支持, 添加了对widget初始化代码的改进。 2017年5月24日: 修复了与旧版本PHP不兼容的问题,导致窗口小部件无法在某些服务器上显示, 修复在线用户,编辑部门和编辑操作员部分的滚动问题, 固定移动小部件的按钮定位。 2017年5月16日: 添加了“谈话成绩单到电子邮件”功能, 配置中的固定URL在通过HTTPS安装期间导致问题, 在管理面板中修复了有时错误的消息输入填充, “历史记录”选项卡中的固定名称和电子邮件查询。 ----------------------------------------------------------------
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值