PHP調(diào)用python,有很多種方式,查閱了下,大致有以下方式:
system、exec、shell_exec、passthrupopen、proc_opensocketppythonPHPRPCpip(python in php)XMLRPC、jsonrpc
當(dāng)然,還有ice這種通信組件,今天配置了下ice、然后運行了簡單的php和python通信、python和python通信的示例程序。
下載和安裝參見http://www.zeroc.com/download.html的Packages for Ubuntu 13.04 (Raring Ringtail) and 14.04 (Trusty Tahr)和Install instructions for Ubuntu 13.04 (Raring Ringtail)兩部分,安裝過程只碰到一個問題:E: Unable to locate package db5.3-utils,后來發(fā)現(xiàn)是程序包名錯了,應(yīng)該是db5.3-util
——————————————————————————
用python寫服務(wù)端和客戶端程序,通過ice進行通信
——————————————————————————
1、Writing a Slice Definition:hello.ice
module Demo { interface Printer { void printString(string s); };};
2、Compiling a Slice Definition for Python
slice2py hello.ice
3、Writing a Server in Python:server.py
import sys, traceback, Iceimport Democlass PrinterI(Demo.Printer): def printString(self, s, current=None): print sstatus = 0ic = Nonetry: ic = Ice.initialize(sys.argv) adapter = ic.createObjectAdapterWithEndpoints("SimplePrinterAdapter", "default -p 10000") object = PrinterI() adapter.add(object, ic.stringToIdentity("SimplePrinter")) adapter.activate() ic.waitForShutdown()except: traceback.print_exc() status = 1if ic: # Clean up try: ic.destroy() except: traceback.print_exc() status = 1sys.exit(status)
4、Writing a Client in Python:client.py
import sys, traceback, Iceimport Demostatus = 0ic = Nonetry: ic = Ice.initialize(sys.argv) base = ic.stringToProxy("SimplePrinter:default -p 10000") printer = Demo.PrinterPrx.checkedCast(base) if not printer: raise RuntimeError("Invalid proxy") printer.printString("python client say hello!")except: traceback.print_exc() status = 1if ic: # Clean up try: ic.destroy() except: traceback.print_exc() status = 1sys.exit(status)
5、運行server端
python server.py
6、運行client端
python client.py
7、服務(wù)端運行結(jié)果如下圖:服務(wù)端接收到了客戶端消息
————————————————————————————
用上邊的hello.ice、server.py
用php寫客戶端程序,通過ice進行通信
————————————————————————————
1、Compiling a Slice Definition for PHP
slice2php hello.ice
2、Writing a Client in PHP:client.php
<?phprequire 'Ice.php';require 'hello.php';$ic = null;try{ $ic = Ice_initialize(); $base = $ic->stringToProxy("SimplePrinter:default -p 10000"); $printer = Demo_PrinterPrxHelper::checkedCast($base); if(!$printer) throw new RuntimeException("Invalid proxy"); $printer->printString("php client say hello!");}catch(Exception $ex){ echo $ex;}if($ic){ // Clean up try { $ic->destroy(); } catch(Exception $ex) { echo $ex; }}?>
3、執(zhí)行php或訪問php
php -f client.php
4、服務(wù)端運行結(jié)果如下圖:服務(wù)端接收到了客戶端消息
參考資料:
http://www.zeroc.com/download.html
http://doc.zeroc.com/display/Ice/Writing+a+Slice+Definition
http://doc.zeroc.com/display/Ice/Writing+an+Ice+Application+with+Python
http://doc.zeroc.com/display/Ice/Writing+an+Ice+Application+with+PHP
注:我的環(huán)境是ubuntu kylin 13.04/apache2.2.22/python2.7.4/ice3.5
PHP編程鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。
新聞熱點
疑難解答