=============================================== ==========
忽略此帖。可以在PHP auto_prepend_file causes xdebug profiler to fail
找到关于此问题的简单陈述。=============================================== ==========
当我尝试使用以下命令在PhpStorm中打开xdebug探查器快照时
菜单栏>>工具>>分析xdebug profiler快照...
我选择了xDebug创建的文件,但我遇到了这个错误:
错误:探查器快照格式不正确:名称格式不正确
我没有重命名快照。它是默认名称:cachegrind.out.8008
的php.ini
<!-- language:lang-none -->
[xdebug]
zend_extension="php_xdebug-2.5.5-5.6-vc11.dll"
xdebug.remote_enable=1
xdebug.remote_host=localhost
xdebug.remote_port=9000
xdebug.remote_autostart=1
xdebug.profiler_enable=1
xdebug.profiler_output_dir="C:\websites\xdebug"
; xdebug.profiler_output_name= ; Commented out to allow default name
xdebug.idekey=PHPSTORM
PhpStorm为什么不打开快照?我应该设置自定义xdebug.profiler_output_name
选项吗?
我关闭了所有项目,从PhpStorm 2017.1.4
升级到2017.2
,重新启动了Apache,删除了旧快照并创建了一个新快照。 新的打开没有问题。
似乎如果我通过调用>php script.php
从命令行运行文件,则可以打开生成的快照。如果我从浏览器运行相同的文件(意味着我通过Apache网络服务器:localhost/script.php
),则无法打开快照。
我还注意到,当我从浏览器执行时,在强制停止Apache进程之前,我无法删除快照。我正在分析的PHP文件没有说明:仅<?php
。以下是创建的两个快照:
从命令行执行时(PhpStorm打开此文件没有问题):
version: 1
creator: xdebug 2.5.5 (PHP 5.6.1-dev)
cmd: C:\path\to\script.php
part: 1
positions: line
events: Time
fl=(1) C:\path\to\script.php
fn=(1) {main}
summary: 0
1 0
从浏览器执行时(PhpStorm无法打开此快照):
version: 1
creator: xdebug 2.5.5 (PHP 5.6.1-dev)
cmd: C:\path\to\script.php
part: 1
positions: line
events: Time
fl=(2) C:\path\to\script.php
fn=(1)
summary: 0
1 0
罪魁祸首是auto_prepend_file
ini setting。我在Apache Vhosts中有以下设置:
php_value auto_prepend_file "C:\path\to\init.php"
此文件在Apache执行从浏览器调用的脚本之前运行。当我从命令行运行脚本时,此设置(在我的Apache Vhosts配置中)永远不会生效,因此init.php
不会运行。相反,如果我将设置移动到php.ini
,它也会影响命令行执行,那么从命令行生成的快照也会停止工作。
如果删除auto_prepend_file
设置,生成的探查器快照可以在PhpStorm中打开而不会出现问题。当然,这不是一个修复,因为我需要执行auto_prepend_file
才能使我的应用程序正常工作。