Вопрос переменной PHP - PullRequest
       6

Вопрос переменной PHP

0 голосов
/ 02 сентября 2011

вот мой код

echo ("<br/>");
if ($APIkbpersec < 30) {
    global $SpeedTest;
    echo ("Slow speed");
    $SpeedTest--;
}
if ($APIkbpersec > 30) {
    global $SpeedTest;
    echo ("High speed");
    $SpeedTest++;
}
echo $SpeedTest;

страница, на которой находится этот код, перезагружается каждую секунду с помощью AJAX, а значение $APIkbpersec изменяется между 40 и 0.

Я хочу, чтобы переменная ($SpeedTest) увеличивалась или уменьшалась в зависимости от значения $APIkbpersec.

  • если $APIkbpersec меньше 30, я хочу, чтобы $SpeedTest уменьшалось на 1 при каждом обновлении до минимума 0.
  • если $APIkbpersec больше 30, я хочу, чтобы $SpeedTest увеличивался с 1 на каждое обновление до максимального значения 10.

проблема в том, что я не знаю, что за проблема ... Я сейчас пытаюсь записать $SpeedTest в текстовый файл, чтобы я мог читать его при каждом обновлении, чтобы выполнять математические операции для каждого обновления без его сброса в PHP

любая помощь будет оценена

Ответы [ 5 ]

3 голосов
/ 02 сентября 2011

Он сбрасывается, потому что HTTP-запрос не имеет состояния. Каждый вызов AJAX является изолированным событием для скрипта PHP. Чтобы переменная сохранялась, она должна храниться в $_SESSION.

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

session_start();

// Initialize the variable if it doesn't exist yet
if (!isset($_SESSION['SpeedTest'])) {
  $_SESSION['SpeedTest'] = 0;
}

echo ("<br/>");
if ($APIkbpersec < 30) {
  echo ("Slow speed");
  $_SESSION['SpeedTest']--;
}
if ($APIkbpersec > 30) {
  echo ("High speed");
  $_SESSION['SpeedTest']++;
}
echo $_SESSION['SpeedTest'];
2 голосов
/ 02 сентября 2011

Или:

  • Верните $SpeedTest в ответ и передайте его туда и обратно.
  • Используйте какое-то постоянное хранилище, такое как cookie или сеансы PHP.

Оба довольно просты в реализации. Если вы хотите с постоянным хранилищем, я бы предложил файл cookie, так как JS и PHP могли бы его использовать Сессия, хотя и очевидный кандидат, в этом случае немного излишня - ИМО.

2 голосов
/ 02 сентября 2011

Вы должны использовать $_SESSION для этой цели.
См. ЗДЕСЬ для объяснения, но в основном вам нужно будет сделать следующее:

session_start();
$SpeedTest = isset($_SESSION['speedTest']) ? $_SESSION['speedTest'] : 0;

if ($APIkbpersec < 30)
{
    echo ("Slow speed");
    $SpeedTest--;
}

if ($APIkbpersec > 30)
{
    echo ("High speed");
    $SpeedTest++;
}
$_SESSION['speedTest'] = $SpeedTest;

echo $SpeedTest;
0 голосов
/ 02 сентября 2011

Если вы хотите сделать это с файлами, вы можете использовать один файл для хранения единого глобального значения для вашей переменной:
Чтение данных из файла ( документы здесь ):

$data= file_get_contents('file.txt');

Поместите данные в файл ( документы здесь )

$bytesWritten = file_put_contents( $data );

В противном случае вы можете использовать сеансы или база данных , как и другие предложенные.
Без файлов cookie или сессий у вас не может быть реального решения «для пользователя», поэтому, если вам нужно придерживаться других ответов или использовать гибридное решение с сессиями / файлами
Если вы используете решение для запроса (такой тип пинг-pong с переменными POST или GET) всегда обращайте внимание, потому что эти переменные могут быть изменены пользователями.
Другие вещи, которые следует запомнить:

  1. Файлы и записи базы данных сохраняются до тех пор, пока вы их не удалите (так что, возможно, у вас естьдля управления удаленными файлами или записями.)
  2. Продолжительность сеанса настраивается на вашем сервере (поэтому они могут длиться слишком коротко, если вам требуется длительное сохранение).
  3. Обычно база данных лучше файлов (выполнять больше задач и предоставлять вашему приложению большую масштабируемость), но в некоторых случаях решение для файлов быстрее (проверяется), особенно если ваша база данных находится на другом хосте и не находится на том же хосте, что и ваш веб-сервер.
0 голосов
/ 02 сентября 2011

Если это весь ваш код, проблема проста.Каждый раз, когда скрипт запускается, значения всех переменных инициализируются.В вашем случае это означает, что значение $ SpeedTest не сохраняется - оно сбрасывается в ноль при каждом вызове скрипта.Вы можете использовать сеанс, как предлагает @Michael (возможно, моя рекомендация), прочитать значение из текстового файла или базы данных и затем записать новое значение, или вы можете вернуть значение $ SpeedTest в ваш сценарий AJAX и передать его обратно.в скрипт php в качестве параметра.У каждого из них есть свои преимущества и недостатки, но использование суперглобального $ _SESSION легко и не требует больших изменений в вашем коде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...