【问题标题】:PHP extension does not work with Apache on WindowsPHP 扩展不适用于 Windows 上的 Apache
【发布时间】: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


【解决方案1】:

在 Windows 上,该特定错误消息可能意味着未找到指定模块的依赖项。获取“depends.exe”并确保 Apache 的 PATH 具有所有必需的传递依赖项。

【讨论】:

  • Apache 路径与系统路径不同吗?我该如何配置它?
猜你喜欢
  • 2016-11-19
  • 2016-03-19
  • 2016-03-11
  • 2013-05-25
  • 2011-01-04
  • 2014-01-22
  • 1970-01-01
  • 1970-01-01
  • 2017-02-01
相关资源
最近更新 更多