使用 HTML 表单,如何使用正确的 GET/POST 数据开始调试操作 PHP 脚本? (使用 PhpStorm 和 XAMPP)

Posted

技术标签:

【中文标题】使用 HTML 表单,如何使用正确的 GET/POST 数据开始调试操作 PHP 脚本? (使用 PhpStorm 和 XAMPP)【英文标题】:With an HTML form, how can I start debugging the action PHP script with proper GET/POST data? (using PhpStorm and XAMPP) 【发布时间】:2021-08-26 23:25:56 【问题描述】:

我使用 phpStorm 2021.1.3 作为 IDE,XAMPP 作为 PHP7.4 引擎。我已经安装了 Xdebug 2.9.2,它可以正常工作,因为我可以在特定的 PHP 脚本上启动调试器。

我的问题是我在 PHP 网页中有一个 html 表单(我们称之为“mainpage.php”,它将其数据发送到另一个 PHP 文件(我们称之为“analyze.php”)。

问题是,如果我在另一个 PHP 文件(“analyze.php”)上启动调试器,它不会获取 GET/POST 数据,因为我根本没有使用该表单。有没有办法在启动调试器时传递 GET/POST 数据?

我查看了运行配置,但它们似乎只提到了 PHP 选项,而不是 GET/POST 数据。

我尝试使用 HTTP 请求,但据我所知,我看到的唯一示例使用的是实际的 Web 主机和生产环境。我目前只有这个 XAMPP 开发环境。我的 PHP 文件不在 XAMPP 的 www 文件夹中,因为到目前为止,PhpStorm 在需要时将文件复制到正确的位置似乎没有问题。

知道我应该去哪里找吗?

【问题讨论】:

1) PHP Request 类型的运行/调试配置允许使用 POST(执行和调试)。 2) 您可以使用 HTTP 客户端 和 debug it 编写您的有效负载 3) 或者您可以从 Postman 发送此类请求:***.com/a/19147935/783119(此时 PhpStorm 必须等待调试连接)跨度> 这可能是一个愚蠢的问题,但是为什么不在表单处理程序页面 analyze.php 上放置断点,然后提交表单呢?所有的 post/get 数据都会出现。 @waterloomatt :它被认为是两个独立的 PHP 脚本。 PhpStrom/Xdebug 看不到两个网页之间的链接,因此不考虑第二页 AFAIK 中的断点。 没关系。 PHPStorm 应该看到表单提交(post/get)并捕获它。您应该能够浏览您的应用程序(链接、表单等),PHPStorm 将捕获所有这些请求。如果这不起作用,那么您的设置可能有问题。您是否使用浏览器扩展来触发调试会话?其中一些扩展要求您告诉它期望哪个方法(get、post、both)以及哪个页面(此页面、下一页等)。前任。 chrome.google.com/webstore/detail/zdebug/… @leftcursor 那么为什么你使用 PhpStorm 的内置非常简单/有限的 web 服务器而不是来自你的 XAMPP 的完整的 Apache?使用正确的 Apache——它总是比任何内置的 Web 服务器更强大/更类似于实际部署的站点。据我了解,您只是不知道如何告诉 PhpStorm 使用自定义 URL 而不是内置 Web 服务器...jetbrains.com/help/phpstorm/… 【参考方案1】:

好的,感谢@waterloomatt,我设法找到了解决方法。就我而言,问题的症结在于这个 PhpStorm 错误:https://youtrack.jetbrains.com/issue/WI-54542 因此,一旦解决了这个错误,这个答案可能就无关紧要了。

这是 Linux 上的解决方案:

第 1 步:在 PhpStorm 上创建服务器。

在文件->设置->PHP->服务器中,点击“+”号添加一个新的服务器。填写服务器信息。 端口是 63342,这是 PhpStorm 用于运行代码的端口。请注意,我将此服务器命名为“localhost63342”。这个细节很重要。

第二步:正常启动XAMPP。

像往常一样启动 XAMPP。问题在于 PhpStorm,而不是 XAMPP。

第 3 步:在启动 PhpStorm 之前,添加一个环境变量

打开命令提示符,然后运行以下命令:

export PHP_IDE_CONFIG=serverName=localhost63342

注意服务器名称,和我们在 PhpStorm 中定义的服务器名称一致。

我可以使该环境变量更永久,但由于它是一个即将解决的 PhpStorm 错误,我认为可以这样做。

第 4 步:在同一命令提示符下,启动 PhpStorm

我们定义了一个环境变量,只要命令提示符保持打开状态就有效。然后我们可以使用这个命令提示符启动 PhpStorm。就我而言,使用以下命令:

./$HOME/phpstorm/PhpStorm-203.7148.74/bin/phpstorm.sh

第 5 步:启动调试会话

我的 Chrome 浏览器已经有了“Xdebug helper”扩展:https://chrome.google.com/webstore/detail/xdebug-helper/eadndfjplgieldjbigjakmdgkmoaaaoc?hl=en 该扩展已经配置为使用 PHPSTORM IDE 密钥,如下所示:

在 PhpStorm 中,我在代码中我想要的位置放置了一个断点。我单击按钮使 PhpStorm 监听 PHP 调试连接。然后我使用启动器按钮从我想要的页面启动代码(Chrome 在我的计算机上是 Alt+F2)。

代码运行正常,我可以从一个页面导航到另一个页面。当在特定页面上,代码遇到 PHP 断点时,代码会暂停,我可以使用 PhpStorm 的调试器逐行执行它。由于我填写了表单以访问此页面,因此我获得了 GET/POST 数据。

它不像我认为的 PHP HTTP 请求那样直接,但它可以工作。

【讨论】:

为什么不使用 XAMPP 中的 Apache 并避免使用 PhpStorm 的内置 Web 服务器(有问题)。但是,如果这对您有用并且您喜欢它……那么一切都很好。 @LazyOne :我不确定我是否理解。您的意思是使用命令行发送 HTTP 请求?如何做到这一点?以及如何链接到 PhpStorm 调试器(这样我就可以逐行执行代码)? 我的意思是:1)为什么使用 PhpStorm 的内置 Web 服务器而不是 XAMPP 的 Apache?合适的网络服务器总是更好。 2) 我在我的 cmets 中没有看到任何关于“命令行”的信息。您可以调试当前方式(打开一个表单页面,填写并提交它以调试处理表单数据的页面)--这里根本没有问题(您只需要重新输入表单每次数据)。它只是其他 3 个选项(HTTP 请求、HTTP 客户端和 Postman)也可用于调试,并允许更轻松地重复相同的请求(因为您将直接向调试目标发送请求,并且请求数据将已经输入/保存)

以上是关于使用 HTML 表单,如何使用正确的 GET/POST 数据开始调试操作 PHP 脚本? (使用 PhpStorm 和 XAMPP)的主要内容,如果未能解决你的问题,请参考以下文章

5.简述Servlet与表单如何交互?

如何使用HTML表单发送电子邮件并使用Node.js和Gulp提交?

如何在 PHP 中正确转义 HTML 表单输入默认值?

创建安全的 HTML/PHP 表单和发送电子邮件

如何使用正确的字段隐藏/显示我想要的表单

使用自定义输入表单时如何获得正确的表单状态?