我在安装时遇到困难Apache 2.4.7和PHP 5.5.7在 Windows Vista Service Pack 2 上。
当我尝试启动 Apache 时,出现错误:
C:/Program Files/Apache/conf/httpd.conf 第 176 行语法错误:无法将 C:/Program Files/PHP/php5apache2_4.dll 加载到服务器:访问被拒绝。
我查看了相关主题,包括这里和其他网站,但我能找到的唯一问题是错误“找不到指定的过程”或“找不到指定的模块”,这两个都与我的问题无关。
从下载链接中可以看出,我使用的是 Apache 和 PHP 的 Win32 版本以及线程安全版本的 PHP。我已确保 C:/Program Files/PHP/php5apache2_4.dll 文件存在,并重新安装了 Visual C++ Redistributable (http://www.microsoft.com/en-gb/download/details.aspx?id=30679;VSU_4\vcredist_x86.exe)。我还尝试将 Apache 和 PHP 文件夹移出 Program Files 文件,但这并不能解决问题。
由于我收到的错误是“访问被拒绝”,我猜想问题出在文件权限上,但我不确定要更改哪些权限以及要将它们更改为什么。因此,如果能得到任何帮助,我将不胜感激。
编辑
经过一些测试,似乎该问题仅出现在 PHP 5.5.4 及以上版本中。回滚到 5.5.3 可解决该问题。
编辑2
问题似乎是,php5ts.dll
虽然显示有可读权限,但无法读取。即使程序以“管理员身份运行”,也无法打开该文件(但可以删除和重命名)。如果将扩展名更改为 或 以外的其他扩展名,则可以打开该文件,dll
即使exe
将同一文件夹中的其他文件重命名为php5ts.dll
(替换原始文件),也可以打开该文件。
答案1
事实与观察
我们来分析一下事实:
.dll
它可以与除典型可执行文件/代码扩展名(如、.exe
等)之外的扩展名一起使用。- 它不适用于不同的文件名
- 之前的版本运行良好;只有最新版本出现了问题
- 在安全模式下运行良好
- 安全模式禁用所有不必要的驱动程序和服务
- 没有锁或敞开的把手
- 它说
access denied
- 它不能被移动,打开,复制等。
分析
第 1-3 点表明内容的文件触发了问题。这听起来很像某种防病毒程序发出的误报。
第 4 至第 6 点指出了导致问题的某种服务或驱动程序。
技术的
安全软件(例如防病毒程序)通常必须在低级别运行,以避免恶意软件潜入,因此它们使用驱动程序并在进程下运行System
。这阻止了大多数程序能够检测到文件是否被安全程序锁定(这就是 Unlocker 找不到任何打开的句柄的原因),即使它们可以,也只会显示已System
打开,这没什么帮助。
申请及说明
您说您曾经安装过 AVG,但后来卸载了它。显然 AVG 没有完全卸载(忘记重启?),所以它的驱动程序被遗留了下来。
所以现在,每当您访问文件时,驱动程序都会将其锁定以进行扫描,但由于程序的其余部分已消失,因此如果它认为该文件可疑,它就无法提示您。如果程序仍安装,它会显示提示并询问您要做什么(或者现在更有可能的是,自动隔离/删除文件以“保护”您)。由于程序已消失,驱动程序组件会在那里等待,同时保持文件锁定。
由于您不久前已经卸载了 AVG,它可能没有最新的定义(如果有的话?),所以它无法将最新版本保留在php5ts.dll
原处,并会抛出误报,从而锁定文件而无法告诉它将其停止。
平均
我不知道 AVG 是否曾经抱怨过这个特定版本php5ts.dll
,但它没有现在。
另外,我不知道 AVG 是否以大量误报而闻名,尽管我确信我读过关于一些AV 供应商;但粗略检查似乎表明寻找false positive
有至少33%更多的AVG 的点击量高于其他 AV 供应商。
对未来的建议
出现此问题的原因是 AVG 未完全卸载并留下了残留。不幸的是,这是一个非常常见的问题。将来,在卸载任何软件(无论是防病毒程序、打印机驱动程序/软件等)时,请务必检查供应商是否提供了某种删除/清理工具/实用程序(尝试不同的单词组合以确保找到它)。
大多数安全软件和打印机供应商以及其他一些软件公司和硬件制造商都会有一个(通常很小的)程序,您可以下载并运行该程序来清除其软件的所有痕迹。不幸的是,这通常不内置在卸载程序中,必须从其网站手动下载。有时它会在其网站的正常部分,有时会隐藏在其支持论坛的某个地方。(这些通常是从发现卸载程序遗留的文件、注册表项、服务等的人的错误报告中汇编而成的,这就是它们分开的原因。)
就你的情况而言,你可以(并且仍然应该)使用AVG“清除器”。
注意::在搜索安全软件的清理实用程序时,请注意不要将其与病毒-拆卸工具。
答案2
通常,这些类型的错误意味着您缺少所使用的依赖项php5apache2_4.dll
,可能是在 PHP 5.5.4 中引入的。
要验证缺少哪一个,请使用依赖性遍历器,以红色显示缺失的 DLL。标记为“延迟加载”的缺失 DLL 通常不是问题。
确保不存在 32 位/64 位不匹配的情况。由于所有内容都在 中C:/Program Files
,因此我假设所有软件都是 64 位的。在这种情况下,也使用 64 位版本的 Dependency Walker。