1

我使用的是 Netbeans 7.3.1,通常我可以使用 Xdebug 成功调试 PHP 文件。但是,只有当我的站点项目的结构是该站点立即从 PHP 代码生成时。

现在我有一个主要由 HTML 文件组成的网站。HTML 静态的,不是由 PHP 生成的。项目中唯一的 PHP 文件名为phphandler.php. 我需要调试该 PHP 文件,但它仅响应 HTML 文件中的 Javascript/jQuery 调用而运行,如下所示:

$.post(siteURL + 'jsonhandler.php', {
                JSON: JSON.stringify(data)
            }, processResult, "json");

在 PHP 端,它处理来自的 JSON 请求$_POST

$Array = json_decode(stripslashes($_POST['JSON']), true);

当我从 JSON 中运行调试器时,它会打开 Chrome 并加载我的网站,从 开始index.html,但调试器永远不会打开jsonhandler.php。我可以浏览所有链接并浏览我的网站,它会从中获取它需要的所有 JSON 数据jsonhandler.php,但调试器仍然不参与其中。

jsonhandler.php当Javascript通过 向它发送请求时,我可以调试$_POST吗?如果可以,如何调试?


更新:我发现我可以jsonhandler.php使用该Debug File函数进行调试,但这有严重的缺点,即我无法创建jsonhandler.php接收站点其余部分构建的 JSON 数据的情况。我可以手动强制输入一些手工制作的测试 JSON 数据,但这严重抑制了我发现系统作为一个整体在做什么的能力。

无论如何,对我来说,这是调试环境配置正确的另一个指标,这只是调试器是否以及如何监听正确事件的问题。

4

3 回答 3

0

我最近在这里回答了一个类似的问题:https ://stackoverflow.com/a/19636910/212076

基本上,您需要在 JSON 中添加一个查询参数来触发调试器:

XDEBUG_SESSION_START=netbeans-xdebug

如果数据是直接从 HTML 表单获取的,则包含一个隐藏字段,如下所示:

<input type="hidden" name="XDEBUG_SESSION_START" value="netbeans-xdebug" />
于 2013-10-30T23:17:29.340 回答
0

我通常做的是设置断点。尝试在 jsonhanler.php 文件中为接收请求(或您要调试的)的 PHP 代码设置断点,它们在调试模式下运行,浏览您的站点并发送请求,调试器应该打开 Netbeans 并带您到离开断点的那一行。从那里您现在可以逐行访问或跳转到函数。

于 2013-09-19T07:04:12.937 回答
0

您可以尝试通过 print_r($Array) 打印在 php 文件中接收到的 $Array,然后是 exit(),这可能会停止 php 文件中的进程并向您显示 php 文件中的结果。这可能使您可以查看将 php 文件加载到 $Array 中时所获得的内容。或者,如果它是一个 ajax 请求,您可以通过 console.log(response) 在控制台中打印响应。我希望它有所帮助。

于 2013-09-19T07:05:53.840 回答