Opcache 预加载和缺失 App_KernelProdContainer.preload.php

Opcache preloading and missing App_KernelProdContainer.preload.php

按照文档操作后,我的新 OPCache 设置是这样的:

opcache.preload_user=www-data
opcache.preload=/var/www/vhosts/.../httpdocs/.../var/cache/prod/App_KernelProdContainer.preload.php
opcache.memory_consumption=1024
opcache.interned_strings_buffer=256
opcache.max_accelerated_files=20000
opcache.validate_timestamps=0

默认情况下,在 var/cache/prod 文件夹中有一个名为 srcApp_KernelProdContainer.preload.php.

的文件

删除/cache文件夹后重启PHP-FPM, App_KernelProdContainer.preload.php 未创建。

我应该将 App_KernelProdContainer.preload.php 重命名为 srcApp_KernelProdContainer.preload.php 还是我遗漏了什么?

不,您不应该将此文件直接添加到您的 PHP 设置中,因为正如您所发现的那样,它会使整个过程变得非常脆弱。你也不应该重命名它或任何东西,因为它是自动生成的。

Symfony 在后来的版本中所做的是创建一个“预加载”文件。

Symfony 4 flex 配方包括 this one

<?php

if (file_exists(dirname(__DIR__).'/var/cache/prod/srcApp_KernelProdContainer.preload.php')) {
    require dirname(__DIR__).'/var/cache/prod/srcApp_KernelProdContainer.preload.php';
}

if (file_exists(dirname(__DIR__).'/var/cache/prod/App_KernelProdContainer.preload.php')) {
    require dirname(__DIR__).'/var/cache/prod/App_KernelProdContainer.preload.php';
}

在 Symfony 5.1+ 上你有一些东西 like this

请注意,此文件有条件地需要预加载脚本。这样,如果它不存在,它不会杀死 PHP 解释器。

如果您目前没有这个文件;你可以手动创建它,或者只是从食谱中复制它。

文件添加到 php.ini 上的 opcache.preload 设置,而不是直接生成的预加载脚本。