【问题标题】:Changed PHP Version from 7.0.7 to 7.2.2 and back to 7.0 7 Now PHP is no longer working将 PHP 版本从 7.0.7 更改为 7.2.2 并返回到 7.0 7 现在 PHP 不再工作
【发布时间】:2018-07-12 11:04:30
【问题描述】:

我正在测试一个应用程序,看看它是否可以在 7.0.7 和 7.2.2 中运行。该应用程序适用于两者;这不是问题所在。

在看到该应用在 7.2.2 中运行后,我将 Windows Apache httpd.conf 文件更改为:

LoadModule php7_module "C:/php_7_0_7/php7apache2_4.dll"
PHPIniDir "C:/php_7_0_7/"

来自:

LoadModule php7_module "C:/php_7_2_2/php7apache2_4.dll"
PHPIniDir "C:/php_7_2_2/"

更改路径后,我重新启动了 Apache。

转到 URL localhost,网页会正确显示。

去 localhost/phpinfo.php 没有出现。错误消息是“无法访问该站点”。文件 phpinfo.php 就是 <?php phpinfo(); ?>

Apache 错误文件有以下内容:

[2018 年 2 月 1 日星期四 16:03:48.820715] [core:warn] [pid 7628:tid 780] AH00098:pid 文件 C:/Apache24/logs/httpd.pid 被覆盖 - 以前的 Apache 运行不正常关闭?

PHP 警告:PHP 启动:curl:无法初始化模块\n使用模块 API=20151012 编译的模块\n使用模块 API=20170718 编译的 PHP\n这些选项需要在第 0 行的未知中匹配\n

PHP 警告:PHP 启动:无法加载动态库 'php_fileinfo.dll'(已尝试:C:\php_7_0_7\ext\php_fileinfo.dll(找不到指定的过程。\r\n),C:\ php_7_0_7\ext\php_php_fileinfo.dll.dll (The specified module could not be found.\r\n)) in Unknown on line 0

PHP 警告:PHP 启动:无法加载动态库 'php_gd2.dll'(已尝试:C:\php_7_0_7\ext\php_gd2.dll(找不到指定的程序。\r\n),C:\ php_7_0_7\ext\php_php_gd2.dll.dll (The specified module could not be found.\r\n)) in Unknown on line 0

PHP 警告:PHP 启动:无法加载动态库 'php_intl.dll'(已尝试:C:\php_7_0_7\ext\php_intl.dll(找不到指定的模块。\r\n),C:\ php_7_0_7\ext\php_php_intl.dll.dll (The specified module could not be found.\r\n)) 在 Unknown on line 0

PHP 警告:PHP 启动:无法加载动态库 'php_imap.dll'(已尝试:C:\php_7_0_7\ext\php_imap.dll(找不到指定的程序。\r\n),C:\ php_7_0_7\ext\php_php_imap.dll.dll (The specified module could not be found.\r\n)) 在 Unknown on line 0

PHP 警告:PHP 启动:ldap:无法初始化模块\n使用模块 API=20151012 编译的模块\n使用模块 API=20170718 编译的 PHP\n这些选项需要在第 0 行的未知中匹配\n

PHP 警告:PHP 启动:无法加载动态库 'php_mbstring.dll'(已尝试:C:\php_7_0_7\ext\php_mbstring.dll(找不到指定的程序。\r\n),C:\ php_7_0_7\ext\php_php_mbstring.dll.dll (The specified module could not be found.\r\n)) 在 Unknown on line 0

PHP 警告:PHP 启动:无法加载动态库 'php_exif.dll'(已尝试:C:\php_7_0_7\ext\php_exif.dll(找不到指定的程序。\r\n),C:\ php_7_0_7\ext\php_php_exif.dll.dll (The specified module could not be found.\r\n)) 在 Unknown on line 0

PHP 警告:PHP 启动:无法加载动态库 'php_mysqli.dll'(已尝试:C:\php_7_0_7\ext\php_mysqli.dll(找不到指定的过程。\r\n),C:\ php_7_0_7\ext\php_php_mysqli.dll.dll (The specified module could not be found.\r\n)) 在 Unknown on line 0

PHP 警告:PHP 启动:无法加载动态库 'php_openssl.dll'(已尝试:C:\php_7_0_7\ext\php_openssl.dll(找不到指定的程序。\r\n),C:\ php_7_0_7\ext\php_php_openssl.dll.dll (The specified module could not be found.\r\n)) 在 Unknown on line 0

PHP 警告:PHP 启动:无法加载动态库 'php_pdo_mysql.dll'(已尝试:C:\php_7_0_7\ext\php_pdo_mysql.dll(找不到指定的程序。\r\n),C:\ php_7_0_7\ext\php_php_pdo_mysql.dll.dll (The specified module could not be found.\r\n)) in Unknown on line 0

PHP 警告:PHP 启动:pdo_sqlite: 无法初始化模块\n使用模块 API=20151012 编译的模块\n使用模块 API=20170718 编译的 PHP\n这些选项需要在第 0 行的未知中匹配\n

PHP 警告:PHP 启动:xsl:无法初始化模块\n使用模块 API=20151012 编译的模块\n使用模块 API=20170718 编译的 PHP\n这些选项需要在第 0 行的未知中匹配\n

不推荐使用 PHP:在第 0 行的 Unknown 中不推荐使用指令“track_errors”

当我使用命令行并运行 php -i "print phpinfo();" -> delete.txt 运行一切正常。 windows环境变量路径包括“C:\php_7_0_7”

这是我认为表明扩展存在问题的行:

extension_dir => C:\php_7_0_7\ext => C:\php_7_0_7\ext

这是正确的扩展路径。

PHP 错误报告设置为 E_ALL(这是一台开发机器)

display_errors = 开启 display_startup_errors = 开启

当一个文件只是 phpinfo();无法访问该站点。运行使用 mysqli 扩展名连接到数据库的文件出现此错误“致命错误:未捕获的错误:调用 C:\www\mysqli.php:8 中未定义的函数 mysqli_connect() 堆栈跟踪:#0 {main } 在第 8 行的 C:\www\mysqli.php 中抛出“

当 phpinfo 从命令行运行并保存到文件时,它包含以下行:

mysqli

MysqlI Support => enabled

这让我认为命令行中的 php 正在工作,并且我缺少 Apache 和 PHP 之间的一些配置或通信。

IIS 服务已关闭。

编辑1:使用命令行启动的内置服务器 php -S localhost:8000 一切正常!但是,我想使用 Apache,因为这是主要商店运行的。加上本地主机末尾的端口 :8000 会破坏该站点。

编辑 2:当 httpd.exe 作为服务停止并通过双击它启动时,一切都会正常运行。也许这意味着服务和目录之间存在权限冲突。

更新:有效。不起作用。

PHP 启动时是否会创建错误日志?

我该如何解决这个问题?我在我的第二个小时,我正在寻求建议。

感谢所有建议。

【问题讨论】:

  • 把扩展放到php相关目录中
  • 所有的扩展都在相对的php目录中。 PHP 7.0.7 在安装 PHP 7.2.2 之前运行良好。唯一复制到 PHP 7.2.2 的是 php.ini 文件,该文件已相应修改。

标签: php windows apache configuration


【解决方案1】:

hi5,今天遇到了同样的问题。似乎较低的 Apache 版本(我有 2.4.18)确实可以正确加载 curl 和 openssl 扩展。新的 php.ini 扩展格式也存在问题(注意没有“php_”和“.dll”),白色自述文件状态仍然支持旧格式)。 是什么通过两个非破坏性步骤解决了我的问题:

  1. 使用this 将 WAMP 3.0.2 更新到 3.1.1
  2. 使用this 将 Apache 更新到 2.4.29

重启后不要忘记在 WAMP 菜单中切换 Apache 版本,并在 php.ini 中使用新的扩展格式

【讨论】:

    【解决方案2】:

    在升级我的 php、apache 和 mysql 堆栈后,我遇到了一个非常相似的问题。具体来说,一切似乎都正常,但没有一个模块可用,我确信扩展路径是正确的。在检查错误日志时,我注意到与您类似的条目,其文件名类似于 php_php_{module_name}.dll.dll

    在此过程中,我复制了一个旧的 php.ini 文件,其中列出了模块名称,如下所示: extension=php_gd2.dll ;extension=php_gettext.dll

    但是当与php.ini-developmentphp.ini-production 文件比较时,所有模块的列表如下: extension=gd2 ;extension=gettext

    以防万一我错过了其他更改,我最终只是复制了正确的示例文件 php.ini-development|php.ini-production 并对其进行了编辑以再次适合我的环境,但您可能只需删除 php_ 和 @987654328 就可以逃脱@来自每个扩展列表的段。

    希望这对其他人有所帮助。

    【讨论】:

      最近更新 更多