PHPIniDir 在 windows 7 下坏了?

Posted

技术标签:

【中文标题】PHPIniDir 在 windows 7 下坏了?【英文标题】:PHPIniDir broken under windows 7? 【发布时间】:2010-12-27 02:55:35 【问题描述】:

我有一台运行在 Windows XP 机器上的服务器,它使用 Apache2 和 phpmysql。我最近升级到 Windows 7,但无法让它正常工作。 Apache 工作正常,PHP 工作正常,但我似乎无法让它与 php.ini 文件一起工作。

当我将PHPIniDir 设置为包含php.ini 文件的目录时,Apache 服务不会启动。

当我将PHPIniDir 设置为没有php.ini 文件的目录时,Apache 服务确实启动了。

当我忽略PHPIniDir 时,Apache 服务不会启动。

有没有人找到解决这个问题的方法?谢谢!

编辑:

PHPIniDir "C:\Windows" #works(没有php.ini 文件)

PHPIniDir "C:\Program Files (x86)\php\" #不起作用(包含php.ini 文件)

我在任何给定时间最多启用一个。

【问题讨论】:

你能发布有效和无效的配置指令吗?您在 Apache 的日志中有任何错误吗? D:\Apache24\bin>httpd.exe -d D:/Apache24 AH00526: D:/Apache24/conf/httpd.conf 的第 517 行语法错误:可能是无效的命令 'PHPIniDir'拼写错误或由未包含在服务器配置中的模块定义 【参考方案1】:

删除最后一个斜杠:

PHPIniDir "C:\Program Files (x86)\php"

【讨论】:

再次被httpd.conf中的反斜杠咬住...,谢谢【参考方案2】:

我遇到了同样的问题。我修好了它。使用记事本或任何文本编辑器打开 php.ini 文件。禁用 php.ini 文件中的所有扩展。逐条评论扩展,找出导致问题的扩展。

【讨论】:

【参考方案3】:

有几个原因:

旧版本的 Apache 和/或 PHP。 Apache 2.2.13/2.2.14 似乎在 Windows 7 以及 PHP 5.2.11/5.3 中运行良好。 某些 PHP 扩展可能会导致 Apache 启动失败。您可以检查 Apache 的日志文件或在 php.ini 中启用“display_startup_errors”(启用后,您可以使用 ApacheMonitor.exe 启动或停止 Apache 服务,如果发生错误,它将显示一条消息)。您也可以禁用所有 PHP 扩展,如果它有助于开始一一启用它们,并查看是哪一个导致了问题。 恕我直言,请确保您已下载 PHP 存档并且未使用自动安装程序。根据我的经验,安装程序从来都不是很好。您始终可以将两个 PHP 相关指令(PHPIniDir 和 LoadModule)添加到 Apache 的配置文件中,并确保 PHP 目录包含在 Windows 的路径中。哦,还有可能是php2apache库导致的服务错误。 检查 Apache/PHP/MySQL 目录是否包含在 Windows 的路径中。这是一个很好的实用程序:Redmond Path。您可以将以下目录添加到路径中:Apache/bin 目录、PHP 目录、MySQL/bin 目录。这可能会有所帮助。

【讨论】:

我已尝试启用错误,但继续收到相同的错误 - “请求的操作失败!” 在 php.ini 的末尾有一段似乎是扩展名。它们看起来像这样: [PHP_BZ2] extension=php_bz2.dll [PHP_CURL] extension=php_curl.dll 当它们都被注释掉时,apache 启动正常。知道这是为什么吗? 经过更多测试,我似乎可以启用扩展,但有某种限制,我认为是总扩展大小? 好的,所以它是由一些 PHP 扩展引起的。你有没有弄清楚具体是哪一个?无需一次启用所有扩展。只需尝试逐一启用您需要的那些,这样您就知道哪个失败了。你能检查一下 php.ini 中“extension_dir”的值吗? 哦,您能指定您安装的 Apache 和 PHP 的版本吗?【参考方案4】:

我遇到了同样的问题,您必须在httpd.conf 中指定 PHP 模块的完整 URL。

我发现的所有指南都说:

PHPIniDir "C:/Program Files/PHP"
LoadModule php5_module "php5apache2_2.dll"

当你实际上需要时:

PHPIniDir "C:/Program Files/PHP"
LoadModule php5_module "C:/Program Files/PHP/php5apache2_2.dll"

【讨论】:

【参考方案5】:

我永远无法超越这条线:

LoadModule php5_module "C:/Program Files (x86)/PHP/php5apache2_2.dll"

所以最后我绝望地创建了一个新文件夹 C:/PHP,将该 dll 复制到 C:/PHP 并将行更改为

LoadModule php5_module "C:/PHP/php5apache2_2.dll"

第一次这一切都奏效了!也许它只是不喜欢路径中的空格。或者它不喜欢长路径名。我不知道。这个修复很可能是特定于 Apache 和 PHP 的特定版本,但是在这个问题上花费了大约 20 个小时后,我很迷茫,以至于我不知道这种依赖关系可能是什么。

【讨论】:

【参考方案6】:

我也遇到了这个问题,但是我可以通过禁用 php.ini 文件中的所有扩展来让 Apache 再次工作(我在 ext 文件夹中拥有所有 DLL,但它们在 php.ini 中被禁用) 由于我想使用所有的 php 扩展,我尝试一一禁用以查看哪些使 Apache 崩溃。我也确实在 C: 中安装了 PHP,以避免“空白/长路径”问题。 最后,这是我的 Apache 的 httpd.conf 文件在 PHP 部分的样子:

#BEGIN PHP INSTALLER EDITS - REMOVE ONLY ON UNINSTALL
PHPIniDir "C:\PHP"
LoadModule php5_module "C:\PHP\php5apache2_2.dll"
#END PHP INSTALLER EDITS - REMOVE ONLY ON UNINSTALL

另外,导致 apache 崩溃的扩展是:

php_oci8.dll php_pdo_oci.dll php_pdo_oci8.dll php_pdo_sqlite_external.dll php_pspell.dll php_sybase_ct.dll

不过,我真的不知道他们有什么问题。

请注意,我使用 msi 安装程序 (php-5.2.17-Win32-VC6-x86.msi) 安装了 PHP,并安装了所有扩展。我也在使用 Windows 7。

【讨论】:

【参考方案7】:

作为删除最后一个反斜杠的@ar2r 答案的替代方法,您可以使用(正向)斜杠编写路径,即使末尾有斜杠也可以使用。由于某种原因,在路径的末尾使用反斜杠在最新版本的 Windows 中不起作用:

# works, no slash or forward slash at the end
PHPIniDir "C:\Program Files\PHP7"
PHPIniDir "C:/Program Files/PHP7/"
PHPIniDir "C:\Program Files\PHP7/" # mixing slashes and backslashes

# doesn't works, backslash at the end
PHPIniDir "C:\Program Files\PHP7\"

请注意,只要尾部斜杠不是反斜杠,混合正斜杠和反斜杠就可以工作。

这也适用于其他指令,我在为目录索引的图标配置 Alias 时注意到了这种行为。

【讨论】:

以上是关于PHPIniDir 在 windows 7 下坏了?的主要内容,如果未能解决你的问题,请参考以下文章

解决Qualcomm Atheros AR8161 Gigabit Ethernet网卡Linux下坏掉的问题

centos出现磁盘坏掉,怎么修复和检测

我的 pip 在 Windows 上坏了,我该如何修复它?

编译错误:Windows API 标头....坏了?

windows故障转移群集仲裁盘坏了如何处理?

window设置的定时任务,有时候不执行,是电脑坏了?