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