当前位置: 首页 > 知识库问答 >
问题:

php - 如何在PHP项目中通过launch.json配置xdebug以使用不同的环境变量链接数据库?

穆锋
2024-07-29

php项目使用xdebug进行调试,配置了launch.json,configurations的env配置项中设置了环境变量,用于在不同的模式下,链接不同的数据库,但是这个配置并没有生效,请问这个应该怎么配置?
launch.json:

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "server and debug (aliyun)",
      "type": "php",
      "request": "launch",
      "runtimeArgs": [
        "-S",
        "localhost:8000",
        "-t",
        "."
      ],
      "port": 9003,
      "cwd": "${workspaceFolder}/public",
      // "preLaunchTask": "set-env-aliyun",
      "serverReadyAction": {
        "action": "openExternally"
      },
      "env": {
        "HOSTNAME": "xxx.xx.xx.19",
      }
    },
    {
      "name": "server and debug (huaweiyun)",
      "type": "php",
      "request": "launch",
      "runtimeArgs": [
        "-S",
        "localhost:8000",
        "-t",
        "."
      ],
      "port": 9003,
      "cwd": "${workspaceFolder}/public",
      // "preLaunchTask": "set-env-huaweiyun",
      "serverReadyAction": {
        "action": "openExternally"
      },
      "env": {
        "HOSTNAME": "xxx.xx.xx.84"
      }
    },
    {
      "name": "server and debug (loc)",
      "type": "php",
      "request": "launch",
      "runtimeArgs": [
        "-S",
        "localhost:8000",
        "-t",
        "."
      ],
      "port": 9003,
      "cwd": "${workspaceFolder}/public",
      // "preLaunchTask": "set-env-loc",
      "serverReadyAction": {
        "action": "openExternally"
      },
      "env": {
        "HOSTNAME": "127.0.0.1"
      }
    }
  ]
}

不知道怎么弄,并没有太多的尝试。

共有1个答案

羊舌洛华
2024-07-29

在你的launch.json配置中,你已经正确地为不同的调试配置设置了不同的环境变量HOSTNAME,这些配置应该能够在使用VS Code进行PHP调试时生效。但是,如果这些环境变量没有在你的应用程序中按预期工作,可能是因为几个原因:

  1. 环境变量加载时机:确保你的PHP脚本在读取数据库配置之前已经加载了这些环境变量。通常,这应该在脚本的初始化阶段完成。
  2. 环境变量读取方式:PHP中可以通过getenv('HOSTNAME')来读取环境变量。请检查你的代码,确保你是以这种方式读取HOSTNAME的。
  3. VS Code配置问题:虽然你的配置看起来是正确的,但有时候VS Code的插件或更新可能会引入问题。尝试重启VS Code或更新相关插件。
  4. 调试配置激活:确保你在VS Code中选择了正确的调试配置(比如"server and debug (aliyun)")并启动了调试会话。
  5. 数据库连接字符串:在你的PHP代码中,确保数据库连接字符串是根据HOSTNAME环境变量动态构建的。例如:

    $hostname = getenv('HOSTNAME') ?? 'default_hostname';
    $dsn = "mysql:host=$hostname;dbname=your_database;charset=utf8mb4";
    $options = [
        PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
        PDO::ATTR_EMULATE_PREPARES   => false,
    ];
    try {
        $pdo = new PDO($dsn, 'username', 'password', $options);
    } catch (\PDOException $e) {
        throw new \PDOException($e->getMessage(), (int)$e->getCode());
    }
  6. 检查其他配置:确保没有其他配置(如.env文件或Apache/Nginx配置)覆盖了HOSTNAME环境变量。
  7. 调试输出:在你的PHP脚本中添加日志输出,以确认HOSTNAME环境变量的值是否如你所期望的那样被读取。
  8. IDE日志:查看VS Code的调试控制台或输出窗口,看是否有任何与环境变量或调试会话相关的错误或警告信息。

如果以上步骤都不能解决问题,建议检查VS Code的官方文档或社区论坛,看看是否有其他用户遇到了类似的问题,并找到了解决方案。

 类似资料:
  • 问题内容: 在node.js项目上使用新的VSCode编辑器。我正在尝试通过编辑launch.json文件来配置“启动”配置文件以进行调试。我需要将连接字符串设置为环境变量。根据launch.json文件中的注释: 我试过像这样添加我的环境变量: 当我尝试启动我的应用程序时,这会导致错误;“ OpenDebug进程意外终止”。我尚未找到任何可以解释问题所在的日志文件等。 我知道当我设置环境变量并从

  • 我试图用VScode设置Xdebug,但是每当我设置断点时,它就会忽略它。 PHP-V 感谢您的阅读!

  • 问题内容: 我有一个Linux环境,并且有一个PHP Web应用程序,该程序有条件地基于PHP中使用的环境变量运行。我需要知道如何为应用程序正确设置这些环境变量。我不确定如何在Apache上进行设置。 另外,我需要能够为每个域分别配置单独的环境变量。 请提供有关如何实现此目标的建议。 问题答案: 大致情况:

  • 我有sbt多项目,并尝试在子项目的中设置如下: 测试将中止,并显示以下消息: 在测试文件中,我试图得到如下值: Intellj提供如下设置环境变量: 如何设置一个环境变量在为也? 更新 根如下所示: 我还是有例外。

  • 本文向大家介绍Tomcat环境变量如何配置,包括了Tomcat环境变量如何配置的使用技巧和注意事项,需要的朋友参考一下 本文以文字的形式为大家叙述Tomcat环境变量的配置过程,以及验证配置是否成功的方法,具体内容如下 JDK环境变量配置:  如果你的JDK安装在C盘里,如:C:\Program Files\Java\jdk1.6.0_05,那么就在系统变量里(当然也可以在用户变量里)点新建:  

  • 问题内容: 如何管理不同环境的配置变量/常量? 这可能是一个示例: 我的其余API可以访问,但是在Git版本控制下使用相同代码工作的朋友在Tomcat上部署了该API 。 假设我们有这样的东西: 如何根据环境动态注入API端点的正确值? 在PHP中,我通常使用文件来执行此类操作,将基本​​配置文件(config.xml)与用户名称识别的本地环境配置文件合并。但是我不知道如何在JavaScript中

  • 问题内容: 我正在尝试设置脚本以增加Xcode项目的内部版本号。我进行了一次API调用以获取当前的内部版本号,然后我希望对其进行递增,然后将该新的版本号用作环境变量,以便Xcode插件可以使用它。 我安装了EnvInject插件,但是我不知道如何将var从我的shell脚本中获取到环境变量中。 这设置为我需要的值,但是如何将其分配给环境变量,以便以后在工作中访问它? 问题答案: 添加一个构建步骤以

  • 我是Spring Boot新手,正在尝试使用环境变量配置与MongoDB的连接,也就是说,我遵循了一个在线示例,演示了如何通过应用程序配置我的mongo数据库/主机/端口。属性,但我希望我的配置来自环境变量-实现这一点的最佳方法是什么?谢谢