phprpc 使用实例(例实没错却不能执行)函数冲突gzdecode

PHPRPC 是一个轻型的、安全的、跨网际的、跨语言的、跨平台的、跨环境的、跨域的、支持复杂对象传输的、支持引用参数传递的、支持内容输出重定向的、支持分级错误处理的、支持会话的、面向服务的高性能远程过程调用协议。

遇到的问题总结:

Fatal error: Cannot redeclare gzdecode() in
1、重命名compat.php、phprpc_client.php的gzdecode(和系统函数冲突)函数为gzdecode_other

Non-static method PHPRPC_Server::initSession() should not be called statically
 2、修改phprpc_server.php文件里面initSession函数的类型为static即可。

3、phprpc_client.php 472行警告:
Notice: Undefined offset in phprpc_client.php line 472
修改成
 $arr = explode(‘=‘, $c, 2);
                    if(count($arr)>1)
                    {
                        list($name, $value)=$arr;
                        if (!in_array($name, array(‘domain‘, ‘expires‘, ‘path‘, ‘secure‘))) {
                            $_PHPRPC_COOKIES[$name] = $value;
                        }
                    }
4、Warning: The magic method __get() must have public visibility and cannot be static in compat.php(235) : eval()‘d code on line 3
改成public:
eval(‘
    class ‘ . $classname . ‘ {
        public function __get($name) {

php server端

<?php
include (‘php/phprpc_server.php‘);
include ‘entitys.php‘;

function hello($name)
{
    return ‘Hello ‘ . $name;
}
$server = new PHPRPC_Server();
$server->setCharset(‘UTF-8‘);
$server->setDebugMode(true);
$server->setEnableGZIP(true);

$server->add(‘hello‘);
$server->add(‘sort‘);
//$server->add(array(‘hello‘,‘md5‘,‘sha1‘));
$server->add(‘getcwd‘);//导出php内置函数
$server->add(‘add‘, new Calculator());
$server->add(‘mul‘, new Calculator());
$server->add(‘div‘, new Calculator());
$server->add(‘sub‘, new Calculator());
$server->add(‘fuck‘, new Calculator());
$server->add(‘getstudent‘, new Calculator());
$server->add(‘getstudents‘, new Calculator());

$server->start();
?>

  

<?php

class Student
{

    public $id;

    public $name;

    public $age;
}

/**
 * Calculator - sample class to expose via JSON-RPC
 */
class Calculator
{

    /**
     * Return sum of two variables
     *
     * @param int $x
     * @param int $y
     * @return int
     */
    public function add($x, $y)
    {
        return $x + $y;
    }

    /**
     * Return difference of two variables
     *
     * @param int $x
     * @param int $y
     * @return int
     */
    public function sub($x, $y)
    {
        return $x - $y;
    }

    /**
     * Return product of two variables
     *
     * @param int $x
     * @param int $y
     * @return int
     */
    public function mul($x, $y)
    {
        return $x * $y;
    }

    /**
     * Return the division of two variables
     *
     * @param int $x
     * @param int $y
     * @return float
     */
    public function div($x, $y)
    {
        return $x / $y;
    }

    public function fuck($str, $x, $y)
    {
        $m = $x + $y;
        return ‘fuck 日本‘ . $str . $m;
    }

    public function getstudent($student)
    {
        $student = new Student();
        $student->id = 110;
        $student->name = ‘php‘;
        $student->age = 21;
        return $student;
    }

    public function getstudents($id)
    {
        $entitys = array();
        for ($i=0;$i<10;$i++) {
            $student = new Student();
            $student->id = $i;
            $student->name = ‘中文php‘.$i;
            $student->age = 21;
            array_push($entitys, $student);
        }
        return $entitys;
    }
}
?>

  

php client客户端

<?php
include ("php/phprpc_client.php");
$client = new PHPRPC_Client(‘http://localhost/phprpc/index.php‘);

echo ‘<br/>‘;
$ret=$client->add(12,32);
print_r($ret);

echo ‘<br/>‘;
$ret=$client->mul(12,32);
print_r($ret);

echo ‘<br/>‘;
$ret=$client->fuck(‘xx测试‘,12,32);
print_r($ret);

echo ‘<br/>‘;
$ret=$client->hello(‘xx测试‘,12,32);
print_r($ret);

echo ‘<br/>‘;
$ret=$client->getstudent(‘getstudent‘);
print_r($ret);

echo ‘<br/>‘;
$ret=$client->getstudents(‘getstudents‘);
print_r($ret);

echo ‘<br/>‘;
print_r($client->getOutput());
?>

  

java  客户端:

package com.jiepu.client;

import org.phprpc.PHPRPC_Client;
import org.phprpc.util.AssocArray;
import org.phprpc.util.Cast;

public class IncClient {

	// http://leyteris.iteye.com/blog/1004669

	//http://www.phprpc.org/zh_CN/docs/
	//android下面也一样
	public static void main(String[] args) {

		PHPRPC_Client client = new PHPRPC_Client(
				"http://10.0.0.108/phprpc/index.php");
		System.out.println(client.invoke("add", new Object[] { 12, 32 }));
		System.out.println(client.invoke("sub", new Object[] { 12, 32 }));
		System.out.println(client.invoke("mul", new Object[] { 12, 32 }));
		System.out.println(client.invoke("div", new Object[] { 12, 32 }));

		System.out.println(Cast.toString(client.invoke("fuck", new Object[] {
				"hehe你好", 12, 32 })));		

		System.out.println(Cast.toString(client.invoke("getcwd", new Object[] {})));

		System.out.println(Cast.toString(client.invoke("hello",
				new Object[] { "java" })));

		//public公共类Student自动映射转换
		Object obj=client.invoke("getstudent",new Object[] { "java" });
		Student stu=(Student) Cast.cast(obj, Student.class);
		System.out.println(stu);

		/**手动转换
		HashMap<Object, Object> objs = (HashMap<Object, Object>) client.invoke("getstudent",
				new Object[] { "java" });
		if(objs.size()>0)
		{
			Student student = new Student();
			student.setAge(Integer.parseInt(Cast.toString(objs.get("age"))));
			student.setName(Cast.toString(objs.get("name")));
			student.setId(Integer.parseInt(Cast.toString(objs.get("id"))));
			System.out.println(student);
			System.out.println("===========");
		}*/

		AssocArray alist = (AssocArray) client.invoke("getstudents",
				new Object[] { "java" });
		for (int i = 0; i < alist.size(); ++i) {
			// System.out.println(alist.get(i).getClass());
			Student student=(Student) Cast.cast(alist.get(i), Student.class);
			System.out.println(student);

		}

		// System.out.println(client.getWarning());

	}
}

  

package com.jiepu.client;
import java.io.Serializable;

public class Student implements Serializable {

	private static final long serialVersionUID = 3475272786622279878L;
	private Integer id;
	private String name;
	private Integer age;

	@Override
	public String toString() {
		return "Student [age=" + age + ", id=" + id + ", name=" + name
				+ "]";
	}

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public Integer getAge() {
		return age;
	}

	public void setAge(Integer age) {
		this.age = age;
	}
}

  

android客户端:

package com.example.androidjsonrpc;

import java.util.List;

import org.alexd.jsonrpc.JSONRPCClient;
import org.alexd.jsonrpc.JSONRPCException;
import org.alexd.jsonrpc.JSONRPCParams.Versions;
import org.phprpc.PHPRPC_Client;
import org.phprpc.util.AssocArray;
import org.phprpc.util.Cast;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;

import com.alibaba.fastjson.JSON;

public class MainActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
	}

	public void run(View view) {
		new Thread(new Runnable() {

			@Override
			public void run() {
				runinthread();
			}
		}).start();
	}

	public void runphprpc(View view) {
		new Thread(new Runnable() {

			@Override
			public void run() {
				runphprpc();
			}

		}).start();
	}
	private void runphprpc() {

		PHPRPC_Client client = new PHPRPC_Client(
				"http://10.0.0.108/phprpc/index.php");
		System.out.println(client.invoke("add", new Object[] { 12, 32 }));
		System.out.println(client.invoke("sub", new Object[] { 12, 32 }));
		System.out.println(client.invoke("mul", new Object[] { 12, 32 }));
		System.out.println(client.invoke("div", new Object[] { 12, 32 }));

		System.out.println(Cast.toString(client.invoke("fuck", new Object[] {
				"hehe你好", 12, 32 })));		

		System.out.println(Cast.toString(client.invoke("getcwd", new Object[] {})));

		System.out.println(Cast.toString(client.invoke("hello",
				new Object[] { "java" })));

		//public公共类Student自动映射转换
		Object obj=client.invoke("getstudent",new Object[] { "java" });
		Student stu=(Student) Cast.cast(obj, Student.class);
		System.out.println(stu);

		/**手动转换
		HashMap<Object, Object> objs = (HashMap<Object, Object>) client.invoke("getstudent",
				new Object[] { "java" });
		if(objs.size()>0)
		{
			Student student = new Student();
			student.setAge(Integer.parseInt(Cast.toString(objs.get("age"))));
			student.setName(Cast.toString(objs.get("name")));
			student.setId(Integer.parseInt(Cast.toString(objs.get("id"))));
			System.out.println(student);
			System.out.println("===========");
		}*/

		AssocArray alist = (AssocArray) client.invoke("getstudents",
				new Object[] { "java" });
		for (int i = 0; i < alist.size(); ++i) {
			// System.out.println(alist.get(i).getClass());
			Student student=(Student) Cast.cast(alist.get(i), Student.class);
			System.out.println(student);

		}

	}

	public void runinthread() {
		// https://code.google.com/p/android-json-rpc/downloads/list
		// http://www.oschina.net/p/android-json-rpc
		JSONRPCClient client = JSONRPCClient.create(
				"http://10.0.0.107/json_server/server.php", Versions.VERSION_2);
		client.setConnectionTimeout(2000);
		client.setSoTimeout(2000);
		try {
			String string = client.callString("fuck", "android谷歌", 15, 32);
			Log.i("androidjsonrpc", "fuck=" + string);
			int i = client.callInt("add", 56, 25);
			Log.i("androidjsonrpc", i + "");

			// Student student=(Student) client.call("getstudent", new
			// Student(1,"name",123));
			// Log.i("androidjsonrpc", student.toString());
			// Log.i("androidjsonrpc", client.call("getstudent", new
			// Student(1,"name",123)).toString());
			// Log.i("androidjsonrpc", client.call("getstudents",
			// "xx").toString());

			String str = client.callString("getstudent", new Student(1, "name",
					123));
			Log.i("androidjsonrpc", str);

			// fastjson 转换json字符串为对象
			Student student = JSON.parseObject(str, Student.class);
			Log.i("androidjsonrpc", student.toString());

			str = client.callString("getstudents", "xx");
			Log.i("androidjsonrpc", str);

			// 使用到fastjson 转换json数组为list对象
			List<Student> students = JSON.parseArray(str, Student.class);
			Log.i("androidjsonrpc", students.toString());

		} catch (JSONRPCException e) {
			e.printStackTrace();
		}
	}

}

  

Delphi 客户端:

unit Unit4;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, PHPRPCSynaHttpClient, PHPRPC, PHPRPCClient, PHPRPCIdHttpClient,
  StdCtrls;

type
  TForm4 = class(TForm)
    Button1: TButton;
    PHPRPCIdHttpClient1: TPHPRPCIdHttpClient;
    PHPRPCSynaHttpClient1: TPHPRPCSynaHttpClient;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

  TStudent = class(TPHPObject)
  private
    Fid: Integer;
    Fname: AnsiString;
    Fage: Integer;
  published
    property id: Integer read Fid write Fid;
    property name: AnsiString read Fname write Fname;
    property age: Integer read Fage write Fage;
  end;

var
  Form4: TForm4;

implementation

{$R *.dfm}

procedure TForm4.Button1Click(Sender: TObject);
var
  clientProxy: Variant;
  int_ret, i: Integer;
  string_ret: string;
  vhashmap: Variant;
  ohashmap: THashMap;
  arraylist, keys, values: TArrayList;
  key, value, tmp: Variant;
  student: TStudent;
begin
  // http://www.phprpc.org/zh_CN/docs/
  clientProxy := PHPRPCIdHttpClient1.useService
    (‘http://10.0.0.108/phprpc/index.php‘);
  int_ret := clientProxy.add(12, 52);
  ShowMessage(IntToStr(int_ret));
  // 中文字符串参数要转换为UTF8编码
  string_ret := clientProxy.fuck(AnsiToUTF8(‘xxx你好‘), 15, 45);
  // 中文的服务器输出的也是UTF8编码,本地打印要转换为本地编码
  ShowMessage(UTF8ToAnsi(string_ret));

  string_ret := clientProxy.getcwd();
  ShowMessage(UTF8ToAnsi(string_ret));

  string_ret := clientProxy.hello(AnsiToUTF8(‘xxx‘));
  ShowMessage(UTF8ToAnsi(string_ret));

  TStudent.RegisterClass(‘Student‘);

  tmp := clientProxy.getstudent(AnsiToUTF8(‘java‘));
  // ShowMessage(UTF8ToAnsi(tmp));
  // 转换为student对象
  student := TStudent(TStudent.FromVariant(tmp));
  ShowMessage(IntToStr(student.id) + ‘,‘ + UTF8ToAnsi(student.name)+ ‘,‘ + IntToStr
      (student.age));

  vhashmap := clientProxy.getstudents(AnsiToUTF8(‘java‘));

  ohashmap := THashMap(THashMap.FromVariant(vhashmap));

  arraylist := ohashmap.ToArrayList;
  for i := 0 to arraylist.Count - 1 do
  begin
    // ShowMessage(arraylist.Items[i]);
    student := TStudent(TStudent.FromVariant(arraylist.Items[i]));
    ShowMessage(IntToStr(student.id) + ‘,‘ + UTF8ToAnsi(student.name)+ ‘,‘ + IntToStr
        (student.age));

  end;
  arraylist.Free;

  { keys:=ohashmap.Keys;
    values:=ohashmap.Values;
    for i := 0 to keys.Count - 1 do
    begin
    key:=keys[i];
    value:=values[i];
    ShowMessage(values.List[i]);
    ShowMessage(value);
    // ohashmap := THashMap(THashMap.FromVariant(value));
    //ShowMessage(ohashmap.Values[0].Properties[‘name‘]);
    end;
    }

end;

end.

  

来自:http://blog.csdn.net/earbao/article/details/46428565

源码下载:http://pan.baidu.com/s/1eQ6KOcq

时间: 2024-10-12 11:01:13

phprpc 使用实例(例实没错却不能执行)函数冲突gzdecode的相关文章

简单介绍如何使用PowerMock和Mockito来mock 1. 构造函数 2. 静态函数 3. 枚举实现的单例 4. 选择参数值做为函数的返回值(转)

本文将简单介绍如何使用PowerMock和Mockito来mock1. 构造函数2. 静态函数3. 枚举实现的单例4. 选择参数值做为函数的返回值5. 在调用mock出来的方法中,改变方法参数的值 一点简要说明:Mockito其实已经可以满足大部分的需求,但是它的实现机制是使用cglib来动态创建接口的类的实例.但是这种实现方式不能用于构造函数和静态函数,因为那需要使用类的字节码(比如使用javassist). 所以我们才需要结合使用PowerMock. 1. mock构造函数, 如果有代码没有

【COCOS2D-HTML5 开发之三】演示样例项目附源代码及执行的GIF效果图

本站文章均为李华明Himi原创,转载务必在明显处注明:(作者新浪微博:@李华明Himi) 转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/cocos2d-html5/1528.html ? 点击订阅 ? 本博客最新动态!及时将最新博文通知您! Cocos2dx html5开发,对于用过2d Or -x的童鞋来说非常easy,Himi这里也没有必要去再跟同学们具体的教学一遍. 所以Himi简单做了一个项目,供给大家參考,源代码下载地址及GIF截图在文章

用实例带你走进this、执行上下文世界[js篇一]

前言: 通过本文你将学习到this的多种用法和使用场景.执行上下文(执行环境)的相关概念. javascript 中this 指向多变.使用场景复杂,也是因其的强大灵活,在前端进阶中也是重要一环,如果能熟练驾驭就能写出更简洁.高质量的代码. 1.执行上下文(执行环境) 在说this之前不得不先说说执行上下文,可以理解为当前代码的执行环境.js中执行环境大概分为三种情况: 全局执行上下文(js运行首次会进入该环境) ---->eg: window对象 函数执行上下文(函数调用) eval JS首次

图解“管道过滤器模式”应用实例:SOD框架的命令执行管道

管道和过滤器 管道和过滤器是八种体系结构模式之一,这八种体系结构模式是:层.管道和过滤器.黑板.代理者.模型-视图-控制器(MVC) 表示-抽象-控制(PAC).微核.映像. 管道和过滤器适用于需要渐增式处理数据流的领域,而常见的“层”模式它 能够被分解成子任务组,其中每个子任务组处于一个特定的抽象层次上. 按照<POSA(面向模式的软件架构)>里的说法,管道过滤器(Pipe-And-Filter)应该属于架构模式,因为它通常决定了一个系统的基本架构.管道过滤器和生产流水线类似,在生产流水线上

解决win7系统不支持16位实模式汇编程序DOS执行的问题

这学期学习了汇编,在自己电脑上发现,win7的dos不支持16位实模式. 对编程来说,不能执行程序是致命的. 在经过网上搜集资料后,得到一种解决的方法--使用dosbox软件执行 dosbox简单说,就是一个dos模拟程序,支持16位实模式. 1.首先下载一个dosbox安装程序并安装,以下给出地址 http://sourceforge.net/projects/dosbox/files/dosbox/0.73/DOSBox0.73-win32-installer.exe/download 2.

phprpc的使用示例以及报错Fatal error: Cannot redeclare gzdecode() in D:\wamp\www\immoc\phprpc\compat.php 处理

今天看书,发现了PHPRPC这个好东东,故在此写下来以作笔记. PHPRPC 是一个轻型的.安全的.跨网际的.跨语言的.跨平台的.跨环境的.跨域的.支持复杂对象传输的.支持引用参数传递的.支持内容输出重定向的.支持分级错误处理的.支持会话的.面向服务的高性能远程过程调用协议. 下载地址:http://www.phprpc.org/zh_CN/download/ 该版本直接解压后就可以使用,其中bigint.php.compat.php.phprpc_date.php.xxtea.php属于公共文

用C/C++实现对STORM的执行信息查看和控制

近期公司有个需求.须要在后端应用server上实时获取STORM集群的执行信息和topology相关的提交和控制,经过几天对STORM UI和CMD源代码的分析,得出能够通过其thrift接口调用实现这些功能.先下载一个thrift库进行编码和安装.关于thrift能够參见这个地方. 安装完毕后,从STORM源代码中将storm.thrift复制到thrift文件夹下. 输入: hrift -gen cpp storm.thrift 会得到一个gen-cpp文件夹,里面就是thrift先关脚本的

C++入门经典-例9.1-函数模板,函数模板的作用,使用数组作为模板参数

1:函数模板不是一个实在的函数,因此编译器不能为其生成可执行的代码.定义函数模板只是一个对函数功能框架的描述,在具体执行时,将根据传递的实际参数决定其功能. 2:函数模板定义的一般形式如下: template <类型形式参数> 返回类型 函数名(形式参数表) { ...//函数实现 } 其中template为关键字,表示定义一个模板,尖括号"<>"中为模板参数,模板参数主要有两种,一种是模板类型参数,另一种是模板非类型参数.上述代码中定义的模板使用的是模板类型参

wordpress头部(header)模板常用函数

<?php bloginfo('pingback_url'); ?> //WordPress博客的Pingback地址 <?php bloginfo('template_url'); ?> //WordPress主题文件的相对地址 <?php bloginfo('version'); ?> //博客的Wordpress版本 <?php bloginfo('name'); ?> //WordPress博客的名称 <?php bloginfo('name'