Я использую PHP-CPP библиотека для разработки расширений PHP.
Когда я пытаюсь следующее в C ++:
#include <phpcpp.h>
static int number=0;
Php::Value get_num()
{
number++;
return number;
}
И следующее в PHP:
<?php
echo get_num();
?>
Некоторое время все работает, как и ожидалось, но затем переменная «число» случайно сбрасывает обратно в ноль. Кроме того, нажимая CTRL + F5 в Firefox, переменная «число» снова сбрасывается в ноль.
Как избежать сброса «числа»?
Глобальная переменная C ++ в расширении PHP не является постоянной.
Все зависит от настроек вашего веб-сервера. Если вы, например, используете Apache (и большинство других имеют аналогичную настройку), есть несколько запущенных процессов веб-сервера, все из которых просматривают страницы. Каждый из этих экземпляров имеет свою собственную глобальную переменную «число». Вот почему вы не видите увеличение числа, как вы ожидали: не каждый просмотр страницы обслуживается одним и тем же экземпляром Apache.
Кроме того: когда нагрузка на ваш веб-сервер повышается или понижается, новые процессы Apache запускаются и останавливаются, а новые переменные ‘number’ создаются с начальным значением 0. Кроме того, процесс Apache обычно перезапускается после определенного периода времени. фиксированное количество просмотров страниц (устанавливается в файле конфигурации apache), что также сбрасывает счетчик на ноль.
В вашей небольшой тестовой среде вы не столкнетесь с этой проблемой слишком быстро, потому что нагрузка настолько мала, что она может быть обработана одним экземпляром веб-сервера, но на занятом сервере вы наверняка столкнетесь с этим.
Если вы хотите использовать постоянный счетчик, вам придется хранить его где-то еще, например, в файле или базе данных.