亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用命令行預編譯 php opcache?

如何使用命令行預編譯 php opcache?

PHP
繁花如伊 2023-07-01 13:08:14
opcache.file_cache我正在嘗試使用控制臺命令通過功能來預熱 opcache 。我的 opcache.ini:opcache.enable=trueopcache.enable_cli=trueopcache.memory_consumption=128opcache.interned_strings_buffer=32opcache.use_cwd=falseopcache.max_file_size=0opcache.max_accelerated_files=32531opcache.validate_timestamps=falseopcache.revalidate_freq=0opcache.enable_file_override=trueopcache.optimization_level='0xFFFFFFFF'opcache.file_update_protection=0opcache.save_comments=falseopcache.file_cache='/tmp/.opcache'opcache.file_cache_consistency_checks=falseopcache.log_verbosity_level=0在開始 php-fpm 進程之前,我通過從 clommand 行執行 scrpt 來編譯文件:$getDirs = static function () use ($argv): array {    $dirs = $argv;    unset($dirs[0]);    return $dirs;};$files = \Symfony\Component\Finder\Finder::create()->in($getDirs())    ->name('*.php')    ->ignoreUnreadableDirs()    ->notContains('#!/usr/bin/env php')    ->notPath(get_included_files())    ->files()    ->followLinks();$compiled = 0;foreach ($files as $file) {    try {        if (!opcache_is_script_cached($file->getRealPath())) {            opcache_compile_file($file->getRealPath());        }        $compiled++;    } catch (Throwable $e) {    }}echo 'Cached ' . $compiled . ' files' . PHP_EOL;該腳本將編譯后的文件生成到指定的 ( /tmp/.opcache) 目錄。然后我啟動 php-fpm 進程,但不使用任何預編譯緩存,并且每次重新啟動 php-fpm 進程時 opcache 都會編譯緩存。有沒有一種方法可以在不使用http請求的情況下預編譯opcache?
查看完整描述

2 回答

?
躍然一笑

TA貢獻1826條經驗 獲得超6個贊

添加以下設置

opcache.file_cache_only=1

進入你的php.ini

因為opcache.file_cache_only已經關閉了。opcache 僅在內存滿時使用文件緩存。所以你想要的opcache必須使用文件緩存。請打開opcache.file_cache_only=1。


查看完整回答
反對 回復 2023-07-01
?
神不在的星期二

TA貢獻1963條經驗 獲得超6個贊

可能有人會發現這個有用通過 CLI 為 php-fpm 預編譯 opcache 確實有效 由于某種原因,它需要太多時間(與內存中存儲的操作碼相比)將緩存文件加載到內存中,但不會重新編譯正在執行的 PHP 文件。

PS 這個技巧甚至適用于不同的 opcache 配置。


查看完整回答
反對 回復 2023-07-01
  • 2 回答
  • 0 關注
  • 163 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號