2009-10-01 109 views
17

我正在閱讀的地方,有時PHP是不夠快,編譯代碼有時「做繁重的工作」如何使用C++代碼與PHP進行交互?

什麼是在C + +的api做到這一點?

+2

之前尋找到混合C++與PHP,我想說的個人資料,並確保你找到PHP是很慢的部分,看看你是否可以先用PHP改進它。 當你用C++編寫擴展時,大多數允許你從語言X轉到C++的接口看起來很奇怪。 – Calyth

回答

32

您可以添加函數/類到PHP,編程在C (如果我從我剛剛閱讀的文章中正確記得,可以從C中包裝C++類),這可能會讓你更快地做一些事情 - 如果編程的很好:不需要解釋PHP代碼;只執行機器代碼,這通常方式更快。

要做到這一點,您必須開發PHP擴展


有沒有互聯網有關上提供很多ressources,但其中的一個可能會幫助你開始:

,具體關於C++的一部分,這其中也會有所幫助:


如果你是通過主題很感興趣,並準備花點錢就可以了,你可以還買書Extending and Embedding PHPsome pages are available as preview on Google Books太);我見過幾次,這是閱讀本書時,對這個問題感興趣(事實上,我已經買了它前一段時間,這是一個有趣的閱讀)

BTW,該這本書的作者也是前四篇文章的作者我掛;-)


希望這有助於...
玩得開心!

+0

感謝這些信息 - 這真的幫了我很多! – qodeninja

+0

包裝在PHP Extension中的C++類運行速度是否比在PHP中重寫速度更快?這有什麼好處? –

+0

感謝您的鏈接..不錯的文章 – Confused

9

實際上,你可以execute編譯的應用程序沒有任何類型的API:

$output = exec('/path/to/yourapp'); 

除此之外,你總是可以寫一個PHP擴展。這裏有一個很好的指導:http://devzone.zend.com/article/1021

+2

對於PHP擴展爲+1,但對於exec()爲-1() – LiraNuna

+2

@Lira:呃,爲什麼? – brianreavis

+0

如果不使用escapeshellarg()或escapeshellcmd(),攻擊者將損壞的命令行傳遞給函數,則exec()是一個很大的安全漏洞。 – mosid

6

swig, the Simplified Wrapper and Interface Generator可以幫你包裝(現有的)C++爲PHP模塊。

SWIG是一種軟件開發工具,它將用C和C++編寫的程序與各種高級編程語言連接起來。 SWIG與不同類型的語言一起使用,包括Perl,PHP,Python,Tcl和Ruby等通用腳本語言。
+0

剛剛嘗試使用SWIG寫一個非常簡單的C PHP包裝。完美無瑕地工作非常容易。 –

0

已經試過SWIG ??似乎是你的問題的一個很好的解決方案!

click here參觀SWIG網頁(文檔可能不會有太大的友好儘管!)