【发布时间】:2014-01-19 13:21:24
【问题描述】:
我正在编写的扩展是特定库的包装器。在 Linux 上,我的扩展通过 cli 和 apache 运行良好,但在 Windows 上它只能在 cli 中运行。 Apache 给我一个错误:
PHP 警告:PHP 启动:无法加载动态库 'C:\php\eps_api.dll' - 找不到指定的模块。\r\n 在第 0 行的未知中
我确定指定的 dll 在那里。
当我编译没有任何外部依赖项的简单扩展时,它可以工作,但是当我使用来自外部 dll 的函数时,它会失败。外部dll在PATH中,我再说一遍,php-cli很好用。
然后我尝试在 RINIT 中使用 LoadLibrary() 函数,但它也在 apache 中失败并出现错误 126(找不到模块)并在 cli 中工作。
我的扩展是用 MSVC9 编译的,外部库是用 MinGW 4.6.2 编译的,我想这就是问题所在。 .a 导出表使用 CMake 函数 GNUtoMS 转换为 .lib。 Apache 版本 2.2.26,Windows XP SP3。
任何想法如何使它工作?有关您的请求的配置、日志或技术信息。
附:对不起我的英语不好。
编辑: 我编写了测试脚本,打印了 PATH 变量,apache 返回的结果与 cmd 给出的结果大不相同。 所以问题是如何在apache中改变PATH?我在注册表中搜索条目,尝试在 httpd.conf 中使用 SetEnv 指令,但没有结果。
编辑 2: 问题已通过重启虚拟机和更新系统路径解决。
【问题讨论】:
-
您是否将它们包含在
php.ini文件中? -
@Victor,是的,我做到了。没有外部依赖项扩展正在工作。
-
也许你处理扩展文件不存在,库放在哪里?你重启服务器了吗?
-
@Victor,我的扩展文件和其他人在同一个文件夹中,extension_dir 指令指向这个文件夹。我的 apache 配置使用与 cli 相同的 php.ini,并且 cli 工作正常。每次更改后,我都会多次重新启动服务器。
-
可能这个库文件坏了?
标签: php windows apache dll php-extension