用vscode调试远程服务器的php

2023-11-02

一开始用phpstorm+chrome的xdebug helper连接远程的腾讯云服务器进行xdebug调试,一直不成功,卡在:
phpstorm Waiting for incoming connection with ide key xxxxx
想了半天可能是腾讯云安全组没加规则,然后加上还是不行。
查了很多文章,弄了两三天,还是弄不好。(顺便说下好多文章是重复的,不知道连博客都要抄的意义)
最后换了vscode的remote ssh+php debug解决了。 谢天谢地
反正目标是调试成功,管他什么ide。其实有点反感phpstorm,太臃肿。vscode配置的时间没用多少,其他方案不行可以参考一下……

0.安装vscode

vscode也可以编其他语言。没有装的可以装一下。大部分人应该都装过,这里步骤略去

1.安装remote ssh插件

可以参考这篇教程,比我的详细
https://www.cnblogs.com/liyufeia/p/11405779.html
在这里插入图片描述

2.连接服务器

可以点击左下角的绿色按钮,或者ctrl+shift+p打开命令框输入remote ssh应该也有。
第一次用要新建一个配置文件,我这里不好复现配置过程,参考上面的教程吧。
在这里插入图片描述
(2020/10/3更新)每次都要输一遍密码比较烦,建议改用密钥,具体过程上面那个教程里也有,不过我没搞成功。后面查了ssh配置文件的文档,只要加IdentityFile配置就行了,比如说我windows密钥放在C:\Users\HP.ssh\tencent(HP是我的用户名,tencent是我的密钥文件名,一般是id_rsa)

IdentityFile C:\Users\HP\.ssh\tencent

3.在服务器端vscode安装php debug插件

在这里插入图片描述
注意是连上了服务器以后,在服务器端的vscode上安装调试的插件,安装的时候文字是install in xxx(服务器在配置中的名字)。

4.安装xdebug

xdebug是用来调试php的软件,原本和vscode没什么关系,但是你要调试php就一定要装他,安装过程网上一大把,我这里也推荐几篇,注意xdebug要和php版本兼容,记得改wget的文件名,安装完在自己的php.ini中配置一下,这两篇里有,不过是远程调试的,我们用vscode其实是本地调试,下面会讲配置
xdebug版本兼容参考https://xdebug.org/docs/compat#versions
xdebug安装教程1https://blog.csdn.net/song634/article/details/80170838
xdebug安装教程2https://www.cnblogs.com/wicub/p/6226996.html

如果不知道php.ini在哪可以输这个命令

php -i |grep php.ini
原理是用grep从php -i中输出有"php.ini"的一段

在这里插入图片描述
我的配置是这个,看[xdebug]里的。zend_extension扩展路径,是xdebug安装完以后输出的路径,可以翻一下控制台输出复制过来,按教程来一般是一样的。然后增加remote_port,改了下端口,不弄也行。有很多是之前配置phpstorm时弄的,已经注释掉了(前面有分号、颜色是蓝色)
在这里插入图片描述
重启httpd(或者其他http服务器),只是单纯php的话不用管

service httpd restart
也可以验证一下xdebug开启没有
php -i |grep xdebug
如果看到一大堆xdebug配置就是表明xdebug已经加入到php中了

5.vscode配置

具体参考vscode上php debug的说明文档,我这里简单说一下
随便打开一个php文件点三角形按钮调试,一开始应该是没有调试php的配置的,他会弹出命令框,然后新建一个launch.json,里面会自动创建php的两条配置
在这里插入图片描述
我的配置是这样的
上面一个“Listen for XDebug”是用在php被动启动的情况,比如html里form提交到php,因为直接调试没有http request,所以要监听,记得打断点。第二个就是直接调试当前的php。注意port端口号,和php.ini的port要一样,如果之前没设,那这里一般是9000。
在这里插入图片描述
考虑到不小心删了什么的,我这里就文本也放一段

{
    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Listen for XDebug",
            "type": "php",
            "request": "launch",
            "port": 13795
        },
        {
            "name": "Launch currently open script",
            "type": "php",
            "request": "launch",
            "program": "${file}",
            "cwd": "${fileDirname}",
            "port": 13795
        }
    ]
}

配置完了以后再按按钮开始调试,就可以停在断点了

总结

利用vscode的插件把远程连接调试php转化为本地调试php,通讯从php xdebug通讯变成vscode通讯,不能说流程简单了一点,但是也是可行的。

vscode在其他语言也用的到,remote ssh也可以用在其他和服务器有关的开发中,所以其实只是添加了一个php debug插件。

配置环境实在是太难了,各种奇怪问题都找不到办法……

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用vscode调试远程服务器的php 的相关文章

  • Twitter URL 编码

    我们即将发起一场小小的推特圣诞竞赛 但我遇到了一些小障碍 要进入 人们需要按以下格式发布推文 user blah blah blah hashtag 目前 我有一个表单 他们可以在其中输入答案 废话 废话 废话 和一个 PHP 脚本 该脚本
  • PHP:如何使用 nl2br() 和 HTML Purifier 保持换行?

    Issue 使用时HTML 净化器 http htmlpurifier org 为了处理用户输入的内容 换行符不会被转换为 br tags 考虑以下用户输入的内容 Lorem ipsum dolor sit amet This is ano
  • 在 PHP 上发送不带 SMTP 标头的 SMS

    我正在尝试使用以下对我有用的代码通过 PHP 发送短信验证码 但我越来越 email protected cdn cgi l email protecti
  • APC 将数据存储在哪里?

    我想用apc store 缓存一些结果 但我需要知道数据将存储在哪里 以及限制是什么 它总是存储在内存中吗 或者也写入磁盘 我希望将不经常访问的数据存储在磁盘上 我应该为此使用不同的缓存系统吗 这就是极限了吗 apc shm size 32
  • PHP Session Id 在页面之间发生变化

    我有一个问题 我在 2 个页面之间丢失了 PHP 会话 session start 包含在一个名为 session inc php 的文件中 该文件包含在每个需要设置会话的页面中 这适用于网站上除一个特定页面 member profile
  • 如何使用 WhatsAPI 官方在 PHP 中从 WhatsApp 发送消息?

    我正在尝试使用 WhatsApi 官方库通过 WhatsApp 从 php 文件发送消息 我已经将库移到了我的 Apache Web 服务器中的一个文件夹中 调用测试 如下所示 文件whatsapp php 是这样的
  • 更短的 POST 验证方式?

    我总是进行 POST 的检查验证 有时它会变得太混乱和冗长 保持简短和整洁的最佳方法是什么 Example if isset POST albumName trim POST albumName isset POST slugName PO
  • 将 UTC 日期转换为 PHP 本地时间

    我使用以下方法将 UTC 日期存储到数据库中 utc gmdate M d Y h i s A 然后我想将保存的 UTC 日期转换为客户端的本地时间 我怎样才能做到这一点 Thanks 如果客户端指的是浏览器 那么您首先需要从浏览器将时区名
  • 更改数组键而不更改顺序

    You can 更改 数组元素的键 https stackoverflow com questions 240660 in php how do you change the key of an array element只需设置新密钥并删
  • wp_enqueue_script 用于小部件表单

    我正在创建一个小部件 我需要在管理面板 和定制器 中将小部件表单的脚本排入队列 我尝试了很多方法 function cf enqueue admin script wp enqueue script admin custom script
  • 如何在 laravel eloquent 中保存布尔值

    我在 Laravel 中进行了以下迁移
  • 用于 Eclipse PDT 的 Zend 框架插件

    我安装了 eclipse PDT IDE 版本 1 2 0 我将它与 Dojo 一起使用来开发非常有趣的 Ajax 应用程序 现在我想在我的 eclipse IDE 中启用 Zend 框架 我怎样才能做到这一点 经过一番谷歌搜索后 我尝试了
  • 使用 HybridAuth 登录 Facebook 显示错误 您无法直接访问此页面

    我正在尝试为我的网站编写一个插件 以使用 HybridAuth 与 facebook 连接 类 我刚刚尝试了以下代码 function authenticatewith provider ini set display errors on
  • 为什么 file_get_contents() 返回错误“文件名不能为空”?

    我几乎是 PHP 的新手 我的背景是 C C 和 C 我正在尝试面向对象化一些简单的 PHP 代码 但我做错了 班级代码 class ConnectionString public String public HostName public
  • Woocommerce:添加第二个电子邮件地址不起作用,除非收件人是管理员

    我尝试了多种方法来向 Woocommerce 电子邮件添加其他收件人 但它似乎仅适用于主要收件人是管理员的测试订单 这些是我尝试过的片段 如果订单的客户是管理员 则电子邮件将发送到这两个地址 如果订单包含客户电子邮件地址 则仅发送至该电子邮
  • 提交后如何重置表单?

    我有一个简单的表格 假设它需要一个电子邮件地址 提交表单后 消息堆栈会通知用户其地址已成功提交 问题是 提交地址后 带有电子邮件的表单字段仍然包含用户输入的电子邮件地址 我该如何重置该字段 我必须为此使用 JavaScript 吗 谢谢 w
  • 使用 CodeIgniter 中的模板自定义错误页面

    我正在使用 CodeIgniter 的模板库 http williamsconcepts com ci codeigniter libraries template reference html http williamsconcepts
  • 如何准备更新查询语句? [复制]

    这个问题在这里已经有答案了 我有一个 mysqli 查询 代码如下 db usag gt query UPDATE Applicant SET phone number phone number street name street nam
  • 在 PHP 中,如何检测由于超出 max_input_vars 而导致输入变量被截断?

    我知道一个E WARNING由 PHP 生成 PHP 警告 未知 输入变量超过 1000 https stackoverflow com q 9673895 367456 但我如何在我的脚本中检测到这一点 一个 足够接近 的方法是检查if
  • Paypal Rest API - 来自批准 URL 的令牌生命周期

    我使用 Paypal Rest API 我的问题是 有多长token来自批准 URL 有效吗 我想将此令牌 也包含我的令牌 存储到数据库并生成带有我的令牌的链接 稍后 如果我单击此链接 将我的令牌替换为 paypal 令牌 我想重定向到 p

随机推荐