根據你所選擇的不同的構建過程,你要麼把擴充套件編譯進乙個新的php 的二進位制檔案,然後再連線到 web 伺服器(或以cgi 模式執行),要麼將其編譯成乙個 .so (共享庫)檔案。如果你將上面的樣例檔案 first_module.c 編譯成了乙個共享庫,那麼編譯後的檔案應該是 first_module.so。要想使用它,你就必須把他複製到乙個 php 能訪問到的地方。如果僅僅是為了測試的話,簡單起見,你可以把它複製到你的 htdocs 目錄下,然後用「例3.3 first_module.so 的乙個測試檔案」中的**來進行一下測試。如果你將其直接編譯編譯進 php 二進位制檔案的話,那就不用呼叫dl()函式了,因為這個模組的函式在指令碼一開始執行就生效了。
警告:
為了安全起見,你不應該將你的動態模組放入乙個公共目錄。即使是乙個簡單的測試你可以那麼做,那也應該把它放進產品環境中的乙個隔離的目錄。
例3.3 first_module.so 的乙個測試檔案
<?php
// remove next comment if necessary
// dl("first_module.so");
$param = 2;
$return = first_module($param);
print("we sent '$param' and got '$return'");
?>
呼叫這個測試檔案,結果應該輸出為:we sent '2' and got '2'。
若有需要,你可以呼叫dl()函式來載入乙個動態可載入模組。這個函式負責尋找指定的共享庫並進行載入使其函式在 php 中生效。這個樣例模組僅輸出了乙個函式first_module(),這個函式僅接受乙個引數,並將其轉換為整數作為函式的結果返回。
如果你已經進行到了這一步,那麼,恭喜你,你已經成功建立了你的第乙個 php 擴充套件!
深入理解php核心
第二章 使用者 的執行 第三節 zend引擎與指令碼執行 第四節 小結 第三章 變數及資料型別 第二節 常量 第三節 預定義變數 第四節 靜態變數 第五節 型別提示的實現 第六節 變數的生命週期 第七節 資料型別轉換 第八節 小結 第四章 函式的實現 第二節 函式的定義,引數及返回值 第三節 函式的...
深入理解php核心
第二章 使用者 的執行 第三節 zend引擎與指令碼執行 第四節 小結 第三章 變數及資料型別 第二節 常量 第三節 預定義變數 第四節 靜態變數 第五節 型別提示的實現 第六節 變數的生命週期 第七節 資料型別轉換 第八節 小結 第四章 函式的實現 第二節 函式的定義,引數及返回值 第三節 函式的...
Redis (六 深入了解redis核心)
記憶體淘汰 redis記憶體不足時,有兩種處理方式 1 啟用虛擬記憶體 將vm enabled設定為yes 2 啟用記憶體淘汰 將maxmemory設定為乙個大於0的整數 redis的使用記憶體大於最大分配可用記憶體時,開始進行淘汰,memcache只有lru演算法,redis有 1 隨機淘汰 從資...