一、問題描述
從網上下載了一套PHP聊天室源碼,部署在Winserver中的Apache服務器,運行報錯如下:
打開文件 common.inc.php,發現一串不知所雲的代碼:
報錯信息說的是 sg_load 函數沒有找到,查找一番資料后,發現 sg_load 是 SourceGuardian 擴展提供的全局函數,運行環境需要這個擴展才能執行這段代碼。SourceGuardian 提供 php 源碼文件的加密,而運行這些加密 php 文件則需要安裝擴展:SourceGuardian loader。
二、SourceGuardian loader 安裝過程
瀏覽器中打開 https://www.sourceguardian.com/loaders/download.php,輸入服務器上打印了 phpinfo 信息的 php 文件地址:
在線的檢查腳本會根據 phpinfo 的信息,提取到 php 版本信息和擴展路徑,然后提示你需要的操作。例如它提示我 extension_dir 應設置為絕對路徑而非相對路徑:
那就改唄,在 php.ini 中找到 extension_dir,將原來的相對路徑 ./ext 改為絕對路徑。重啟 Apache 然后重新執行檢測:
到這一步它提示我需要:
- 下載 ixed.5.4.win
- 安裝到 php 擴展的 ext 目錄
- 在 php.ini 中加載它:extension=ixed.5.4.win
- 重啟 Apache
全部修改完成后,在 phpinfo 看到了 SourceGuardian 的相關信息,說明擴展已經生效了:
滿懷期待的再次訪問網站。依舊報錯,不過這一次不是找不到 sg_load 函數了,而是該擴展不支持 php5.4.45 版本 -_-||
沒辦法,只好切換 php 版本到5.6,然后重新執行上述步驟,再次訪問就一切OK~~
參考:
最后附一個補充文章,如何寫一個PHP擴展:https://devzone.zend.com/303/extension-writing-part-i-introduction-to-php-and-zend