Обнаружил, что realpath_cache_get() всегда пустой, начал разбираться и выяснил, что в режиме cli все работает отлично, а вот при запросе из веб получаю пустой массив.
Из скрипта:
<?php realpath(null); var_dump(realpath_cache_get()); // array(0) {}
Из консоли:
php -r 'realpath(null); var_dump(realpath_cache_get());' // array(5) {...}
Сравнить полностью phpinfo() из веб и cli трудно из-за разных форматов, но основное одинаково:
ini_get('open_basedir'); // bool(false)
ini_get('realpath_cache_size '); // string(5) "2048k"
ini_get('realpath_cache_ttl '); // string(3) "120"
Версия php на сервере только одна:
PHP 5.6.25 (cli) (built: Aug 31 2016 19:17:57)
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2016, by Zend Technologies
При запросе из веб realpath_cache_get() очень редко проскакивает /etc/php.d/opcache-default.blacklist, а в основном, массив пустой.
Оказалось, что если в httpd.conf хотя бы для одного домена указан open_basedir, то realpath кэш не будет работать вообще ни для одного домена. Из cli, разумеется, httpd.conf не обрабатывается.
В итоге для себя решил проблему с помощью php-расширения turbo_realpath.
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости