PhpStorm 调试、文档根和包含 ($_SERVER['DOCUMENT_ROOT'] 未解释)
PhpStorm debugging, document roots and includes ($_SERVER['DOCUMENT_ROOT'] not interpreted)
编辑:我稍后会正确编辑这个问题,但这不是 Apache 问题,而是 PhpStorm 中的 IDE 问题。我已经对所有问题进行了排序并在下面进行了回答。
几个月来,我一直在尝试在各种机器上解决问题。我认为我已经通过魔法从我的 Apache 设置中清除了 gremlins(如果你想要更多详细信息,请点击这里 )。
现在似乎一切正常。我有各种虚拟主机,包括 sane30
和 sane30.dev
,它们在网络浏览器中的行为符合预期。
如果我在 sane30.dev/index.php
或 sane30/index.php
中执行 echo $_SERVER['DOCUMENT_ROOT'];
,我会得到 C:/xampp/htdocs/sane30/
。如果我用 localhost/sane30/index.php
做同样的测试,我会得到 C:/xampp/htdocs/
- 页面运行但是没有找到任何 include
或图像或任何东西。我猜一切都如预期的那样。
我目前真正的问题是在 PhpStorm 中调试。
A) 我真的很难理解如何在 PhpStorm 中进行调试 - 我 100% 相信它会非常有用,但我发现它很难理解而且
B) 让 PhpStorm 始终如一地找到正确的文档根目录让我做了一场噩梦。每次我点击调试时,它都会以 http://localhost/sane30/beta30/newForm.php
而不是 http://sane30/beta30/newForm.php
或 http://sane30.dev/beta30/newForm.php
的形式启动,这会搞砸所有 includes
并使其无法调试。更糟糕的是,似乎发生了一些非常随机的事情。我尝试更改许多设置但收效甚微。
所以 a) 是否有人熟悉 PhpStorm 并且能够建议我在哪里将 sane.dev
定义为根服务器而不是 localhost
and/or
b) 任何人都可以提供一种策略来使所有页面理解相同的根目录,而不管它们最初是如何启动的(sane30 或 localhost)吗?
在hosts
我有
127.0.0.1 sane30
127.0.0.1 sane30.dev
在 httpd-vhosts.conf 我有
<VirtualHost *:80>
ServerName sane30
ServerAlias sane30.dev *.sane30.dev
DocumentRoot c:/xampp/htdocs/sane30/
</VirtualHost>
如果有帮助的话。
这里有两个问题:
1) PhpStorm 不会翻译 $_SERVER['DOCUMENT_ROOT']
所以任何使用它来创建路径的行为都是注定要失败的。
2) 在 PhpStorm 中设置目录。
我不确定是否必须这样做,但它似乎对我有用。
在您需要部署的设置中:
在那里我设置了我的根 URL 并使用了 "In place" 这似乎工作正常。
然后在映射选项卡上我设置了相关路径(这可能没问题但值得检查)。
我终于遇到了两个调试障碍,但我在这里或 Google 找不到任何解决方案。
"Frames are not available":我浪费了一个小时认为这是一个问题——这只是意味着调试没有什么可报告的。如果您查看控制台,它只会显示 "yippee it ran without incident" 因此,如果您设置了断点、变量监视或其他任何内容 - 那么您需要检查您正在查看的内容!
我也浪费了很多时间,因为调试器中的“框架”选项卡消失了(不可见)。
解决方案再简单不过了,但如果您是像我这样的新手,希望这可以节省您的时间。只需单击 "Restore layout" 按钮,瞧。
编辑:我稍后会正确编辑这个问题,但这不是 Apache 问题,而是 PhpStorm 中的 IDE 问题。我已经对所有问题进行了排序并在下面进行了回答。
几个月来,我一直在尝试在各种机器上解决问题。我认为我已经通过魔法从我的 Apache 设置中清除了 gremlins(如果你想要更多详细信息,请点击这里 )。
现在似乎一切正常。我有各种虚拟主机,包括 sane30
和 sane30.dev
,它们在网络浏览器中的行为符合预期。
如果我在 sane30.dev/index.php
或 sane30/index.php
中执行 echo $_SERVER['DOCUMENT_ROOT'];
,我会得到 C:/xampp/htdocs/sane30/
。如果我用 localhost/sane30/index.php
做同样的测试,我会得到 C:/xampp/htdocs/
- 页面运行但是没有找到任何 include
或图像或任何东西。我猜一切都如预期的那样。
我目前真正的问题是在 PhpStorm 中调试。
A) 我真的很难理解如何在 PhpStorm 中进行调试 - 我 100% 相信它会非常有用,但我发现它很难理解而且
B) 让 PhpStorm 始终如一地找到正确的文档根目录让我做了一场噩梦。每次我点击调试时,它都会以 http://localhost/sane30/beta30/newForm.php
而不是 http://sane30/beta30/newForm.php
或 http://sane30.dev/beta30/newForm.php
的形式启动,这会搞砸所有 includes
并使其无法调试。更糟糕的是,似乎发生了一些非常随机的事情。我尝试更改许多设置但收效甚微。
所以 a) 是否有人熟悉 PhpStorm 并且能够建议我在哪里将 sane.dev
定义为根服务器而不是 localhost
and/or
b) 任何人都可以提供一种策略来使所有页面理解相同的根目录,而不管它们最初是如何启动的(sane30 或 localhost)吗?
在hosts
我有
127.0.0.1 sane30
127.0.0.1 sane30.dev
在 httpd-vhosts.conf 我有
<VirtualHost *:80>
ServerName sane30
ServerAlias sane30.dev *.sane30.dev
DocumentRoot c:/xampp/htdocs/sane30/
</VirtualHost>
如果有帮助的话。
这里有两个问题:
1) PhpStorm 不会翻译 $_SERVER['DOCUMENT_ROOT']
所以任何使用它来创建路径的行为都是注定要失败的。
2) 在 PhpStorm 中设置目录。
我不确定是否必须这样做,但它似乎对我有用。
在您需要部署的设置中:
在那里我设置了我的根 URL 并使用了 "In place" 这似乎工作正常。
然后在映射选项卡上我设置了相关路径(这可能没问题但值得检查)。
我终于遇到了两个调试障碍,但我在这里或 Google 找不到任何解决方案。
"Frames are not available":我浪费了一个小时认为这是一个问题——这只是意味着调试没有什么可报告的。如果您查看控制台,它只会显示 "yippee it ran without incident" 因此,如果您设置了断点、变量监视或其他任何内容 - 那么您需要检查您正在查看的内容!
我也浪费了很多时间,因为调试器中的“框架”选项卡消失了(不可见)。
解决方案再简单不过了,但如果您是像我这样的新手,希望这可以节省您的时间。只需单击 "Restore layout" 按钮,瞧。