- 浏览: 27327 次
- 性别:
- 来自: 厦门
-
文章分类
最新评论
-
lykm02:
这个 interceptor 只在 action chain中 ...
Struts2拦截器之AliasInterceptor -
a105865708:
放到Eclipse一大堆错误,居然还有很多变量未定义 。请楼主 ...
用java的Robot类来实现屏幕抓图 -
linxuexin:
中文检索使用封装lucene的compass,自己再封装了一下 ...
实现跨框架的类似GOOGLE的搜索建议 -
storm119:
不知你是如何处理中文检索的?可否告知。
实现跨框架的类似GOOGLE的搜索建议
经过 3 天的努力,终于把 ASP 的 PHPRPC 服务器和客户端写好了,为了充分利用已经写好的编码,ASP 的服务器和客户端都是用 JScript 实现的,里面调用了原来写好的 utf.js、base64.js、phpserializer.js、powmod.js 和 xxtea.js 这五个文件。ASP 版本的 PHPRPC 服务器和 PHP 版本的 PHPRPC 服务器端功能基本上一致,不过 ASP 版本的不支持输出重定向,也就是说如果远程函数中有用 Response.Write 输出的内容,在客户端是不能通过 output 参数得到的。这是由于 ASP 本身输出控制功能太弱造成的,另外,ASP 服务器端创建时,没有 debug 参数。ASP 服务器端发生的错误都是严重错误(没有警告和提示性错误)。ASP 客户端在初始化调用时,应使用绝对地址,而不能使用相对地址。
phprpc_server.js
/**
* @author Ma Bingyao(andot@ujn.edu.cn)
* @copyright CoolCode.CN
* @package ASP_PHPRPC_SERVER
* @version 2.1
* @last_update 2006-06-12
* @link http://www.coolcode.cn/?p=187
*
* Example usage:
*
* server.asp
* <%@ CodePage = 65001 %>
* <script runat="server" type="text/javascript" src="phprpc_server.js"></script>
* <%
* function add(a, b)
* add = a + b
* end function
* function subtract(a, b)
* subtract = a - b
* end function
* phprpc_server.create(Array('add', 'sub'));
* %>
*/
function addjsslashes(str, flag) {
var test;
if (flag == false) {
test = /([\0-\037\042\047\134])/g;
}
else {
test = /([\0-\037\042\047\134\177-\377])/g;
}
return str.replace(test, function ($1) {
var s = $1.charCodeAt(0).toString(8);
return '\\' + ((s.length == 1) ? "00" : ((s.length == 2) ? "0" : "")) + s;
});
}
function getGMTDate(date) {
var week = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
return week[date.getUTCDay()] + ", " + date.toGMTString();
}
function IsEmpty(o) {
if (typeof(o) == "object" && String(o) == "undefined") return true;
return false;
}
function phprpc_server(functions) {
Response.CodePage = 65001;
Session.CodePage = 65001;
var func, args, result, encrypt;
var date = getGMTDate(new Date());
Response.Buffer = true;
Response.ContentType = "text/plain";
Response.Charset = "utf-8";
Response.AddHeader("X-Powered-By", "PHPRPC Server/2.1");
Response.AddHeader("Date", date);
Response.AddHeader("Last0Modified", date);
Response.AddHeader("Cache-Control", "no-store, no-cache, must-revalidate");
Response.AddHeader("Cache-Control", "pre-check=0, post-check=0, max-age=0");
Response.AddHeader("Content-Encoding", "none");
if (functions.constructor == Array) {
this.functions = functions;
}
else if (functions.constructor == VBArray) {
this.functions = functions.toArray();
}
else {
this.functions = [functions];
}
this.encode = true;
if (!IsEmpty(Request('phprpc_encode'))) {
this.encode = String(Request('phprpc_encode')).toLowerCase();
if (this.encode == "false") {
this.encode = false;
}
}
if (!IsEmpty(Request('phprpc_callback'))) {
this.callback = utf8to16(base64decode(String(Request('phprpc_callback'))));
}
else {
this.callback = "";
}
this.ref = true;
if (!IsEmpty(Request('phprpc_ref'))) {
this.ref = String(Request('phprpc_ref')).toLowerCase();
if (this.ref == "false") {
this.ref = false;
}
}
this.errno = 0;
this.errstr = "";
try {
this.encrypt = false;
if (!IsEmpty(Request('phprpc_encrypt'))) {
this.encrypt = String(Request('phprpc_encrypt'));
if (this.encrypt === "true") this.encrypt = true;
if (this.encrypt === "false") this.encrypt = false;
}
if (!IsEmpty(Request('phprpc_func'))) {
func = String(Request('phprpc_func'));
if (this.is_defined(func)) {
if (!IsEmpty(Request('phprpc_args'))) {
args = base64decode(String(Request('phprpc_args')));
if (this.encrypt > 0) {
if (typeof(Session('PHPRPC_ENCRYPT')['k']) != "undefined") {
args = xxtea_decrypt(args, Session('PHPRPC_ENCRYPT')['k']);
}
else {
this.errno = 1;
this.errstr = "Can't find the key for decryption.";
}
}
args = unserialize(args);
}
else {
args = [];
}
result = serialize(this.call(func, args));
if (this.ref) {
args = serialize(args);
}
if (this.encrypt > 0) {
if (typeof(Session('PHPRPC_ENCRYPT')['k']) != "undefined") {
if (this.encrypt > 1) {
result = xxtea_encrypt(result, Session('PHPRPC_ENCRYPT')['k']);
}
if (this.ref) {
args = xxtea_encrypt(args, Session('PHPRPC_ENCRYPT')['k']);
}
}
else {
this.errno = 1;
this.errstr = "Can't find the key for encryption.";
}
}
if (this.encode) {
result = base64encode(result);
if (this.ref) {
args = base64encode(args);
}
}
else {
result = addjsslashes(result);
if (this.ref) {
args = addjsslashes(args);
}
}
}
else {
this.errno = 1;
this.errstr = "Can't find this function " + func + "().";
}
Response.Clear();
if (this.errno != 1) {
Response.Write('phprpc_result="' + result + '";\r\n');
if (this.ref) {
Response.Write('phprpc_args="' + args + '";\r\n');
}
}
Response.Write('phprpc_errno="' + this.errno + '";\r\n');
if (this.encode) {
Response.Write('phprpc_errstr="' + base64encode(utf16to8(this.errstr)) + '";\r\n');
Response.Write('phprpc_output="";\r\n');
}
else {
Response.Write('phprpc_errstr="' + addjsslashes(this.errstr, false) + '";\r\n');
Response.Write('phprpc_output="";\r\n');
}
}
else {
if (this.encrypt != false) {
if (this.encrypt === true) {
encrypt = phprpc_keypair[Math.floor(Math.random() * phprpc_keypair.length)];
Session('PHPRPC_ENCRYPT') = [];
Session('PHPRPC_ENCRYPT')['x'] = rand(127, 1);
Session('PHPRPC_ENCRYPT')['g'] = dec2num(encrypt['g']);
Session('PHPRPC_ENCRYPT')['p'] = dec2num(encrypt['p']);
encrypt['y'] = num2dec(pow_mod(Session('PHPRPC_ENCRYPT')['g'],
Session('PHPRPC_ENCRYPT')['x'],
Session('PHPRPC_ENCRYPT')['p']));
}
else {
Session('PHPRPC_ENCRYPT')['y'] = dec2num(this.encrypt);
var key = num2str(pow_mod(Session('PHPRPC_ENCRYPT')['y'],
Session('PHPRPC_ENCRYPT')['x'],
Session('PHPRPC_ENCRYPT')['p']));
var n = 16 - key.length;
var k = [];
for (var i = 0; i < n; i++) {
k[i] = '\0';
}
k[n] = key;
Session('PHPRPC_ENCRYPT')['k'] = k.join('');
encrypt = true;
}
if (this.encode) {
Response.Write('phprpc_encrypt="' + base64encode(serialize(encrypt)) + '";\r\n');
}
else {
Response.Write('phprpc_encrypt="' + addjsslashes(serialize(encrypt)) + '";\r\n');
}
}
if (this.encode) {
Response.Write('phprpc_functions="' + base64encode(serialize(this.functions)) + '";\r\n');
}
else {
Response.Write('phprpc_functions="' + addjsslashes(serialize(this.functions)) + '";\r\n');
}
}
Response.Write(this.callback);
}
catch (e) {
this.errno = 1;
this.errstr = e.description;
Response.Clear();
Response.Write('phprpc_errno=' + this.errno + ';\r\n');
if (this.encode) {
Response.Write('phprpc_errstr="' + base64encode(utf16to8(this.errstr)) + '";\r\n');
}
else {
Response.Write('phprpc_errstr="' + addjsslashes(this.errstr, false) + '";\r\n');
}
Response.Write('phprpc_output="";\r\n');
Response.Write(this.callback);
}
Response.End();
}
phprpc_server.prototype.is_defined = function (func) {
for (var i = 0, n = this.functions.length; i < n; i++) {
if (this.functions[i] == func) return true;
}
return false;
}
phprpc_server.prototype.call = function (func, args) {
var a = [];
for (var i = 0, n = args.length; i < n; i++) {
a[i] = 'args[' + i + ']';
}
return eval(func + "(" + a.join(', ') + ")");
}
phprpc_server.create = function (functions) {
new phprpc_server(functions);
}
下面的程序 keypair.js 是自动生成的,生成该程序的程序与生成 keypair.php 的程序差不多,这里就不单独提供了,我会在以后的 phprpc_2.1 包中发布的。
phprpc_client.js
/**
* @author Ma Bingyao(andot@ujn.edu.cn)
* @copyright CoolCode.CN
* @package ASP_PHPRPC_CLIENT
* @version 2.1
* @last_update 2006-06-14
* @link http://www.coolcode.cn/?p=143
*
* Example usage:
*
* server.asp
* <%@ CodePage = 65001 %>
* <script runat="server" type="text/javascript" src="phprpc_client.js"></script>
* <%
* phprpc_client.create('rpc')
* rpc.use_service('http://test.coolcode.cn/phprpc/server.php')
* Response.Write(rpc.add(1,2))
* %>
*/
function phprpc_error(errno, errstr) {
this.errno = errno;
this.errstr = errstr;
}
function phprpc_client() {
this.__url = '';
this.__encrypt = false;
this.encrypt = 0;
this.args = null;
this.warning = null;
this.output = "";
this.use_service = function (url, encrypt) {
if (typeof(encrypt) == "undefined") {
encrypt = this.__encrypt;
}
if (typeof(this.__name) == "undefined") {
return false;
}
this.__url = url;
var xmlhttp = this.__create_xmlhttp();
if (encrypt === true) {
xmlhttp.open("GET", [this.__url, '?phprpc_encrypt=true&phprpc_encode=false'].join(''), false);
xmlhttp.send(null);
if (xmlhttp.responseText) {
eval(xmlhttp.responseText);
if (typeof(phprpc_encrypt) == "undefined") {
this.__encrypt = false;
encrypt = false;
}
else {
this.__encrypt = unserialize(phprpc_encrypt);
this.__encrypt['p'] = dec2num(this.__encrypt['p']);
this.__encrypt['g'] = dec2num(this.__encrypt['g']);
this.__encrypt['y'] = dec2num(this.__encrypt['y']);
this.__encrypt['x'] = rand(127, 1);
var key = pow_mod(this.__encrypt['y'],
this.__encrypt['x'],
this.__encrypt['p']);
key = num2str(key);
var n = 16 - key.length;
var k = [];
for (var i = 0; i < n; i++) k[i] = '\0';
k[n] = key;
this.__encrypt['k'] = k.join('');
encrypt = num2dec(pow_mod(this.__encrypt['g'],
this.__encrypt['x'],
this.__encrypt['p']));
}
}
}
xmlhttp.open("GET", [this.__url, '?phprpc_encrypt=', encrypt, '&phprpc_encode=false'].join(''), false);
xmlhttp.send(null);
if (xmlhttp.responseText) {
eval(xmlhttp.responseText);
var functions = unserialize(phprpc_functions);
var func = [];
for (var i = 0, n = functions.length; i < n; i++) {
func[i] = [this.__name, ".", functions[i],
" = function () { return this.__call('",
functions[i],
"', this.__args_to_array(arguments)); }\r\n",
this.__name, ".", functions[i],
".ref = false;\r\n"].join('');
}
eval(func.join(''));
}
delete(xmlhttp);
};
this.__call = function (func, args) {
var __args = serialize(args);
if ((this.__encrypt !== false) && (this.encrypt > 0)) {
__args = xxtea_encrypt(__args, this.__encrypt['k']);
}
__args = base64encode(__args);
var request = ['phprpc_func=', func,
'&phprpc_args=', __args,
'&phprpc_encode=false',
'&phprpc_encrypt=', this.encrypt];
var ref = eval([this.__name, ".", func, ".ref"].join(''));
if (!ref) {
request[request.length] = '&phprpc_ref=false';
}
var xmlhttp = this.__create_xmlhttp();
var session = {'args': args, 'ref': ref, 'encrypt': this.encrypt};
xmlhttp.open("POST", this.__url, false);
xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
xmlhttp.send(request.join('').replace(/\+/g, '%2B'));
if (xmlhttp.responseText) {
this.__get_result(xmlhttp, session);
this.output = phprpc_output;
this.args = phprpc_args;
this.warning = phprpc_warning;
}
else {
phprpc_result = new phprpc_error(1, "No data received from server");
}
delete(xmlhttp);
return phprpc_result;
};
this.__get_result = function (xmlhttp, session) {
eval(xmlhttp.responseText);
phprpc_warning = null;
if ((phprpc_errno != 1) && (phprpc_errno != 16) &&
(phprpc_errno != 64) && (phprpc_errno != 256)) {
if ((this.__encrypt !== false) && (session.encrypt > 0)) {
if (session.encrypt > 1) {
phprpc_result = xxtea_decrypt(phprpc_result, this.__encrypt['k']);
}
if (session.ref) {
phprpc_args = xxtea_decrypt(phprpc_args, this.__encrypt['k']);
}
}
phprpc_result = unserialize(phprpc_result);
if (session.ref) {
phprpc_args = unserialize(phprpc_args);
}
else {
phprpc_args = session.args;
}
phprpc_warning = new phprpc_error(phprpc_errno, phprpc_errstr);
}
else {
phprpc_result = new phprpc_error(phprpc_errno, phprpc_errstr);
phprpc_args = session.args;
}
}
this.__create_xmlhttp = function() {
var MSXML = ['MSXML2.XMLHTTP.5.0', 'MSXML2.XMLHTTP.4.0', 'MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP', 'Microsoft.XMLHTTP'];
var n = MSXML.length;
for(var i = 0; i < n; i++) {
try {
return new ActiveXObject(MSXML[i]);
}
catch(e) {}
}
throw new Error("Your server does not support xmlhttp objects");
};
this.__args_to_array = function (args) {
var argArray = [];
var n = args.length;
for (i = 0; i < n; i++) {
argArray[i] = args[i];
}
return argArray;
}
}
phprpc_client.create = function (name, encrypt) {
eval([name, ' = new phprpc_client();', name, '.__name = "', name, '";'].join(''));
if (encrypt) {
encrypt = true;
eval([name, '.__encrypt = ', encrypt, ';'].join(''));
}
}
phprpc_server.js
/**
* @author Ma Bingyao(andot@ujn.edu.cn)
* @copyright CoolCode.CN
* @package ASP_PHPRPC_SERVER
* @version 2.1
* @last_update 2006-06-12
* @link http://www.coolcode.cn/?p=187
*
* Example usage:
*
* server.asp
* <%@ CodePage = 65001 %>
* <script runat="server" type="text/javascript" src="phprpc_server.js"></script>
* <%
* function add(a, b)
* add = a + b
* end function
* function subtract(a, b)
* subtract = a - b
* end function
* phprpc_server.create(Array('add', 'sub'));
* %>
*/
function addjsslashes(str, flag) {
var test;
if (flag == false) {
test = /([\0-\037\042\047\134])/g;
}
else {
test = /([\0-\037\042\047\134\177-\377])/g;
}
return str.replace(test, function ($1) {
var s = $1.charCodeAt(0).toString(8);
return '\\' + ((s.length == 1) ? "00" : ((s.length == 2) ? "0" : "")) + s;
});
}
function getGMTDate(date) {
var week = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
return week[date.getUTCDay()] + ", " + date.toGMTString();
}
function IsEmpty(o) {
if (typeof(o) == "object" && String(o) == "undefined") return true;
return false;
}
function phprpc_server(functions) {
Response.CodePage = 65001;
Session.CodePage = 65001;
var func, args, result, encrypt;
var date = getGMTDate(new Date());
Response.Buffer = true;
Response.ContentType = "text/plain";
Response.Charset = "utf-8";
Response.AddHeader("X-Powered-By", "PHPRPC Server/2.1");
Response.AddHeader("Date", date);
Response.AddHeader("Last0Modified", date);
Response.AddHeader("Cache-Control", "no-store, no-cache, must-revalidate");
Response.AddHeader("Cache-Control", "pre-check=0, post-check=0, max-age=0");
Response.AddHeader("Content-Encoding", "none");
if (functions.constructor == Array) {
this.functions = functions;
}
else if (functions.constructor == VBArray) {
this.functions = functions.toArray();
}
else {
this.functions = [functions];
}
this.encode = true;
if (!IsEmpty(Request('phprpc_encode'))) {
this.encode = String(Request('phprpc_encode')).toLowerCase();
if (this.encode == "false") {
this.encode = false;
}
}
if (!IsEmpty(Request('phprpc_callback'))) {
this.callback = utf8to16(base64decode(String(Request('phprpc_callback'))));
}
else {
this.callback = "";
}
this.ref = true;
if (!IsEmpty(Request('phprpc_ref'))) {
this.ref = String(Request('phprpc_ref')).toLowerCase();
if (this.ref == "false") {
this.ref = false;
}
}
this.errno = 0;
this.errstr = "";
try {
this.encrypt = false;
if (!IsEmpty(Request('phprpc_encrypt'))) {
this.encrypt = String(Request('phprpc_encrypt'));
if (this.encrypt === "true") this.encrypt = true;
if (this.encrypt === "false") this.encrypt = false;
}
if (!IsEmpty(Request('phprpc_func'))) {
func = String(Request('phprpc_func'));
if (this.is_defined(func)) {
if (!IsEmpty(Request('phprpc_args'))) {
args = base64decode(String(Request('phprpc_args')));
if (this.encrypt > 0) {
if (typeof(Session('PHPRPC_ENCRYPT')['k']) != "undefined") {
args = xxtea_decrypt(args, Session('PHPRPC_ENCRYPT')['k']);
}
else {
this.errno = 1;
this.errstr = "Can't find the key for decryption.";
}
}
args = unserialize(args);
}
else {
args = [];
}
result = serialize(this.call(func, args));
if (this.ref) {
args = serialize(args);
}
if (this.encrypt > 0) {
if (typeof(Session('PHPRPC_ENCRYPT')['k']) != "undefined") {
if (this.encrypt > 1) {
result = xxtea_encrypt(result, Session('PHPRPC_ENCRYPT')['k']);
}
if (this.ref) {
args = xxtea_encrypt(args, Session('PHPRPC_ENCRYPT')['k']);
}
}
else {
this.errno = 1;
this.errstr = "Can't find the key for encryption.";
}
}
if (this.encode) {
result = base64encode(result);
if (this.ref) {
args = base64encode(args);
}
}
else {
result = addjsslashes(result);
if (this.ref) {
args = addjsslashes(args);
}
}
}
else {
this.errno = 1;
this.errstr = "Can't find this function " + func + "().";
}
Response.Clear();
if (this.errno != 1) {
Response.Write('phprpc_result="' + result + '";\r\n');
if (this.ref) {
Response.Write('phprpc_args="' + args + '";\r\n');
}
}
Response.Write('phprpc_errno="' + this.errno + '";\r\n');
if (this.encode) {
Response.Write('phprpc_errstr="' + base64encode(utf16to8(this.errstr)) + '";\r\n');
Response.Write('phprpc_output="";\r\n');
}
else {
Response.Write('phprpc_errstr="' + addjsslashes(this.errstr, false) + '";\r\n');
Response.Write('phprpc_output="";\r\n');
}
}
else {
if (this.encrypt != false) {
if (this.encrypt === true) {
encrypt = phprpc_keypair[Math.floor(Math.random() * phprpc_keypair.length)];
Session('PHPRPC_ENCRYPT') = [];
Session('PHPRPC_ENCRYPT')['x'] = rand(127, 1);
Session('PHPRPC_ENCRYPT')['g'] = dec2num(encrypt['g']);
Session('PHPRPC_ENCRYPT')['p'] = dec2num(encrypt['p']);
encrypt['y'] = num2dec(pow_mod(Session('PHPRPC_ENCRYPT')['g'],
Session('PHPRPC_ENCRYPT')['x'],
Session('PHPRPC_ENCRYPT')['p']));
}
else {
Session('PHPRPC_ENCRYPT')['y'] = dec2num(this.encrypt);
var key = num2str(pow_mod(Session('PHPRPC_ENCRYPT')['y'],
Session('PHPRPC_ENCRYPT')['x'],
Session('PHPRPC_ENCRYPT')['p']));
var n = 16 - key.length;
var k = [];
for (var i = 0; i < n; i++) {
k[i] = '\0';
}
k[n] = key;
Session('PHPRPC_ENCRYPT')['k'] = k.join('');
encrypt = true;
}
if (this.encode) {
Response.Write('phprpc_encrypt="' + base64encode(serialize(encrypt)) + '";\r\n');
}
else {
Response.Write('phprpc_encrypt="' + addjsslashes(serialize(encrypt)) + '";\r\n');
}
}
if (this.encode) {
Response.Write('phprpc_functions="' + base64encode(serialize(this.functions)) + '";\r\n');
}
else {
Response.Write('phprpc_functions="' + addjsslashes(serialize(this.functions)) + '";\r\n');
}
}
Response.Write(this.callback);
}
catch (e) {
this.errno = 1;
this.errstr = e.description;
Response.Clear();
Response.Write('phprpc_errno=' + this.errno + ';\r\n');
if (this.encode) {
Response.Write('phprpc_errstr="' + base64encode(utf16to8(this.errstr)) + '";\r\n');
}
else {
Response.Write('phprpc_errstr="' + addjsslashes(this.errstr, false) + '";\r\n');
}
Response.Write('phprpc_output="";\r\n');
Response.Write(this.callback);
}
Response.End();
}
phprpc_server.prototype.is_defined = function (func) {
for (var i = 0, n = this.functions.length; i < n; i++) {
if (this.functions[i] == func) return true;
}
return false;
}
phprpc_server.prototype.call = function (func, args) {
var a = [];
for (var i = 0, n = args.length; i < n; i++) {
a[i] = 'args[' + i + ']';
}
return eval(func + "(" + a.join(', ') + ")");
}
phprpc_server.create = function (functions) {
new phprpc_server(functions);
}
下面的程序 keypair.js 是自动生成的,生成该程序的程序与生成 keypair.php 的程序差不多,这里就不单独提供了,我会在以后的 phprpc_2.1 包中发布的。
phprpc_client.js
/**
* @author Ma Bingyao(andot@ujn.edu.cn)
* @copyright CoolCode.CN
* @package ASP_PHPRPC_CLIENT
* @version 2.1
* @last_update 2006-06-14
* @link http://www.coolcode.cn/?p=143
*
* Example usage:
*
* server.asp
* <%@ CodePage = 65001 %>
* <script runat="server" type="text/javascript" src="phprpc_client.js"></script>
* <%
* phprpc_client.create('rpc')
* rpc.use_service('http://test.coolcode.cn/phprpc/server.php')
* Response.Write(rpc.add(1,2))
* %>
*/
function phprpc_error(errno, errstr) {
this.errno = errno;
this.errstr = errstr;
}
function phprpc_client() {
this.__url = '';
this.__encrypt = false;
this.encrypt = 0;
this.args = null;
this.warning = null;
this.output = "";
this.use_service = function (url, encrypt) {
if (typeof(encrypt) == "undefined") {
encrypt = this.__encrypt;
}
if (typeof(this.__name) == "undefined") {
return false;
}
this.__url = url;
var xmlhttp = this.__create_xmlhttp();
if (encrypt === true) {
xmlhttp.open("GET", [this.__url, '?phprpc_encrypt=true&phprpc_encode=false'].join(''), false);
xmlhttp.send(null);
if (xmlhttp.responseText) {
eval(xmlhttp.responseText);
if (typeof(phprpc_encrypt) == "undefined") {
this.__encrypt = false;
encrypt = false;
}
else {
this.__encrypt = unserialize(phprpc_encrypt);
this.__encrypt['p'] = dec2num(this.__encrypt['p']);
this.__encrypt['g'] = dec2num(this.__encrypt['g']);
this.__encrypt['y'] = dec2num(this.__encrypt['y']);
this.__encrypt['x'] = rand(127, 1);
var key = pow_mod(this.__encrypt['y'],
this.__encrypt['x'],
this.__encrypt['p']);
key = num2str(key);
var n = 16 - key.length;
var k = [];
for (var i = 0; i < n; i++) k[i] = '\0';
k[n] = key;
this.__encrypt['k'] = k.join('');
encrypt = num2dec(pow_mod(this.__encrypt['g'],
this.__encrypt['x'],
this.__encrypt['p']));
}
}
}
xmlhttp.open("GET", [this.__url, '?phprpc_encrypt=', encrypt, '&phprpc_encode=false'].join(''), false);
xmlhttp.send(null);
if (xmlhttp.responseText) {
eval(xmlhttp.responseText);
var functions = unserialize(phprpc_functions);
var func = [];
for (var i = 0, n = functions.length; i < n; i++) {
func[i] = [this.__name, ".", functions[i],
" = function () { return this.__call('",
functions[i],
"', this.__args_to_array(arguments)); }\r\n",
this.__name, ".", functions[i],
".ref = false;\r\n"].join('');
}
eval(func.join(''));
}
delete(xmlhttp);
};
this.__call = function (func, args) {
var __args = serialize(args);
if ((this.__encrypt !== false) && (this.encrypt > 0)) {
__args = xxtea_encrypt(__args, this.__encrypt['k']);
}
__args = base64encode(__args);
var request = ['phprpc_func=', func,
'&phprpc_args=', __args,
'&phprpc_encode=false',
'&phprpc_encrypt=', this.encrypt];
var ref = eval([this.__name, ".", func, ".ref"].join(''));
if (!ref) {
request[request.length] = '&phprpc_ref=false';
}
var xmlhttp = this.__create_xmlhttp();
var session = {'args': args, 'ref': ref, 'encrypt': this.encrypt};
xmlhttp.open("POST", this.__url, false);
xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
xmlhttp.send(request.join('').replace(/\+/g, '%2B'));
if (xmlhttp.responseText) {
this.__get_result(xmlhttp, session);
this.output = phprpc_output;
this.args = phprpc_args;
this.warning = phprpc_warning;
}
else {
phprpc_result = new phprpc_error(1, "No data received from server");
}
delete(xmlhttp);
return phprpc_result;
};
this.__get_result = function (xmlhttp, session) {
eval(xmlhttp.responseText);
phprpc_warning = null;
if ((phprpc_errno != 1) && (phprpc_errno != 16) &&
(phprpc_errno != 64) && (phprpc_errno != 256)) {
if ((this.__encrypt !== false) && (session.encrypt > 0)) {
if (session.encrypt > 1) {
phprpc_result = xxtea_decrypt(phprpc_result, this.__encrypt['k']);
}
if (session.ref) {
phprpc_args = xxtea_decrypt(phprpc_args, this.__encrypt['k']);
}
}
phprpc_result = unserialize(phprpc_result);
if (session.ref) {
phprpc_args = unserialize(phprpc_args);
}
else {
phprpc_args = session.args;
}
phprpc_warning = new phprpc_error(phprpc_errno, phprpc_errstr);
}
else {
phprpc_result = new phprpc_error(phprpc_errno, phprpc_errstr);
phprpc_args = session.args;
}
}
this.__create_xmlhttp = function() {
var MSXML = ['MSXML2.XMLHTTP.5.0', 'MSXML2.XMLHTTP.4.0', 'MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP', 'Microsoft.XMLHTTP'];
var n = MSXML.length;
for(var i = 0; i < n; i++) {
try {
return new ActiveXObject(MSXML[i]);
}
catch(e) {}
}
throw new Error("Your server does not support xmlhttp objects");
};
this.__args_to_array = function (args) {
var argArray = [];
var n = args.length;
for (i = 0; i < n; i++) {
argArray[i] = args[i];
}
return argArray;
}
}
phprpc_client.create = function (name, encrypt) {
eval([name, ' = new phprpc_client();', name, '.__name = "', name, '";'].join(''));
if (encrypt) {
encrypt = true;
eval([name, '.__encrypt = ', encrypt, ';'].join(''));
}
}
相关推荐
讲解了PHP与XML-RPC的集成,包括如何构建PHP客户端和服务端。 ##### 5.3 Python与XML-RPC 详细说明了Python环境下XML-RPC的使用,涵盖客户端和服务端的开发。 ##### 5.4 XML-RPC与ASP 介绍了如何在ASP环境中使用...
1、文件内容:sblim-gather-provider-2.2.8-9.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/sblim-gather-provider-2.2.8-9.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、更多资源/技术支持:公众号禅静编程坊
本图书进销存管理系统管理员功能有个人中心,用户管理,图书类型管理,进货订单管理,商品退货管理,批销订单管理,图书信息管理,客户信息管理,供应商管理,库存分析管理,收入金额管理,应收金额管理,我的收藏管理。 用户功能有个人中心,图书类型管理,进货订单管理,商品退货管理,批销订单管理,图书信息管理,客户信息管理,供应商管理,库存分析管理,收入金额管理,应收金额管理。因而具有一定的实用性。 本站是一个B/S模式系统,采用Spring Boot框架,MYSQL数据库设计开发,充分保证系统的稳定性。系统具有界面清晰、操作简单,功能齐全的特点,使得图书进销存管理系统管理工作系统化、规范化。本系统的使用使管理人员从繁重的工作中解脱出来,实现无纸化办公,能够有效的提高图书进销存管理系统管理效率。 关键词:图书进销存管理系统;Spring Boot框架;MYSQL数据库
2024中国在人工智能领域的创新能力如何研究报告.pdf
人脸识别项目实战
人脸识别项目实战
人脸识别项目实战
内容概要:本文档详细介绍了基于CEEMDAN(完全自适应噪声集合经验模态分解)的方法实现时间序列信号分解的具体项目。文中涵盖项目背景介绍、主要目标、面临的挑战及解决方案、技术创新点、应用领域等多方面内容。项目通过多阶段流程(数据准备、模型设计与构建、性能评估、UI设计),并融入多项关键技术手段(自适应噪声引入、并行计算、机器学习优化等)以提高非线性非平稳信号的分析质量。同时,该文档包含详细的模型架构描述和丰富的代码样例(Python代码),有助于开发者直接参考与复用。 适合人群:具有时间序列分析基础的科研工作者、高校教师与研究生,从事信号处理工作的工程技术人员,或致力于数据科学研究的从业人员。 使用场景及目标:此项目可供那些面临时间序列数据中噪声问题的人群使用,尤其适用于需从含有随机噪音的真实世界信号里提取有意义成分的研究者。具体场景包括但不限于金融市场趋势预测、设备故障预警、医疗健康监控以及环境质量变动跟踪等,旨在提供一种高效的信号分离和分析工具,辅助专业人士进行精准判断和支持决策。 其他说明:本文档不仅限于理论讲解和技术演示,更着眼于实际工程项目落地应用,强调软硬件资源配置、系统稳定性测试等方面的细节考量。通过完善的代码实现说明以及GUI界面设计指南,使读者能够全面理解整个项目的开发流程,同时也鼓励后续研究者基于已有成果继续创新拓展,探索更多的改进空间与发展机遇。此外,针对未来可能遇到的各种情况,提出了诸如模型自我调整、多模态数据融合等发展方向,为长期发展提供了思路指导。
监护人,小孩和玩具数据集 4647张原始图片 监护人 食物 孩子 玩具 精确率可达85.4% pasical voc xml格式
人脸识别项目实战
人脸识别项目实战
在智慧园区建设的浪潮中,一个集高效、安全、便捷于一体的综合解决方案正逐步成为现代园区管理的标配。这一方案旨在解决传统园区面临的智能化水平低、信息孤岛、管理手段落后等痛点,通过信息化平台与智能硬件的深度融合,为园区带来前所未有的变革。 首先,智慧园区综合解决方案以提升园区整体智能化水平为核心,打破了信息孤岛现象。通过构建统一的智能运营中心(IOC),采用1+N模式,即一个智能运营中心集成多个应用系统,实现了园区内各系统的互联互通与数据共享。IOC运营中心如同园区的“智慧大脑”,利用大数据可视化技术,将园区安防、机电设备运行、车辆通行、人员流动、能源能耗等关键信息实时呈现在拼接巨屏上,管理者可直观掌握园区运行状态,实现科学决策。这种“万物互联”的能力不仅消除了系统间的壁垒,还大幅提升了管理效率,让园区管理更加精细化、智能化。 更令人兴奋的是,该方案融入了诸多前沿科技,让智慧园区充满了未来感。例如,利用AI视频分析技术,智慧园区实现了对人脸、车辆、行为的智能识别与追踪,不仅极大提升了安防水平,还能为园区提供精准的人流分析、车辆管理等增值服务。同时,无人机巡查、巡逻机器人等智能设备的加入,让园区安全无死角,管理更轻松。特别是巡逻机器人,不仅能进行360度地面全天候巡检,还能自主绕障、充电,甚至具备火灾预警、空气质量检测等环境感知能力,成为了园区管理的得力助手。此外,通过构建高精度数字孪生系统,将园区现实场景与数字世界完美融合,管理者可借助VR/AR技术进行远程巡检、设备维护等操作,仿佛置身于一个虚拟与现实交织的智慧世界。 最值得关注的是,智慧园区综合解决方案还带来了显著的经济与社会效益。通过优化园区管理流程,实现降本增效。例如,智能库存管理、及时响应采购需求等举措,大幅减少了库存积压与浪费;而设备自动化与远程监控则降低了维修与人力成本。同时,借助大数据分析技术,园区可精准把握产业趋势,优化招商策略,提高入驻企业满意度与营收水平。此外,智慧园区的低碳节能设计,通过能源分析与精细化管理,实现了能耗的显著降低,为园区可持续发展奠定了坚实基础。总之,这一综合解决方案不仅让园区管理变得更加智慧、高效,更为入驻企业与员工带来了更加舒适、便捷的工作与生活环境,是未来园区建设的必然趋势。
本届年会的主题是“青春梦想创新创业”。通过学术论文报告、创新创业项目展示、创业项目推介、工作研讨、联谊活动、大会报告等活动,全面展示大学生最新的创新创业成果。年会共收到491所高校推荐的学术论文756篇、创新创业展示项目721项、创业推介项目156项,合计1633项,为历届年会数量最高。经过36所“985”高校相关学科专家的初评以及国家级大学生创新创业训练计划专家组的复选,最终遴选出可参加本次年会的学术论文180篇,创新创业展示项目150个,创业推介项目45项,共计375项,涉及30个省市的236所高校。年会还收到了来自澳门特别行政区、俄罗斯的13项学术论文及参展项目。这些材料集中反映了各高校最新的创新创业教育成果,也直接体现了当代大学生的创新思维和实践能力。
人脸识别项目实战
6ES7215-1AG40-0XB0_V04.04.01固件4.5
在无人机上部署SchurVins的yaml配置文件
uniapp实战商城类app和小程序源码,包含后端API源码和交互完整源码。
基于MobileNet轻量级网络实现的常见30多种食物分类,包含数据集、训练脚本、验证脚本、推理脚本等等。 数据集总共20k左右,推理的形式是本地的网页推理
2024年央国企RPA市场研究报.pdf
VSCodeSetup-x64-1.98.0.rar vscode是一种简化且高效的代码编辑器,同时支持诸如调试,任务执行和版本管理之类的开发操作。它的目标是提供一种快速的编码编译调试工具。然后将其余部分留给IDE。vscode集成了所有一款现代编辑器所应该具备的特性,包括语法高亮、可定制的热键绑定、括号匹配、以及代码片段收集等。 Visual Studio Code(简称VSCode)是Microsoft开发的代码编辑器,它支持Windows,Linux和macOS等操作系统以及开源代码。它支持测试,并具有内置的Git版本控制功能以及开发环境功能,例如代码完成(类似于IntelliSense),代码段和代码重构等。编辑器支持用户定制的配置,例如仍在编辑器中时,可以更改各种属性和参数,例如主题颜色,键盘快捷键等,内置的扩展程序管理功能。