PHP opcache reset + symlink-style deployment

2022-08-30 20:33:37

我正在尝试在符号链接式部署后重置PHP opcache。我的项目中有一个文件在文档根目录的符号链接替换后执行:opcache_reset.phpwget

<?php
clearstatcache(true);
opcache_reset();

尽管如此,旧文件仍在使用。根据输出,增加的数量保持最新,但文件路径仍然过时。我需要在部署后一分钟左右手动调用才能使事情正确。opcache_get_status()manual_restartslast_restart_timeopcache_reset.php

PHP版本是5.5.6,ZendOpcache是7.0.3-dev。Opcache config:

opcache.blacklist_filename => no value
opcache.consistency_checks => 0
opcache.dups_fix => Off
opcache.enable => On
opcache.enable_cli => On
opcache.enable_file_override => Off
opcache.error_log => no value
opcache.fast_shutdown => 1
opcache.force_restart_timeout => 180
opcache.inherited_hack => On
opcache.interned_strings_buffer => 8
opcache.load_comments => 1
opcache.log_verbosity_level => 1
opcache.max_accelerated_files => 4000
opcache.max_file_size => 0
opcache.max_wasted_percentage => 5
opcache.memory_consumption => 128
opcache.optimization_level => 0xFFFFFFFF
opcache.preferred_memory_model => no value
opcache.protect_memory => 0
opcache.restrict_api => no value
opcache.revalidate_freq => 60
opcache.revalidate_path => Off
opcache.save_comments => 1
opcache.use_cwd => On
opcache.validate_timestamps => On

答案 1

原因和两种可能的解决方案在ZendOptimizerPlus问题中描述。我们通过在nginx配置中使用它来解决它:$realpath_root

fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
fastcgi_param DOCUMENT_ROOT $realpath_root;

答案 2

如果由于某种原因无法将 fastcgi_param 与 symlink 样式部署一起使用,请尝试在 php ini 配置中设置 。我无法找到任何好的文档来解释这个ini目录如何在引擎盖下工作,但是在我更改符号链接后它确实有效。希望这对任何人有所帮助。$realpath_rootopcache.revalidate_path = On


推荐