У меня есть служебный класс со статической функцией, которая использует глобальную переменную:
private static function isRateLimited($ip) {
global $memcached_node;
$memcache = new Memcache;
$memcache->connect($memcached_node['host'], $memcached_node['port']) or die ("memcache failure");
// do stuff
}
Глобальная переменная устанавливается с помощью поваренной книги шеф-повара.Все работало хорошо в приложении до недавнего изменения.Изменено выполнение кода, так что isRateLimited()
вызывается дважды во время одного веб-запроса.
Отладка показала, что при первом вызове isRateLimited()
устанавливается глобальная переменная, и все работает, как ожидалось.Однако во второй раз, когда вызывается isRateLimited()
, глобальная переменная возвращает пустое значение (как проверено с empty()
).В результате происходит второе подключение к memcached.
Глобальное значение не перезаписывается и не сбрасывается нигде в коде. Почему глобальная переменная теряет свое значение между выполнениями функции в одном и том же веб-запросе?
Для справки я попытался сослаться на глобальное использование $memcached_node = $GLOBALS["memcached_node"];
как одного из моих "последних"рвотное усилие "дартс".Поведение было таким же.
Среда
- PHP 5.3.4 (cli) (сборка: 21 января 2011 г. 00:08:14)
- nginx 1.0.6