PHPIniDir 在 windows 7 下坏了?
Posted
技术标签:
【中文标题】PHPIniDir 在 windows 7 下坏了?【英文标题】:PHPIniDir broken under windows 7? 【发布时间】:2010-12-27 02:55:35 【问题描述】:我有一台运行在 Windows XP 机器上的服务器,它使用 Apache2 和 php 和 mysql。我最近升级到 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 下坏了?的主要内容,如果未能解决你的问题,请参考以下文章