![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Никогда не программировал на PHP, да и не особо хочется, а в SuperSonic Imagine понадобилось.
И с тех пор открываю для себя всякие особенности этого языка...
В этот раз напоролся на особенность работы функции realpath().
У меня довольно интенсивные юнит-тесты для сайта, а то там вариантов состояний - много.
А состояния, главным образом, уж так по определению задачи сложилось, хранятся в виде файлов, каталогов и ссылок на них.
И тут долго не могу понять, что за фигня: тесты с участием этой самой realpath() очень как-то нестабильно сыпятся...
Долго копался, не верил своим глазам, перепроверял шелл-командами из тех же мест, где вызывается PHP функция.
И потом по симптомам пошел гуглить. Но гугл не помог, помог поиск в баг-трекере проекта PHP.
И какой замечательный баг там значится, и не баг вовсе, а - фича!
https://bugs.php.net/bug.php?id=78634
И разговор-то какой замечательный!
Человек выяснил, написал небольшой тест (а это иногда дорогого стоит!), у меня, правда, не совсем тот же сценарий, но не важно.
А ему отвечают в стиле вогонов из «Автостопом по галактике», когда они землю разрушали и объявляли, что бумаги о разрушении давно висели на Альфа-Центавре, что всё правильно, мол, там же - кеширование работает, не надо притворяться, что вы - не знали!
Нет, там, действительно, есть в комментариях про это, но до них же ещё нужно добраться!
И справа есть перечисление функций, и такие функции, как realpath_cache_get() и realpath_cache_size() - там указаны, но обращаешь ли на это внимание, если в описании про функцию об этом даже не упомянули про такую особенность!
А чтобы очистить кеш, надо вызвать clearstatcache(true), true - это аргумент clear realpath cache, который по-умолчанию false!
И с тех пор открываю для себя всякие особенности этого языка...
В этот раз напоролся на особенность работы функции realpath().
У меня довольно интенсивные юнит-тесты для сайта, а то там вариантов состояний - много.
А состояния, главным образом, уж так по определению задачи сложилось, хранятся в виде файлов, каталогов и ссылок на них.
И тут долго не могу понять, что за фигня: тесты с участием этой самой realpath() очень как-то нестабильно сыпятся...
Долго копался, не верил своим глазам, перепроверял шелл-командами из тех же мест, где вызывается PHP функция.
И потом по симптомам пошел гуглить. Но гугл не помог, помог поиск в баг-трекере проекта PHP.
И какой замечательный баг там значится, и не баг вовсе, а - фича!
https://bugs.php.net/bug.php?id=78634
И разговор-то какой замечательный!
Человек выяснил, написал небольшой тест (а это иногда дорогого стоит!), у меня, правда, не совсем тот же сценарий, но не важно.
А ему отвечают в стиле вогонов из «Автостопом по галактике», когда они землю разрушали и объявляли, что бумаги о разрушении давно висели на Альфа-Центавре, что всё правильно, мол, там же - кеширование работает, не надо притворяться, что вы - не знали!
Нет, там, действительно, есть в комментариях про это, но до них же ещё нужно добраться!
И справа есть перечисление функций, и такие функции, как realpath_cache_get() и realpath_cache_size() - там указаны, но обращаешь ли на это внимание, если в описании про функцию об этом даже не упомянули про такую особенность!
А чтобы очистить кеш, надо вызвать clearstatcache(true), true - это аргумент clear realpath cache, который по-умолчанию false!