Это может быть глупый вопрос, но как сохранить переменные, не относящиеся к определенному сеансу. Простым примером того, почему вы можете это сделать, будет счетчик посетителей - число, которое увеличивается на единицу каждый раз, когда кто-то посещает веб-страницу (обратите внимание - я на самом деле этого не делаю, мое приложение отличается, но это мне нужна функциональность). Единственное, что я могу придумать, это либо записать переменные в файл, либо поместить переменные в базу данных. Оба кажутся немного неэлегантными. Есть ли лучший способ для такого рода вещей?Сохранение переменных (не сеансов)
ответ
Если вам нужно сохранить глобальное состояние, вам нужно сохранить глобальное состояние. Обычно это делается либо в файле, либо в базе данных, как вы уже отметили.
Хмммм. В asp.net существует понятие состояния приложения, которое в основном представляет собой кеш памяти, который разделяется всеми reqests. Это было бы идеальным местом для хранения количества онлайн-пользователей, если вы спросите меня. –
Проблемы: а) ASP, к сожалению, не PHP. б) Состояние приложения неустойчиво. Это может быть или не быть проблемой.В случае счётчика, это будет большой проблемой. К сожалению, нет ничего, что было бы прямым аналогом состояния приложения в PHP, поэтому разговор в любом случае несколько спорный. –
Учитывая, что PHP не имеет гражданства и что каждая pageload по существу повторно запускает вашу страницу заново, если вы собираетесь сохранять переменные, которые будут увеличиваться на несколько pageload (например, количество отдельных пользователей), вы будете иметь для использования какой-либо формы хранения на сервере - на основе файлов, базы данных и т. д. - для сохранения переменной.
Это совсем не «неэлегантный». Если вам нужно что-то сохранить (полу), вы поместите его в базу данных. Для этого нужны базы данных.
Посмотрите на функцию сериализации() в PHP http://uk3.php.net/serialize, где вы будете иметь возможность записать массив или такое файл и повторно получить:
<?php
// Save contents
$var = array('pageCounter' => 1);
file_put_contents('counter.txt', serialize($var));
// Retrieve it
$var = unserialize(file_get_contents('counter.txt'));
?>
В противном случае сохранения значения в базе данных ,
Да, спасибо, я уже делаю что-то очень похожее. –
Вы могли бы попытаться установить APC (Alternative PHP Cache), который имеет интересные функции для обмена данными между всеми PHP сценариев, вы можете попробовать использовать общую память слишком или, как вы сказали, используйте файл или базу данных
Это интересный вариант. –
Если вы хотите он должен быть постоянным, база данных и файлы на самом деле являются вашими только двумя вариантами.
Если вы только хотите, чтобы временно хранить эти значения в памяти, если APC установлен, вы можете сделать это:
// Fetch counter value back from memory
$success = false;
$counter = apc_fetch('counter', &$success);
if ($success) {
// fetch succeeded
} else {
// fetch failed
$counter = 0;
}
// Increment the counter and store again
// Note that nothing stops another request/page from changing this value
// between the fetch and store calls.
$counter++;
apc_store('counter', $counter);
Это просто пример. Для счетчика вам лучше использовать apc_inc('counter')
/apc_dec('counter')
.
Предположительно, другие кеши оп-кода имеют аналогичные методы. Если вы не используете кеш-код операции ... действительно? Вы хотите, чтобы PHP перекомпилировал страницу каждый раз, когда ее запрашивали?
Большое спасибо. Очень интересно. Я это рассмотрю. –
Извините, я забыл ссылаться на страницы руководства для этих страниц. Вот основная страница руководства по функциям APC на php.net: http://www.php.net/manual/en/ref.apc.php – Powerlord
Я думаю, что нашел ответ - session_name ('whatever') можно использовать для фиксированного имени для сеанса, я могу ссылаться на эти данные, а также на сеанс, специфичный для сеанса.
Элегантный, нет базы данных и нет файлов?
Сохраните его на своей серверной памяти с помощью shmop и надейтесь, что ваш сервер не перезагрузится!
- 1. с использованием сеансов переменных
- 2. PHP http включает не сохранение сеансов
- 3. Сохранение сеансов SSH после отключения
- 4. Сохранение сеансов в базе данных
- 5. Сохранение сеансов memcache в рельсах
- 6. Сохранение переменных в массиве SESSION
- 7. Сохранение переменных сеанса не работает
- 8. Сохранение переменных переменных для обещаний
- 9. Сохранение переменных на сервере в php
- 10. Node.js, многопользовательское приложение Socket.io - сохранение пользовательских сеансов?
- 11. Rails 2.3 - Сохранение сеансов в другой схеме
- 12. Сохранение сеансов Codeigniter в базе данных
- 13. Сохранение сеансов для перехода на другие страницы
- 14. Сохранение объекта пользователя в хранилище сеансов
- 15. Алиасинг (CNAME) Django Субдомены/Домены Сохранение сеансов
- 16. Сохранение изображения после использования запросов/сеансов
- 17. Сохранение «сеансов данных» с помощью CoreData
- 18. Сохранение сеансов корзины покупок в базе данных
- 19. Сохранение кэша MySQL во время сеансов
- 20. Сохранение переменных в Asp.net
- 21. Page Reload - Сохранение переменных
- 22. Сохранение переменных в массиве?
- 23. Сохранение переменных в Android
- 24. Сохранение переменных из AJAX
- 25. Возможно сохранение переменных JQuery?
- 26. Сохранение переменных сеанса перезаписывается
- 27. Сохранение переменных в socket.io через несколько страниц
- 28. Сохранение переменных в JQuery
- 29. Сохранение переменных Ruby Sinatra
- 30. Сохранение значений переменных
Почему файлы и базы данных неэлегантные? – thetaiko
Когда я хочу только сохранить несколько переменных, которые используются каждой сессией, это просто не похоже на опрятный вариант. Я просто задавался вопросом, есть ли другой способ сделать это. –