【问题标题】:Xdebug PhpStorm: debugging scripts started with exec("php index.php")Xdebug PhpStorm:以 exec("php index.php") 开头的调试脚本
【发布时间】:2020-06-24 16:06:27
【问题描述】:

我正在尝试将调试添加到使用exec() 从另一个 PHP 脚本中异步启动新会话的旧项目:

exec("php /var/www/html/validata/index.php",$result) 

普通的 PHP 脚本可以使用 Xdebug 完全调试,但使用 exec 命令启动的脚本不是因为它无法从 file:///var/www/html/index.php 映射到本地文件位置,因为它是在 CLI shell 中启动的。以这种方式启动的会话会触发调试器,但在本地找不到文件:

Cannot find file '/var/www/html/validata/index.php' locally.
To fix it set server name by environment variable PHP_IDE_CONFIG and restart debug session.

我已按照说明将PHP_IDE_CONFIG 添加到环境中。我还将它添加到服务器中,将 127.0.0.1 替换为桌面 PC IP 地址(服务器在 docker 容器中运行):

export XDEBUG_CONFIG="remote_enable=1 remote_mode=req remote_port=9000 remote_host=127.0.0.1 remote_connect_back=0"

任何指针都非常感谢!

更新

解决方案:

使用设置为 docker 容器的 cli 解释器(在设置 > 语言和框架 > PHP > CLI 解释器中,添加新的,选择 docker 并将其指向 php 二进制文件),以便可以使用新的调试启动调试会话配置。我已将 exec 命令中的参数复制到新配置中,它现在可以完全调试脚本。我必须准备一个数据库表以使其完全可测试,但这对我来说是一个可行的解决方案。

感谢大家的回复!

【问题讨论】:

  • 1) 你在本地有那个文件吗? 2)如果你这样做 - 添加路径映射,以便 IDE 可以找到它(Settings/Preferences | Languages & Frameworks | PHP | Servers
  • 这不起作用,因为它无法将 file:///path 映射到我的本地仓库。

标签: php docker phpstorm xdebug


【解决方案1】:

我在PHP_IDE_CONFIG中如何引用服务器时出错了: 导出 PHP_IDE_CONFIG="serverName=SomeName" 应该在运行 php 的容器中运行,并且 SomeName 应该与 PHPStorm/IntelliJ 设置 > 语言和框架 > php > 服务器 > 名称(不是主机)中的内容完全匹配。它不是 fqdn,只是名称字段中的任何内容。

【讨论】:

    【解决方案2】:

    您可以通过在命令行中指定php.ini文件来解决加载错误的问题:

    exec("php -c " . escapeshellarg(php_ini_loaded_file()) .
        " /var/www/html/validata/index.php",$result);
    

    虽然我怀疑就 xdebug 而言这会产生很大的不同。

    我认为更好的解决方案是只 require 文件,这会导致 xdebug 在您 fork 新进程时不会丢失。

    require_once "/var/www/html/validata/index.php";
    

    【讨论】:

    • 它使用参数来引用一些不同的模块等,所以不幸的是,需求丢失了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-20
    • 1970-01-01
    • 2015-06-24
    • 2014-08-21
    • 2010-12-29
    • 2021-06-14
    相关资源
    最近更新 更多