PHP与其他语言交互-总结

原网址将会不断更新 :   作程的技术博客  《PHP与其他语言交互-总结》 it.zuocheng.net

软件或者系统,不同模块可能由不同的语言编写,必然会存在不同语言之间交互和通信的问题。本文站在PHP的角度,探讨PHP与其他语言交互的方式。

语言层面交互

使用胶水语言

胶水语言Shell scripts Python Ruby Lua Tcl Perl。

其本质是调用操作系统的输入与输出,由操作系统创建由其他语言写成的应用的新进程,再将其输出返回给PHP。

优点是简单容易实现。

缺点是:

  • 系统调用有一定风险;
  • 每次调用系统都创建新的进程,开销较大
  • 复杂数据结构无法直接传递

编写PHP扩展

将其他语言提供的API封装成C接口(往往需要再编译为动态链接库),在PHP扩展中再对其进行封装,使其可以在PHP语句中直接调用。

优点 :

  • 性能很高
  • 可以实现复杂结构数据的交互。

缺点 :

  • 开发、运维成本较高

使用PHP Native Interface (PNI)

PNI 是一个PHP 扩展,允许PHP代码中直接调用C的类库

使用SWIG

最终的目的是编写PHP扩展,不同的是SWIG提供的接口让开发者省去了学习比Zend API 和 PHP API 的成本。

进程间交互

如果在语言层面无法直接交互,可使用进程间的交互方法。本质是调用操作系统提供的进程间交互方法。

  • 信号
  • 信号量
  • 管道
  • 消息队列
  • 共享内存
  • 文件、内存数据库等

系统间交互

如果由不同语言编写的系统之间进行交互,则有以下几种方法:

  • 网络调用 (Http 、 Socket 、 Web Service)
  • 数据库
  • 数据文件
  • 分布式系统 (Memcache、Radis、rabitMQ)
时间: 2025-01-01 06:29:50

PHP与其他语言交互-总结的相关文章

Perl与R语言交互

#!usr/bin/perl use Statistics::R;#---new函数my $r=Statistics::R->new(); #---send,read函数$r->send(qq'a=c(1,2,3,4); b=mean(a);\n c=sqrt(b) ;print(c)');my $result=$r->read;print $result,"\n";#---转换称数值格式$result=~s/\[\d\]\s+(\d+)/$1/g;print $re

C/C++生成静态库动态库及语言交互

C++静态库与动态库(比较透彻) Go中调用C的动态库与静态库 我的示例 文件结构 |- sample |- c |- libsample |- libsample.h |- libsample.cpp |- g |- main.go libsample.h #ifdef __cplusplus extern "C" { #endif int add(int a, int b); #ifdef __cplusplus } #endif libsample.cpp #include &q

利用R语言进行交互数据可视化(转)

上周在中国R语言大会北京会场上,给大家分享了如何利用R语言交互数据可视化.现场同学对这块内容颇有兴趣,故今天把一些常用的交互可视化的R包搬出来与大家分享. rCharts包 说起R语言的交互包,第一个想到的应该就是rCharts包.该包直接在R中生成基于D3的Web界面. rCharts包的安装 require(devtools) install_github('rCharts', 'ramnathv') rCharts函数就像lattice函数一样,通过formula.data指定数据源和绘图

利用R语言进行交互数据可视化

本文是本人受统计之都邀请写的一篇关于数据可视化的文章,感兴趣的同学可以上统计之都去查看. http://cos.name/2016/06/using-r-for-interactive-data-visualization/ 上周在中国R语言大会北京会场上,给大家分享了如何利用R语言交互数据可视化.现场同学对这块内容颇有兴趣,故今天把一些常用的交互可视化的R包搬出来与大家分享. rCharts包 说起R语言的交互包,第一个想到的应该就是rCharts包.该包直接在R中生成基于D3的Web界面.

XML-RPC 实现C++和C#交互

我们通常会面对这样的问题:整合不同平台或不同类库,这些类库可能来自不同的语言,甚至不同的操作系统. 如何解决这类棘手的问题呢? 一.方案介绍 解决不同语言交互的方法有不少,对我了解的windows系统和.NET平台,有以下几种做法: P/Invoke: 调用native cpp的方法,处在同一个内存区间,访问方便,但包装困难,可能抛出运行时异常. 读写文件:通过一头读文件,一头写文件的方式实现交互.诸位别笑,本科时候我就用过这种方式解决问题. 命名管道/socket: 通过字节数组的方式实现交互

Android之——JNI与C语言常见术语

转载请注明出处:http://blog.csdn.net/l1028386804/article/details/47450717 库函数: |-  为了代码重用,在C语言中提供了一些常用的.用于执行一些标准任务(如输入/出)的函数,这些函数事先被编译,并生成目标代码,然后将生成的目标代码打包成一个库文件,以供再次使用.库文件中的函数被称为库函数,库文件被称为函数库. |-  在Windows中C语言库函数中的中间代码都是以.obj为后缀的,Linux中是以.o为后缀. 提示:单个目标代码是无法

Go语言_RPC_Go语言的RPC

一 标准库的RPC RPC(Remote Procedure Call,远程过程调用)是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络细节的应用程序通信协议.简单的说就是要像调用本地函数一样调用服务器的函数. RPC协议构建于TCP或UDP,或者是 HTTP之上,允许开发者直接调用另一台计算机上的程序,而开发者无需额外地为这个调用过程编写网络通信相关代码,使得开发包括网络分布式程序在内的应用程序更加容易. Go语言的标准库已经提供了RPC框架和不同的RPC实现. 下面是一个服务器的

Go语言核心技术(卷一)之2.1-整数

第二章 序 在计算机底层,一切都是比特位.然而计算机一般都操作固定大小的数,称之为字(word).字会被解释为整数.浮点数.比特位数组.内存地址等,这些字又可以进一步聚合成数据包(packet).像素点.作品集.是个或者其它任何对象.Go语言提供了多样化的数据组织方式,这些数据类型能提供硬件层面的兼容性,也能让程序员方便的组合成更复杂的数据类型. Go语言的数据类型分为四大类:基本类型,复合类型,引用类型及接口类型.本章将介绍基本类型:数字,字符串,布尔值. 一.整数 Go语言的数值数据类型包括

Go语言编程(旧读书笔记)

Go语言编程 目录 [隐藏] 1 前言 2 初识Go语言 3 顺序编程 4 OOP 5 并发编程 6 网络编程 7 安全编程 8 工程管理 9 开发工具 10 进阶话题 11 附录A [编辑]前言 协程? go run('test') Go强制了{ }的编写风格: if expression { 错误处理: defer?相当于finally?注意这里的作用域,defer之前似乎没有用{ }把整个(try)块括起来? defer相当于说推迟语句的执行,其内部实现会自动管理嵌套作用域的问题? Go允