ICE
是一个跨语言, 跨平台的RPC
框架, 一般公司也使用较多, 除了开源之外, 文档健全也是它能够被大家接受的一个重要原因. 对于java
, python
, nodejs
等语言来讲, 使用ICE
是一件非常容易的事情, 只需要引入相关的包, 而对于PHP
来讲, 就不是那么简单了, 特别是高版本的PHP
, 官方的yum
安装不支持5.4
以上的版本, 所以这个时候, 只能自己动手编译安装了
1. 引入ice开发相关的yum源
# 进入yum源目录, 下载ICE相关的yun源
cd /etc/yum.repos.d
# centos 6 (只能选择其中之一)
wget https://zeroc.com/download/rpm/zeroc-ice-el6.repo
# centos 7
wget https://zeroc.com/download/rpm/zeroc-ice-el7.repo
2. 安装相关依赖
yum install gcc-c++
yum install mcpp-devel
yum install libdb-cxx-devel
yum install openssl-devel
yum install bzip2-devel
yum install expat-devel
3. 安装php相关模块
# CentOS 6.x 源 (只能选择其中之一)
rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm
rpm -Uvh https://mirror.webtatic.com/yum/el6/latest.rpm
# CentOS 7.x 源
rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
yum install php70w php70w-devel
4. 下载ice源码,编译安装
# 下载源码
cd /opt
yum install git -y
git clone -b 3.6 https://github.com/zeroc-ice/ice.git
# 编译ice c++模块
cd /opt/ice/cpp
make # 时间会很久
make install # 会在/opt/目录下生成新的文件夹 Ice-3.6.3
# 编译ice php模块
cd /opt/ice/php
make
make install
如果出现找不到
INT64_MAX
或INT64_MIN
的错误, 最简单的做法就是修改php源码
cd /usr/include/php/Zend
将下面文件中两个变量类型的 64 都去掉, 如下图所示
5. 配置php
扩展
# 查看php扩展文件存放的目录
php -i | grep extension_dir
# 假设在/usr/lib64/php/modules/路径下
cp /opt/Ice-3.6.3/php/IcePHP.so /usr/lib64/php/modules/
# 添加ice.ini
cd /etc/php.d
vi ice.ini
# 添加如下内容
;Enable ice extension module
extension=IcePHP.so
# 检测php模块加载情况, 会发现有些*.so.36文件找不到
php -m
# 添加lib到全局
echo "/opt/Ice-3.6.3/lib64" > /etc/ld.so.conf.d/ice-x86_64.conf
# 使之生效
ldconfig
# 再次检测, 发现ice已经添加上了
php -m
除此之外, 还需要检测
php web
服务是否加载
6. 使用ICE
# 在调用的ice文件中引入加载文件路径
ini_set('include_path',ini_get('include_path') . PATH_SEPARATOR . '/opt/Ice-3.6.3/php');
require 'Ice.php'; // Load the core Ice run time definitions.
require 'yinnote.php';
$proxy_url = "printerClient -e 1.0:tcp -h yinnote.com -p 10002";
$ic = null;
try
{
$ic = Ice_initialize();
$base = $ic->stringToProxy($proxy_url);
$printer = PrintServer_PrintinterfacePrxHelper::checkedCast($base);
if(!$printer)
throw new RuntimeException("Invalid proxy");
echo $printer->printHelloWorld();
}
catch(Exception $ex)
{
echo $ex;
}
if($ic)
{
// Clean up
try
{
$ic->destroy();
}
catch(Exception $ex)
{
echo $ex;
}
}
</code>
相关地址
# 编译安装配置地址
https://github.com/zeroc-ice/ice/blob/3.6/php/BuildInstructionsLinuxOSX.md
# 源代码Git下载地址
https://github.com/zeroc-ice/ice.git
网友评论