php 404 on _wdt:Symfony WebProfiler不生成任何配置文件数据

ojsjcaue  于 2023-06-04  发布在  PHP
关注(0)|答案(2)|浏览(362)

当我想启用Web Profiler工具栏时,Symfony 2在开发者模式下会触发大量404:

GET http://www.domain.dev/_wdt/de040c 404 (Not Found)

所以我调试了ProfilerController,发现当在文件系统中找不到配置文件数据时,它会触发404。
但是每次对页面的请求都会在“app/cache/dev/profiler”目录下创建新的目录,但仍然没有文件。
app/cache/dev下的文件树如下所示:

正如您所看到的,目录“profiler”包含一些目录(并且它将随着对站点的每个请求而增长),但从未包含任何文件。nginx和php进程有完全写权限,我还配置了cache-directory作为示例,使用/dev/shm下的共享内存来防止对我的主机系统产生副作用(我使用vagrant进行开发)
所以我的问题是为什么没有创建分析器数据,“谁”对此负责?

更新:

我发现,在FileProfileStorage.php中,将收集和序列化所有配置文件数据:

// Store profile
$data = array(
    'token' => $profile->getToken(),
    'parent' => $profile->getParentToken(),
    'children' => array_map(function ($p) { return $p->getToken(); }, $profile->getChildren()),
    'data' => $profile->getCollectors(),
    'ip' => $profile->getIp(),
    'method' => $profile->getMethod(),
    'url' => $profile->getUrl(),
    'time' => $profile->getTime(),
);

if (false === file_put_contents($file, serialize($data))) {
    return false;
}

这里会抛出一个异常“Serialization of Closure is not allowed”。我仍然没有发现哪个DataCollector将负责使用Closure而不是“真实的的”数据。

更新二:

我发现TwigCacheBundle的ProfilerExtension会在这里抛出异常(“不支持闭包的序列化”)

lb3vh1jj

lb3vh1jj1#

我自己解决的。TwigCacheBundle的ProfilerExtension在为Web Profiler序列化其数据时引发异常。
我做了一个pull request for that

ruarlubt

ruarlubt2#

我也遇到过类似的问题。但在我的情况下,序列化需要大量的内存。在将PHP的内存限制增加到256M后,错误消失了。
也许这会帮助有同样问题的人。

相关问题