是否可以将预加载程序用于cli脚本而不是用于php fpm?
我知道我们可以使用7.4中的预加载程序将PHP代码编译成OpCache。据我所知,它只适用于CGI/FastCGI(PHP-FPM)。是否可以仅对一个CLI脚本执行相同的操作,该脚本不是要在HTTP请求上执行,而是要在控制台上运行是否可以将预加载程序用于cli脚本而不是用于php fpm?,php,docker,docker-compose,php-7.4,php-8,Php,Docker,Docker Compose,Php 7.4,Php 8,我知道我们可以使用7.4中的预加载程序将PHP代码编译成OpCache。据我所知,它只适用于CGI/FastCGI(PHP-FPM)。是否可以仅对一个CLI脚本执行相同的操作,该脚本不是要在HTTP请求上执行,而是要在控制台上运行 在这里,我创建了一个 不过,我没有让你的例子使用它。我不熟悉您使用的PHP图像,但这里有一些提示: 您应该以非root用户身份运行容器(或配置用户进行预加载),请参阅(“不允许以root用户身份运行预加载”) 您可以将用户::添加到您的服务中。根据用户切换在PHP中的
在这里,我创建了一个 不过,我没有让你的例子使用它。我不熟悉您使用的PHP图像,但这里有一些提示:
用户::
添加到您的服务中。根据用户切换在PHP中的实现方式,可能需要在/etc/passwd
中输入一个条目
opcache.enable_cli=1
opcache.file_cache=/some/dir/somewhere
opcache.file_cache_only=1
opcache.preload=/path/to/preload.php
如果您对此进行配置并运行CLI脚本,则将执行/path/to/preload.php
中的预加载脚本,并且使用include、include\u once、require、require\u once或opcache\u compile\u file()将导致编译后的操作码存储在/some/dir/where
中
当您运行第二个CLI脚本时,它将能够使用那些已编译的操作码,但它不会知道已经发生了预加载。因此,您放入preload.php中的所有内容都将在每次脚本加载时运行。您需要手动处理此问题,例如通过呼叫
以这种方式使用它的复杂性可能超过了大多数用例的收益。我在谷歌上搜索了opcache.enable-cli,它似乎什么都没做,因为opcache存储在内存中。我找到了可以配置为使用文件而不是内存的方法。但我想知道什么时候会发生这种情况?在第一次运行脚本时?