代码之家  ›  专栏  ›  技术社区  ›  Scott Bonner

PHP启动:无法加载动态库、Windows、Apache 2.2、PHP 5.2.11

  •  7
  • Scott Bonner  · 技术社区  · 15 年前

    这正成为一个非常令人沮丧的问题。我正在尝试彻底安装Apache2.2和php 5.2.11。似乎所有的配置都正确,但PHP模块没有启动…

    PHP Warning:  PHP Startup: Unable to load dynamic library '.;C:/Program Files (x86)/Apache Software Foundation/Apache2.2/php/ext/php_mcrypt.dll' - The specified module could not be found.\r\n in Unknown on line 0
    PHP Warning:  PHP Startup: Unable to load dynamic library '.;C:/Program Files (x86)/Apache Software Foundation/Apache2.2/php/ext/php_mysql.dll' - The specified module could not be found.\r\n in Unknown on line 0
    PHP Warning:  PHP Startup: Unable to load dynamic library '.;C:/Program Files (x86)/Apache Software Foundation/Apache2.2/php/ext/php_openssl.dll' - The specified module could not be found.\r\n in Unknown on line 0

    在PHPini

    include_path = ".;C:\Program Files (x86)\Apache Software Foundation\Apache2.2\php"
    extension_dir = ".;C:/Program Files (x86)/Apache Software Foundation/Apache2.2/php/ext/"
    

    所有文件都在那里…ssleay32.dll、libmcrypt.dll、libmysql.dll、libeay32.dll等.dll文件都安装在…

    C//程序文件(x86)/Apache软件基金会/ APACHE2.2.PHP/

    我还将它们包括在c:\windows\system32中

    甚至在Windows路径中添加了C/:程序文件(x86)/Apache软件基金会/APACHE2.2/PHP/。

    我不知道为什么这不起作用,感觉像是一个不赢的局面。有人对如何让这一切正常运转有什么想法吗?

    4 回复  |  直到 6 年前
        1
  •  10
  •   Carlos Lima    15 年前

    试试这个:

    extension_dir = "C:/Program Files (x86)/Apache Software Foundation/Apache2.2/php/ext/"
    

    而不是从 .;

        2
  •  2
  •   icc97    8 年前

    如果没有其他的,就为了我未来的自己。这是在IIs8上的Windows中运行的php 5.2.13。

    我有以下错误:

    php警告:php启动:无法加载动态库“c:\program files(x86)\php\ext\php_openssl.dll”-找不到指定的模块。

    phpinfo() 加载的php.ini文件是 C:\Program Files (x86)\PHP\php.ini .

    扩展目录:

    extension_dir ="C:\Program Files (x86)\PHP\ext"
    

    这是最后两行 php.ini 文件:

    [PHP_SQLSRV]
    extension=php_sqlsrv_52_nts_vc6.dll
    [PHP_OPENSSL]
    extension=php_openssl.dll
    

    这个 php_openssl.dll php_sqlsrv_52_nts_vc6.dll 文件在 ext 目录。这个 黄连 没有损坏(文件大小与另一台正在工作的计算机上的文件大小相同)。

    PHP将找到sqlsrv dll,而不是openssl dll。不知道为什么。大量的IIS重新启动都没有做任何事情。

    直到我知道更好的解决方案是使用WindowsPHP安装程序安装openssl.dll扩展。您可以重新运行安装程序并选择“更改”,它允许您添加或删除库。我现在看不到文件或php.in i文件有什么不同,但现在文件被加载了。

    我怀疑实际上我的问题和这个类似 comment about OpenSSL installation on Windows :

    此时,当您启动Apache时,它将尝试加载php_Openssl.dll,但是如果您的设置与我的类似,您将看到一个错误。我更喜欢手动启动Apache,错误出现在一个对话框中:“在动态链接库libeay32.dll中找不到序号4114”。(我不确定如果将Apache作为服务启动,您是否会收到此消息)。Apache日志还包含一条错误消息,说明无法加载php_Openssl.dll,尽管该消息没有命名libeay32.dll。欢迎来到DLL地狱。

    libeay32.dll进入图片是因为php ou openssl.dll依赖于它(也依赖于ssleay32.dll)。我认为Apache首先尝试从扩展名_dir键指定的路径以编程方式加载php_openssl.dll。但是,所谓的依赖DLL的加载留给了Windows的默认机制。如果Windows发现依赖dll的不兼容版本,则会出现错误。

    我注意到关于 ssleay32.dll 尝试跑步时 php -i 从命令行。我只是假设它在环境中没有。我没有提到任何 ssleay32.dll文件 日志中有错误。

        3
  •  1
  •   cabs    7 年前

    只需在php.ini中取消对扩展名_dir的注释。

    enter image description here

        4
  •  0
  •   incognito    7 年前

    有相同的错误,但没有复制文件,而是将php文件夹添加到系统路径并重新声明了服务器。