为啥在我尝试过的每个 XAMPP 安装中 xdebug 都会使 apache 崩溃?

Posted

技术标签:

【中文标题】为啥在我尝试过的每个 XAMPP 安装中 xdebug 都会使 apache 崩溃?【英文标题】:Why does xdebug crash apache on every XAMPP install I've tried?为什么在我尝试过的每个 XAMPP 安装中 xdebug 都会使 apache 崩溃? 【发布时间】:2010-09-17 10:23:47 【问题描述】:

我在三台不同的计算机上安装了 Windows XAMPP 软件包,其中两台运行 Windows Vista 32 位(1 台 Ultimate / 1 台 Home Premium),1 台运行 Windows Vista 64 Home Premium。

php.ini 中启用 xdebug 并重新启动 apache 后,查看默认的 XAMPP localhost 索引会导致 apache 每次都以相同的方式崩溃,并报告 'php_xdebug.dll' 作为故障模块名称。

这是来自 Windows Crash Reporter 的完整报告:

Problem signature:
Problem Event Name: APPCRASH
Application Name:   apache.exe
Application Version:    2.2.9.0
Application Timestamp:  4853f994
Fault Module Name:  php_xdebug.dll
Fault Module Version:   2.0.3.0
Fault Module Timestamp: 47fcd9b9
Exception Code: c0000005
Exception Offset:   00008493
OS Version: 6.0.6001.2.1.0.768.3
Locale ID:  1033
Additional Information 1:   a34a
Additional Information 2:   c9c5f4fd744690d388ab9d5b3eb051a7
Additional Information 3:   cb2e
Additional Information 4:   650bb5690556a17e911375b94d3e16f0

我试过用谷歌搜索这个问题,但没有找到任何解决方案,只报告了类似的错误。

编辑:我为 php_xdebug.dll 启用了扩展行,到目前为止似乎已经停止了崩溃。

【问题讨论】:

Vista + 最新的 XAMPP + 最新的 xdebug.dll 工作正常! 【参考方案1】:

通过其他一些论坛,我发现了一个可能的提示——虽然 xampp 上的 apache 通常使用 apache/bin 目录中的 php.ini,但有些模块不使用。所以我玩弄了那个目录中的 php.ini (到目前为止,简单地将它移出对我有用的方式,如重命名/删除它)。至少可能想尝试一下。

【讨论】:

【参考方案2】:

我找到了解决这个问题的方法。你可以在这里找到它:http://wiki.mpsoftware.dk/index.php?title=Tutorial_on_how_to_configure_Xdebug_to_work_with_phpDesigner_2008

问题在于 XDebug 与 Zend 优化器不兼容,因此您需要注释 [Zend] 部分下的所有部分。

【讨论】:

这显然是一个移动的目标。最新的 xampp 似乎没有使用 Zend 优化器,但是这个问题对很多人来说仍然存在,包括我自己。【参考方案3】:

确保您拥有最新版本的 xdebug?我在使用旧版本的 xampp 时遇到了同样的问题,下载了 xdebug 的最新 .dll,更改了 php.ini 中的映射,并且成功了。

花了我几个小时才搞定..grr

【讨论】:

【参考方案4】:
    打开 xampp\apache\bin 文件夹中的 php.ini(不在 xampp\php 文件夹中)。 找到 extension=php_xdebug.dll 行。 取消注释。

【讨论】:

【参考方案5】:

通常只能有一个 PHP 引擎级扩展。我目前在我的机器上使用最新的 xampp lite 包,带有 xdebug 并且它很好。

使用 grep(Windows 的 gnu32 包)或其他文本过滤器,获取 PHP 文件中包含“扩展”一词的每一行的列表,并确保您确切知道哪些包正在用于您的 wamp堆栈。

接下来。 xdebug 作为引擎扩展效果更好,但正如一些人指出的那样,它也可以用作常规扩展。引擎和普通扩展之间的性能损失是分析几乎没有那么准确,编辑器 -> 服务器调试不可靠,并且除了显式 xdebug_break() 语句之外似乎无法正常工作。

要尝试的最后几件事是调用 php -i 并将其通过管道传输到文本文件。如果它在那里崩溃,那么是时候采取更严厉的措施了。在您的 Windows 机器上找到所有 php.ini 文件,并将它们一一重命名为 php.disabled.ini 或 disabled_php.ini 之类的名称,然后再次尝试 php -i 调用。很可能你有一个 php.ini 文件潜伏在一些奇怪的位置,比如 c:\ | c:\windows\ | c:\windows\system 或其他在路径中优先的地方,然后你期望它是 xammp\apache\bin

【讨论】:

【参考方案6】:

有一个 Windows 兼容性列表 available here。似乎 Vista 不支持 xdebug...

【讨论】:

【参考方案7】:

我也有这个问题。将您安装的 XAMPP 降级到以前的版本,该错误已修复。我不确定究竟是什么原因造成的,但这是目前已知的唯一解决方案。您可以获得第二个最新版本here。

【讨论】:

【参考方案8】:

Matty 的回答帮助我防止 Apache 崩溃,但我无法让远程调试会话正常工作。每当我尝试单步执行代码时,我的客户都会抱怨连接已关闭,所以我还没有调试。

但是,如果它对其他人有用,这里是我在 XAMPP 1.6.8 中对 apache\bin\php.ini 文件所做的编辑(在 1.7.0 中也是如此)。第 671 行:

extension=php_xdebug-2.0.4-5.2.8.dll

我添加了第 1297 行:

[XDebug]
;; Only Zend OR (!) XDebug
zend_extension_ts="\xampplite\php\ext\php_xdebug-2.0.4-5.2.8.dll"
xdebug.remote_enable=true
xdebug.remote_host=127.0.0.1
xdebug.remote_port=9000
xdebug.remote_handler=dbgp
xdebug.profiler_enable=1
xdebug.profiler_output_dir="\xampplite\tmp"
xdebug.trace_output_dir="\xampplite\tmp"

【讨论】:

你不能同时拥有 "extension=..." 和 "zend_extension_ts=..." 否则你在调试时不会得到断点,你也不知道为什么。删除 extension= 行,并将“zend_extension_ts”更改为“zend_extension”。【参考方案9】:

我得到了一个适用于 Vista 的解决方案,结合使用上述方法,所以如果这对这里的任何人有帮助...

Eclipse Europa - 版本:3.3.2 内部版本号:M20080221-1800

XAMPP - win32 版本 1.6.8 安装程序

xdebug - php_xdebug-2.0.2-5.2.5.dll

~/xampp/apache/bin/php.ini 的内容

[Zend]
;zend_extension_ts = "C:\xampp\php\zendOptimizer\lib\ZendExtensionManager.dll"
;zend_extension_manager.optimizer_ts = "C:\xampp\php\zendOptimizer\lib\Optimizer"
;zend_optimizer.enable_loader = 0
;zend_optimizer.optimization_level=15
;;zend_optimizer.license_path =
; Local Variables:
; tab-width: 4
; End:

[XDebug]
;; Only Zend OR (!) XDebug
zend_extension_ts="C:\xampp\php\ext\php_xdebug-2.0.2-5.2.5.dll"
xdebug.remote_enable=true
xdebug.remote_host=127.0.0.1
xdebug.remote_port=9000
xdebug.remote_handler=dbgp
xdebug.profiler_enable=1
xdebug.profiler_output_dir="C:\xampp\tmp"

对我来说绝对至关重要的一点......

;extension=php_xdebug-2.0.2-5.2.5.dll

没错!注释掉上面一行。

希望对你有帮助

【讨论】:

【参考方案10】:

感谢您的评论,我使用此版本的 php_xdebug-2.0.2-5.2.5.dll 解决了问题,在 Windows Vista Business 64bit 上为我工作...... php.ini 配置是相同的,只是为了使用这个xdebug dll版本.......谢谢

爱马仕

【讨论】:

这个版本对我有用,我现在没有崩溃,但现在我无法调试,因为我的eclipse正在启动并且没有调试,所以我得到了php_xdebug-2.0.3-5.2 .5.dll 版本并正常工作,但再次出现此崩溃窗口,然后我将使用此版本等待解决方案 对于 Xampp 用户在bugs.xdebug.org/view.php?id=410 上阅读此错误,有一个解决方案...希望对您有所帮助【参考方案11】:

根据这个Issue,我建议你在你的php.ini中禁用这两行:

;xdebug.profiler_enable=1
;xdebug.profiler_output_dir="(temp_dir)"

为我工作

【讨论】:

【参考方案12】:

我正在使用 Vista x86 SP1、XAMPP 1.6.8 和 php_xdebug-2.0.2-5.2.5.dll 插件。 最近我注意到,当我通过右键单击运行 xampp-control.exe => 以管理员身份运行时,所有崩溃都消失了:) 有时会发生但非常罕见,我可以在 Eclipse PDT 中使用调试器。 看看我的解决方案

【讨论】:

【参考方案13】:

我正在使用 xDebug 在我的 Win7 机器上运行适用于 Windows 1.7.1 版的 XAMPP,它运行良好。

检查你是否安装了SP1,然后关注these notes:

    找到包含implicit_flush的行,设置如下:

    implicit_flush = On

    找到名为[Zend] 的部分并通过在每行的开头放置一个分号(“;”)来注释掉所有行。

    找到以下行:zend_extension = "c:\xampp\php\ext\php_xdebug.dll" 并取消注释。

    找到[XDebug] 部分并取消注释所有行(第一行是实际注释除外)。对于 Windows,它应该类似于下面的示例:

    [XDebug]
    ;; Only Zend OR (!) XDebug
    zend_extension_ts="C:\xampp\php\ext\php_xdebug.dll"
    xdebug.remote_enable=true
    xdebug.remote_host=localhost
    xdebug.remote_port=10000
    xdebug.remote_handler=dbgp
    xdebug.profiler_enable=1
    xdebug.profiler_output_dir="C:\xampp\tmp"
    

【讨论】:

这个链接帮助我解决了我的 vista-xdebug 问题,几个月后每天重启几次 apache。 链接很有帮助,谢谢!请在您的答案中添加关键值。【参考方案14】:

在 Google 上搜索 XDebug 导致我的 WAMP Apache 崩溃的原因时遇到了这个问题。我刚刚使用当前版本的 WAMP(2.0) 升级到 Vista 64 笔记本电脑,这是我在 php.ini 中放入的内容,以使崩溃停止。

我使用 NetBeans 作为我的 IDE,调试工作正常。

首先,在您的活动 php.ini 中注释掉。

;extension=php_xdebug-2.0.4-5.2.8.dll

然后将其添加到您的活动 php.ini 的底部(相应地调整您的目录和 xdebug 文件名。)

[XDebug]
; Only Zend OR (!) XDebug
zend_extension_ts="C:/Program Files (x86)/wamp/bin/php/php5.2.9-2/ext/php_xdebug-2.0.4-5.2.8.dll"
xdebug.remote_enable=on
xdebug.remote_host=localhost
xdebug.remote_port=9000
xdebug.remote_handler=dbgp
xdebug.profiler_enable=0
xdebug.profiler_output_dir="C:/Program Files (x86)/wamp/tmp"

【讨论】:

【参考方案15】:

XDebug 在 Vista 上存在线程安全问题,我在使用 IIS7 和 PHP 作为 ISAPI 模块时遇到了同样的问题,如果加载了 xdebug.dll,服务器会随机崩溃,然后我找到了一篇描述 PHP+ 的文章XDebug(在 Vista 上)应该在单线程模式下运行。

我让它按照以下方式工作:

一个非线程安全的 PHP 版本,一个用于您的 PHP 版本的非线程安全 xdebug.dll,在 php.ini 中它应该被加载为 zend_extension="C:/FullPathToXdebugDll"(没有 "_ts"!) ,以 CGI(或更好的 FastCGI)模式运行 php。 (CGI/FastCGI 强制它是单线程的)。

这里是文章的链接: http://learn.iis.net/page.aspx/246/using-fastcgi-to-host-php-applications-on-iis-70/

现在我正在寻找一种可能性,用 Xampp 或 InstantRails(或类似的东西)在我的笔记本上运行它(Vista Home Premium 没有 IIS),但我不知道如何强制 apache在单线程模式下运行,有人知道怎么做吗?

【讨论】:

【参考方案16】:

Eugen 适合我。

去http://xdebug.org/download.php下载非线程安全的dll IE。 5.2 VC6非线程安全(32位)

将其保存到您的\xampp\php\ext 目录中

打开您的 php.iniC:\xampp\php\php.ini

滚动到底部找到[XDebug]并替换

zend_extension_ts="C:\xampp\php\ext\php_xdebug.dll"

有了这个

zend_extension="C:\xampp\php\ext\php_xdebug-2.0.5-5.2-nts.dll"

所以它看起来像这样:

[XDebug]
;; Only Zend OR (!) XDebug
zend_extension="C:\xampp\php\ext\php_xdebug-2.0.5-5.2-nts.dll"
xdebug.remote_enable=true
xdebug.remote_host=127.0.0.1
xdebug.remote_port=9000
xdebug.remote_handler=dbgp
xdebug.profiler_enable=1
xdebug.profiler_output_dir="C:\xampp\tmp"

【讨论】:

这在将 php 作为 CGI 二进制文件运行时非常有用,例如使用 Apache + Fast CGI 或 PHP-FPM。否则,在使用 Apache PHP 模块时,您将需要线程安全版本——这是 XAMPP 的默认版本。【参考方案17】:

这可能对某人有帮助。在使用 Eclipse 和 XDebug 调试 PHP 网页时,我遇到了可重复的 Apache 崩溃,并尝试了各种重新安装和 PHP.INI 更改,最终发现我的问题与在单独的文件中使用重复的变量名有关。一个文件包含另一个文件,并且两者都有(比如说)$foo。一旦我在第二个文件中将 $foo 重命名为 $newfoo 并重新启动 Apache,我就摆脱了崩溃。

另外,有点相关,我从来没有让 PHP.INI 文件像这里和其他地方广泛记录的那样工作。我必须从 zend-extension 中删除 _ts,如下所示,以获取 phpinfo() 文本:使用 Xdebug v2.0.5,版权所有 (c) 2002-2008,由 Derick Rethans 提供。

XAMPP 1.7.2(使用自带的php_xdebug.dll) PHP 5.3.0

这是我的 PHP.INI 文件 sn-p:

xdebug.remote_enable=1 xdebug.remote_host="127.0.0.1" xdebug.remote_port=9000 xdebug.remote_handler="dbgp" zend_extension="C:\xampp\php\ext\php_xdebug.dll"

【讨论】:

【参考方案18】:

我遇到了同样的问题。它已由最新版本的 xdebug (2.0.6) 解决。它仍处于开发模式,但对我来说它比以前的版本更稳定:)

它是 XAMPP 1.7.3beta 的一部分 http://www.apachefriends.org/en/xampp-beta.html

启用 xdebug 只需取消注释 xampp/php/php.ini 中的一行

HTH

【讨论】:

最新版本的 xampp 有旧版本的 xdebug。我去了 xdebug 站点并使用他们的安装工具获得了最新版本,它不再对我崩溃了。【参考方案19】:

安装新版本的 XAMPP

【讨论】:

【参考方案20】:

我在 Windows 7 Ultimate 6.1.7600 上使用 Xampp 1.7.3 (php 5.3.1) 让它工作。在作者对取消注释行的帖子编辑之后:zend_extension = C:\xampp\php\ext\php_xdebug.dll 在 xampp\php\php.ini 中,我设法让 apache http 服务器停止崩溃!

原来 Xampp 带有它自己的 xdebug 版本,我什至从一开始就不需要下载任何东西。您只需要取消注释上述行并在 php.ini 的 [xdebug] 部分中启用您想要的 xdebug 的其他功能。

我安装 Xampp 时附带的 xdebug 版本是 2.0.6-dev。希望这会有所帮助!

编辑:忘了提到我正在运行 Windows 7 的 x64 风格:P

【讨论】:

【参考方案21】:

解决方案http://community.activestate.com/forum-topic/apache-crashes#comment-9812 Obviousliy buggy apache 模块 - 将 php 作为 CGI 运行。

【讨论】:

【参考方案22】:

我的经验可能会有用: 我使用 XAMPP 1.7.4,当尝试使用 xdebug 2.1.0 从 eclipse 调试 php 页面时,apache 总是崩溃... 我用 xdebug 2.0.5 替换了 xdebug 2.1.0,现在一切正常

【讨论】:

这里也一样,php_xdebug-2.0.5-5.3-vc6.dll 为我解决了问题 糟糕!不,毕竟它对我没有用:它只是巧合。从http://localhost/joomla/hello.php 加载文件有效,而从http://localhost/php101/hello.php 加载相同文件时崩溃。 joomlaphp101 都是指向同一个目录的符号链接【参考方案23】:

我刚刚使用 zip 文件安装了 xampp 1.7.4。如果您使用 .exe 文件,除了 1.7.4 存在错误外,它可以很好地与软件包随附的 xdebug 文件配合使用。

我还使用Joomla tutorial 来设置调试。 现在一切似乎都运行良好。

【讨论】:

【参考方案24】:

我在互联网上寻找这个问题并尝试了许多解决方案,但都没有奏效。 我尝试了这个配置,只是最后一次测试并为我工作,在 Eclipse 中更改 Windows/Preferences/PHP/Debug 并选择 Xdebug 作为 PHP 调试器。

【讨论】:

以上是关于为啥在我尝试过的每个 XAMPP 安装中 xdebug 都会使 apache 崩溃?的主要内容,如果未能解决你的问题,请参考以下文章

xampp 1.7.4 + winxp + 日食

为啥我不能在我的 XAMPP 上为这个 PHP 网站设置虚拟主机?

为啥用户帐户设置会在我的计算机中干扰我网站的管理页面

为啥我的 cURL 请求在 XAMPP 中不起作用?

为啥 jQuery 不能在我的 Mac 上的 xampp 上运行?

为啥 xampp 服务器在我的本地服务器上生成错误?