2010-09-03 138 views
7

我有一個PHP類,我想要轉換爲PHP擴展。我查了一些教程(tuxradar's writing extensions,php.net's extending phpzend's extension writing),它有點複雜。將類轉換爲擴展

我發現文中的"How to write PHP extensions"編者提示:網站倒閉),我想知道是否可以使用這讓它從某個路徑搶一個PHP類(比如/home/website1/public_html/api/class.php),執行它並返回類實例。

這種方式可以在同一臺服務器上託管的其他網站中使用 - 每個網站都可以簡單地調用該函數,並獲得它自己的實例。

這可能嗎?

+0

你是否試圖讓別人使用你的課程,但他們無法查看源代碼?如果沒有,只需將class.php複製到其他站點可以獲取的文件系統中。如果沒有,只是製作很多副本。 除非出於性能考慮,否則通常不會將PHP類轉換爲擴展。 – bramp 2010-09-04 01:17:05

+0

是的,我需要讓別人使用這個類,而不需要查看源代碼,謝謝回覆 – Wiika 2010-09-04 01:37:15

回答

0

用一句話:我不這麼認爲,我認爲它的工作量比這更多。

4

現在我明白的問題是,用戶有一個PHP類,他們想與多人共享,但不想共享源代碼。

有很多解決方案,它們通常會將PHP代碼轉換爲某種字節代碼,並使用PHP擴展來運行字節代碼。我從來沒有使用過這些解決方案,但我知道下面的:

我確定還有其他人。只需谷歌PHP Compiler,或PHP Accelerator

0

不,沒有可以做到的工具。

無論如何,你想呼籲輕鬆完成與auto_prepend_file。只需將該ini指令指向具有類定義的PHP文件,然後它就可供所有應用程序使用。

如果您不希望用戶能夠使用源代碼,那麼您可以使用幾個zend擴展名,它們允許您預編譯該文件並以該形式使用它。

+0

我確實使用了auto_prepend_file,但是我的open_basedir限制有問題,有什麼我可以繞過嗎? – Wiika 2010-09-05 18:32:27

+0

@Wikka是的,你可以在文件的路徑open_basedir。 – Artefacto 2010-09-06 03:16:37

+0

可以給你更多的信息嗎? – Wiika 2010-09-07 05:04:15

0

您可以通過編寫PHP extensions將基礎C庫函數擴展到PHP空間。不過,我認爲你的情況你不需要寫一個。

0

我知道這是一個老問題(來自2012年),但答案已經改變,現在有一個工具可以做到這一點。 Jim Thunderbirds PHP-to-C擴展工具集提供了將一個文件中的簡單類一直到複雜的多文件多級名稱空間框架並將其轉換爲C擴展的方法,然後可以將其安裝到您的PHP服務器。

雖然在許多用例中這樣做並不是必需的,因爲普通的PHP代碼在某些情況下可以很好地工作,可以顯着提高性能。信息頁顯示一個普通類(故意設計需要很長時間)作爲簡單的vanilla PHP花了16.802139997482秒,而使用該工具構建的PHP擴展花費了3.9628620147705秒。

作爲一個附加優勢,該工具還提供了一個附加功能。能夠將PHP代碼(將轉換爲C)和本機C代碼結合在同一個擴展中的能力,這可以產生更高的性能增強。同樣的例子僅在工具0.14397192001343秒時使用了大部分密集代碼被移動到冒泡排序C代碼,並且只是從PHP代碼中調用它。

作爲最終功能的一個備註,開發人員使用擴展代碼使用代碼非常類似於手動包含在正在開發的PHP文件中的文件,除非它不必特別包含,因爲它是通過PHP擴展組件。 (免責聲明:我不屬於這個開發者,但很高興遇到它,因爲它到目前爲止將我的一些密集類轉換爲PHP擴展而不需要知道C)。