Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/246.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否可以将预加载程序用于cli脚本而不是用于php fpm?_Php_Docker_Docker Compose_Php 7.4_Php 8 - Fatal编程技术网

是否可以将预加载程序用于cli脚本而不是用于php fpm?

是否可以将预加载程序用于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中的

我知道我们可以使用7.4中的预加载程序将PHP代码编译成OpCache。据我所知,它只适用于CGI/FastCGI(PHP-FPM)。是否可以仅对一个CLI脚本执行相同的操作,该脚本不是要在HTTP请求上执行,而是要在控制台上运行


在这里,我创建了一个

不过,我没有让你的例子使用它。我不熟悉您使用的PHP图像,但这里有一些提示:

  • 您应该以非root用户身份运行容器(或配置用户进行预加载),请参阅(“不允许以root用户身份运行预加载”)

    您可以将
    用户::
    添加到您的服务中。根据用户切换在PHP中的实现方式,可能需要在
    /etc/passwd
    中输入一个条目

  • CLI的操作码缓存已选择加入,请参阅

  • 有一个例子明确提到了这种情况:

    此外,只有当存在从一个请求到另一个请求的持久化进程时,预加载才有用。这意味着,如果启用了opcache,它可以在CLI脚本中工作,但通常没有意义

    要启用它,可以在php.ini中设置如下内容:

    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存储在内存中。我找到了可以配置为使用文件而不是内存的方法。但我想知道什么时候会发生这种情况?在第一次运行脚本时?