Как я могу сделать мое расширение PHP, запрограммированное в C ++, помнить глобальные переменные?

Я использую 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, переменная «число» снова сбрасывается в ноль.

Как избежать сброса «числа»?

0

Решение

Глобальная переменная C ++ в расширении PHP не является постоянной.

Все зависит от настроек вашего веб-сервера. Если вы, например, используете Apache (и большинство других имеют аналогичную настройку), есть несколько запущенных процессов веб-сервера, все из которых просматривают страницы. Каждый из этих экземпляров имеет свою собственную глобальную переменную «число». Вот почему вы не видите увеличение числа, как вы ожидали: не каждый просмотр страницы обслуживается одним и тем же экземпляром Apache.

Кроме того: когда нагрузка на ваш веб-сервер повышается или понижается, новые процессы Apache запускаются и останавливаются, а новые переменные ‘number’ создаются с начальным значением 0. Кроме того, процесс Apache обычно перезапускается после определенного периода времени. фиксированное количество просмотров страниц (устанавливается в файле конфигурации apache), что также сбрасывает счетчик на ноль.

В вашей небольшой тестовой среде вы не столкнетесь с этой проблемой слишком быстро, потому что нагрузка настолько мала, что она может быть обработана одним экземпляром веб-сервера, но на занятом сервере вы наверняка столкнетесь с этим.

Если вы хотите использовать постоянный счетчик, вам придется хранить его где-то еще, например, в файле или базе данных.

3

Другие решения


По вопросам рекламы [email protected]