Я пытаюсь сбросить PHP-opcache после развертывания в стиле символической ссылки. В моем проекте есть файл opcache_reset.php
который выполняется wget
после замены символьной ссылки на корневой каталог документа:
<?php clearstatcache(true); opcache_reset();
Несмотря на это, старые файлы по-прежнему используются. Согласно результату opcache_get_status()
число manual_restarts
увеличивается, last_restart_time
поддерживает актуальность, но пути к файлам остаются устаревшими. Мне нужно вызвать opcache_reset.php
вручную через минуту или около того после развертывания, чтобы все было в порядке.
Версия PHP – 5.5.6, ZendOpcache – 7.0.3-dev. Конфигурация Opcache:
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
Причины и два возможных решения, описанные в выпуске ZendOptimizerPlus . Мы решили это, используя $realpath_root
в конфигурации nginx:
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; fastcgi_param DOCUMENT_ROOT $realpath_root;