Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Помогите решить задачу с циклом
Форумы портала PHP.SU » » Вопросы новичков » Помогите решить задачу с циклом

Страниц (1): [1]
 

1. Virus1850 - 29 Марта, 2017 - 23:33:47 - перейти к сообщению
Ребят, может кто сталкивался или знает как решить проблему, суть такова - есть переменная при изменении которой должно выполняться действие, но выполняться только один раз, до следующего изменения этой переменной (значение переменной может быть не цифровым). Например:

PHP:
скопировать код в буфер обмена
  1. $random = "ололо"; // Текущее значение
  2. $random = "трололо"; // Значение через час
  3. $random = "тратата"; // Значение через 2 часа и т.д.


Пока эту проблему решал так:
- заносил значение переменной в файл .txt
- потом вытягивал из файла ток уже через другую переменную,
- дальше сравнивал через if - т.е. если текущее значение совпадало со значением из файла, ничего не происходило, как только текущее значение отличалось от того, что записано в файл, выполнялось нужное действие и файл txt перезаписывался.
Но способ дикий, кажется должны быть иные пути решения...
Да, проверка переменной происходит постоянно, т.е. стоит таймер который обновляет скрипт каждую минуту...
2. DlTA - 30 Марта, 2017 - 00:24:27 - перейти к сообщению
ээээм, а приме вашего кода??
непонятно зачем в файл сохранять?

а для сравнения лучше исходный текст пропустить через функцию md5() (если текст большой)
3. Virus1850 - 30 Марта, 2017 - 01:48:54 - перейти к сообщению
DlTA пишет:
ээээм, а приме вашего кода??
непонятно зачем в файл сохранять?

а для сравнения лучше исходный текст пропустить через функцию md5() (если текст большой)


PHP:
скопировать код в буфер обмена
  1. $random = **** ; // периодически присваивается новое значение....
  2.  
  3. $db = 'db.txt';
  4. $r = fopen($db, 'r+');
  5. $random_db=fread($r,filesize($db));
  6. print Значение в базе: $random_db";
  7. fclose($r);
  8.  
  9. if ($random == $random_db) {
  10.  
  11.     echo "Изменений нет";
  12.  
  13. }   else {
  14.  
  15. ТУТ ВЫПОЛНЯЕТСЯ НУЖНОЕ ДЕЙСТВИЕ
  16.  
  17.    $data = $random;
  18.    $fh = fopen($db, "r+");
  19.    $success = fwrite($fh, $data);
  20.    fclose($fh);
  21.  
  22. }


Этот код по средством js обновляется раз в минуту. Как только значение $random изменяется, скрипт выполняется + файл перезаписывается на текущее значение переменной, что бы выполнение не зацикливалось, если значение совпадает со значением в файле, ничего не происходит.
4. Строитель - 30 Марта, 2017 - 12:50:17 - перейти к сообщению
DlTA пишет:
непонятно зачем в файл сохранять?
А как вы предлагаете выполнять сравнение без сохранения куда либо? Может быть я ошибаюсь, но я вижу необходимость сохранения, если не в файл, то в базу.
5. Virus1850 - 30 Марта, 2017 - 13:23:34 - перейти к сообщению
Строитель пишет:
DlTA пишет:
непонятно зачем в файл сохранять?
А как вы предлагаете выполнять сравнение без сохранения куда либо? Может быть я ошибаюсь, но я вижу необходимость сохранения, если не в файл, то в базу.


Я это к тому, что, возможно есть иные способы решения такой задачи. Что мне нужно, я описал и предложил свой путь решения, но он меня не совсем устраивает... Если иных способов нет, буду использовать этот...
6. Строитель - 30 Марта, 2017 - 14:06:47 - перейти к сообщению
Virus1850 пишет:
Я это к тому, что, возможно есть иные способы решения такой задачи. Что мне нужно, я описал и предложил свой путь решения, но он меня не совсем устраивает... Если иных способов нет, буду использовать этот...
Ну почему нет? - любую задачу можно решить разными способами. Вы вроде бы забыли уточнить, что вас не устраивает в вашем варианте.
7. Virus1850 - 30 Марта, 2017 - 15:22:35 - перейти к сообщению
Строитель пишет:
Virus1850 пишет:
Я это к тому, что, возможно есть иные способы решения такой задачи. Что мне нужно, я описал и предложил свой путь решения, но он меня не совсем устраивает... Если иных способов нет, буду использовать этот...
Ну почему нет? - любую задачу можно решить разными способами. Вы вроде бы забыли уточнить, что вас не устраивает в вашем варианте.

Скорость выполнения. Да, в идеале так можно юзать без проблем, но, если мне нужно отслеживать изменение переменной практически онлайн, т.е. отправлять запросы на проверку каждую сек. А это уже лишняя нагрузка и время на выполнения всех действий.
8. Строитель - 30 Марта, 2017 - 16:18:05 - перейти к сообщению
Virus1850, если бы речь шла о сравнении данных в процессе выполнения скрипта, то я бы предложил использование статической переменной в теле пользовательской функции (вместо текст.файла), а на вход этой функции передавать данные, которые динамически изменяются. В итоге код имел бы такой вид :
Спойлер (Отобразить)
9. Virus1850 - 30 Марта, 2017 - 16:23:34 - перейти к сообщению
Строитель пишет:
Virus1850, если бы речь шла о сравнении данных в процессе выполнения скрипта, то я бы предложил использование статической переменной в теле пользовательской функции (вместо текст.файла), а на вход этой функции передавать данные, которые динамически изменяются. В итоге код имел бы такой вид :
Спойлер (Отобразить)


Спасибо за наводку. Буду разбираться.

 

Powered by ExBB FM 1.0 RC1