一、问题描述
从网上下载了一套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