PHPLivex

来源:互联网 发布:http代理客户端软件 编辑:程序博客网 时间:2024/06/06 06:51

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;
}


}


?>

原创粉丝点击