我有 Windows 11 Pro。我有一个安装到目录中的 apache/php 网络服务器设置Program Files
。
在 PHP 目录中,我创建了两个文件夹,分别称为conf
和dist
。
有一个xdebug.ini
可以启用我保存在conf
目录中的 xdebug 扩展。
PHP 配置为conf
在加载时检查该目录是否有其他 INI 文件(但不检查dist
文件夹)。这是设计使然,因为当我想在服务器级别关闭 xdebug 时,我可以将文件移动xdebug.ini
到dist
文件夹,重新启动 apache,然后 xdebug 将不会被加载。
git bash
我有一个通过called运行的 shell 脚本togglexdebug
,当运行此命令时,它会停止 apache,然后将文件xdebug.ini
从dist
移动到conf
(报告它已经enabled
) 或从conf
移动到dist
(报告它已经disabled
)。 重新启动 apache 时会发出所采取的操作输出。
脚本部分可能很重要,因为它可能与此有关,不确定,只是涵盖我的基础。正如我所说,我通常保持 xdebug 启用,以便 ini 文件始终位于该conf
文件夹中。
问题在于,在极少数情况下,比如每 1-2 个月一次,重启后(而不是所有重启后,实际上是随机的,无论我多么努力,都无法可靠地重现该行为),该xdebug.ini
文件会神奇地出现在dist
文件夹中,而我确实知道前一天它在conf
文件夹中,而我根本没有亲自移动过这个文件。
更奇怪的是,我给toggledebug
脚本添加了一个日志,记录每次运行的时间和执行的操作,这样我就可以排除脚本以某种方式从某个地方运行的可能性。我只用脚本来移动这个文件。从来没有手动移动过它。日志文件确实显示我从未运行过该命令,自从我开始检查这个命令以来,它导致 xdebug 被禁用。每个条目都是我在这种暮光之城场景发生后运行脚本的。
以下是我开始记录以来的条目:
Wed, Feb 07, 2024 1:30:34 PM -- XDEBUG ENABLED!
Tue, Mar 19, 2024 1:53:05 PM -- XDEBUG ENABLED!
Thu, Apr 18, 2024 4:49:52 PM -- XDEBUG ENABLED!
我确信禁用日志可以正常工作,因为我已经测试过了。这证实了脚本没有运行到disable
xdebug,这意味着:
- Windows(或像 defender 这样的系统进程)正在在某些情况下“恢复”该文件的位置,这种情况下只会在某些特定的时间点发生(可能是在更新之后?)。
- 我梦游般走进我的办公室,手动移动文件,只会扰乱“有意识的我”的头脑
有谁知道这是怎么回事、为什么会这样,更重要的是,我该如何阻止它发生?
我试图查找任何类型的日志并搜索事件查看器,但不幸的是,我没有找到任何东西......
答案1
并不是说其他人也应该遇到这种情况,我正在用我找到的解决方案更新它。结果发现这种情况似乎是我自己造成的。根据 Señor CMasMas 的评论,我开始将我的 INI 扫描目录移出程序文件,看看这是否有帮助。当我发现我有另一个 shell 脚本在运行“composer”命令时也会移动此文件时,我开始更新切换 INI 文件位置的 shell 脚本,因为显然很久以前,如果在运行 PHP 时启用了 xdebug,composer 会发出严重抱怨。因此,为了解决这个问题,我覆盖了“composer”命令行,首先将 ini 文件移动到 DIST 文件夹,运行 composer 命令,返回输出,然后恢复 INI 文件。
我的新假设是,有时 composer 命令无法完成,或者出现故障,导致我以 ini 文件恢复为结尾的脚本永远无法运行。这也绕过了我对文件移动的记录。
事实证明,Composer 早已更新,不再存在 xdebug 的这个问题,因此我删除了我的 shell 脚本覆盖,并希望不再需要处理这个问题。