phpphp-7.4opcache

Is blacklist of opcache ignored when file_cache is enabled?


I am using php-fpm 7.4.3 on ubuntu 20.04. My blacklist of opcache doesn't work at all. Scripts I visited are cached when file_cache is enabled. Here's my configures.

php.ini

opcache.save_comments=0
opcache.blacklist_filename="/etc/php/opcache_blacklist.txt"
opcache.file_cache="/tmp/php"
opcache.file_cache_fallback=0

opcache_blacklist.txt

/*
/**
/**.php
/*.php
*.php
**
**.php

test.php

<pre>
<?php
print_r(opcache_get_status(true));
?>
</pre>

Some information from test.php

[used_memory] => 9821016
[num_cached_scripts] => 44
[num_cached_keys] => 45
[max_cached_keys] => 16229
[blacklist_misses] => 2
[scripts] => Array
(
    ....
)

There is a strange thing: everytime I refresh the test.php, blacklist_misses is increased by 1.

If I disable file_cache (opcache.file_cache=) in php.ini, num_cached_scripts and num_cached_keys become 0, blacklist_misses keeps increasing, blacklist_miss_ratio is always 100.

PHP documentation doesn't tell me that file_cache will affect blacklist, is this by design or a bug?


Solution

  • You are getting the expected bahavior. Basically you told php to execlude everything from caching!.

    A normal blacklist file would look like:

    /var/www/html/notcachedfile.php
    /var/www/html/notcachedfolder/*
    

    So file notcachedfile.php and everything in notcachedfolder will not be cached.

    A cache miss means PHP tries to retrieve data from the opcache, but that specific data is not currently in the opcache

    So the reason why blacklist_misses is increased everytime you refresh your test.php file is because it's matched by the pattern you provided in your opcache_blacklist.txt

    /* 
    

    Which means everything that is part of the / (The root directory) including your test.php file will not be in the cache, hence it shows a cache miss everytime.