找不到PHP 7.1.13扩展名

时间:2018-01-31 19:21:41

标签: php apache httpd.conf

我想在apache上安装php 7.1.13,但是当我尝试重新启动/启动apache时,我一直收到错误,

The request operation has failed!

在我的日志中,我不断收到无法找到php扩展的错误。但这不可能,因为我使用绝对路径到我的/ ext文件夹。

 PHP Warning:  PHP Startup: Unable to load dynamic library
 'D:\\apache\\php7\\ext\\php_mbstring.dll'

我还有较旧的PHP7文件夹,并且该工作正常,但是一旦我想升级到更高版本,我就会一直收到这些错误。

2 个答案:

答案 0 :(得分:0)

原因可能是您的php可执行文件和扩展库是由不同版本的编译器编译的。请在此处阅读如何找出两个文件中使用的编译器:Is there a way to determine which version of Visual Studio was used to compile a static library?

答案 1 :(得分:0)

确保:

  • php.ini中的扩展程序标记为extension=curlextension=ldap等。
    在以前的版本中,PHP 7+配置使用此格式代替extension=php_curl.dll(由于遗留原因仍然支持,但已弃用)。
  • config line extension_dir = "C:/path_to_your_php/"包含php扩展名的绝对路径。
  • 正确的Visual C ++ Redist已安装在您的系统中。例如。 PHP 7 x64 Apache 2.4 x64 都需要VCRedist 2017(x64:https://aka.ms/vs/15/release/vc_redist.x64.exe,x86:https://aka.ms/vs/15/release/vc_redist.x86.exe
  • 将以下配置行添加到您的<apache_dir>/conf/httpd.conf文件中:
LoadFile "path_to_php_dir/libsasl.dll"
LoadFile "path_to_php_dir/libpq.dll"
LoadFile "path_to_php_dir/php7ts.dll"
LoadFile "path_to_php_dir/libssh2.dll"
LoadFile "path_to_php_dir/nghttp2.dll"
LoadFile "path_to_php_dir/libcrypto-1_1-x64.dll"
LoadFile "path_to_php_dir/libssl-1_1-x64.dll"

此配置块使Apache可以预加载这些文件,因此,由于依赖性不匹配,您的扩展不会因加载而失败。

  • 其他扩展'和/或PHP DLL依赖关系不会错过。您可以使用免费的“Dependency Walker”工具(http://www.dependencywalker.com/)来检查加载错过的依赖项的DLL文件(例如php_dir/php*.dllphp_dir/ext/*.dll,...)。

    据我所知,问题是PHP扩展需要加载一些动态库(所谓的“库依赖”)。如果不是,则会收到错误“无法加载动态库..... 第0行中的未知”。很多时候我遇到了这个错误,问题在于DLL依赖性不匹配。