Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
realpath_cache_size() действительно возвращает ноль. Не могу никак найти обработку open_basedir в контексте realpath_cache в исходниках. realpath_cache_size() нельзя делать выводы о кэше lstat() (и stat()), потому как для них реализованы два разных механима кэширования (в исходнике clearstatcache видно более наглядно). Вызов lstat() и без open_basedir не помещает значений в кэш realpath. Короткий тест на корректное функционирование кэша lstat:<?php
// обновляем mtime временного файла текущей датой
touch("./tmp");
var_dump(lstat("./tmp")["mtime"]);
// обновляем mtime "задним числом"
touch("./tmp", 1347062644);
var_dump(lstat("./tmp")["mtime"]);
// очищаем кэш и проверяем результат
clearstatcache();
var_dump(lstat("./tmp")["mtime"]);
$ php test.php int(1447062787) int(1447062787) int(1347062644)
$ php -dopen_basedir="." test.php int(1447062797) int(1447062797) int(1347062644)
Open_basedir не даёт 100% гарантии, что юзер не откроет каким-то способом файл за пределами ограничений open_basedir
Заставляем совместно работать open_basedir + realpath_cache