Хорошо, ну хоть подскажи где её использовать (var_dump()), в каком месте. Вообще, есть какие-то мысли по поводу почему не работает? Ну хоть на мысль натолкни.
во всех, надо проследить полностью за ходом всей программы, это долго и нудно debug/отладка http://phpfaq.ru/debug https://netbeans.org/kb/docs/php/debugging_ru.html https://php.ru/forum/threads/howto-...i-po-shagam-i-s-kartinkami.58974/#post-474550
Ничего у меня не выходит. Для упрощения сделал два простых скрипта. Может кто в этом случае посмотрит их код Основная страница: PHP: <?php error_reporting( E_ERROR ); session_start(); $_SESSION['iter'] = 0; ?> <!DOCTYPE html> <html lang="ru" xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Тест</title> <meta content="text/html; charset=UTF-8" http-equiv="Content-Type" /> <script src="js/jquery-2.1.4.min.js" type="text/javascript"></script> </head> <body> <script> var Iter_interval; function runscript() { Iter_interval= setInterval(function() { var IterCount = ''; $.ajax({ type: "POST", url: "/php/firstscript.php", data: {'var':'iter'}, response: 'text', async:false, success:function(result) { $('#debug').text(parseInt(result)); } }); }, 2000); $.ajax({ type: "POST", url: "/php/firstscript.php", data: {'fs':'1'}, response: 'text', async:true, success: function(result) { clearInterval(Iter_interval); } }); } </script> <div id="debug">Отладка</div> <button onclick="runscript();">Test</button> </body> </html> И дополнительный скрипт (firstscript.php): PHP: <?php session_start(); if(isset($_POST['var'])) { echo $_SESSION[$_POST['var']]; } if (isset($_POST['fs'])) { for ($i = 0;$i < 100;$i++) { sleep(1); $_SESSION['iter'] = $i; } } ?> Переменная сессии не меняется. Как была с самого на чала 0, так и осталась.
правильное решение как ты это проверяешь? мне пришлось дописать в firstscript.php после 15 строчки вывод значения из сессии, выводит 99. --- Добавлено --- И зачем там sleep? я его убрал
Для имитации бурной деятельности. Поэтому я и писал, что лично мне предложение Игоря про сессии кажется странным. Я считаю, что надо юзать memcache или базу
нужно понимать, что пока скрипт не завершит работу по истечении 100 секунд, в сессию ничего не запишется. --- Добавлено --- Сессия это не реал-тайм shared memory
Да, согласен. Так как ты говоришь, с дампом в скрипте firstscript.php всё будет работать. Но только в нем. А моя задача получить информацию об изменениях на основной странице. Наверное зря не послушал сразу, хотел найти легкий путь .. Я думаю в этом и зарыта собака. Пока, основываясь на результатах своего эксперимента и скудных знаниях о PHP, тоже пришел к такому выводу. А sleep действительно там мешает, не так надо было эксперимент ставить. У меня же цикл не в отдельном процессе запущен . Так что пока "все спят" таймер в ajax'е тоже спит.
тогда нужно перезагрузить страницу, а не делать ajax, так как должен отработать опять PHP http://phpfaq.ru/newbie/na_tanke Ты можешь получить число в ajax ответе, и использовать его.
принципиальной разницы в данном случае не вижу. шо в лоб шо по лбу. Так или иначе, чувак воюет без успеха. --- Добавлено --- детей-потоков наплоди в конфиге.
Ну подскажи, как тестовый скрипт сделать, чтобы основная страница получала изменения переменной сессии, сделанные в другом скрипте. Ну да, пока я всё это на собственном сервере тестирую, там без ограничений. К тому же, как я уже писал, этот скрипт будет работать минут 5 и итераций в цикле будет порядка 30 тысяч. Вот мне и надо отслеживать ход событий. Причем, желательно, без замедления работы основной функции (цикла).
Самое простое решение в твоем случае - на каждом проходе скрипта записывать нужную информацию в простой файл, а скрипт-монитор просто будет считывать этот файлик, либо вообще никакого скрипа не нужно, а просто смотреть в браузере текстовый файлик =)
PHP: <?php $_SESSION[$_GET['key']] = $_GET['val']; и руками меняй. По яксу смотри меняется или нет нужный тебе ключик.
А попроще можно, в смысле пояснить суть того, что ты написал? Это же раздел для новичков... --- Добавлено --- Думаю можно и в базу писать, ну например раз в 200 итераций, плюс окончание цикла. Цикл может быть не кратен 200.
ну как один файл делает PHP: $_SESSION[$_GET['key']] = $_GET['val']; а в другом файле PHP: var_dump($_SESSION); ну и через первый задаёшь значение, а через второй смотришь че вышло.
Спасибо, это я знаю. Я просто не понял при чем тут массив $_GET. Это тоже понятно. Игорь, Вы же понимаете, мне не нужен код, который я мог бы вставить на страницу и забыть. Мне нужно разобраться как это можно реализовать. Ваша идея меня заинтересовала теперь уже чисто из спортивного интереса. Не могли бы Вы поподробнее её описать. Я понимаю, что код Вы набирать не будете. Просто словами опишите, если не трудно конечно. Я свой скрипт сюда вставлял. Я его написал так, как понял идею, но видать что-то упустил. Я так же понимаю. что писать длинные тексты здесь никто не любит, поэтому опишу сам как я понял, а Вы может укажете на ошибки или нюансы. 1. Через ajax с главной странице post-запросом вызываю функцию из другого php-файла (назовем его "первый"). 2. Вызванная функция методом require подключаю ещё один скрипт, назовем его "второй". 3. Из второго скрипта вызывается функция в которой работает длительный цикл примерно от 1 до 30 000, время работы около 1,5 минут. 4. В этом цикле я организовываю счетчик и записываю его в переменную сессии. 5. На главной странице, с помощью js запускаю таймер, который раз в 2 секунды направляет post-запрос первому файлу и получает в ответ значение переменной сессии, которую выводит на главной странице. Это я попытался реализовать в своем тестовом скрипте. Но он не заработал. Доступа к переменной сессии получить не удалось. Да, конечно, если поставить вызов var_dump() во втором скрипте то доступ появляется, ну или любое внешнее прерывание процесса, но мне этого делать не надо. Мне надо реализовать асинхронный вывод на страницу значений переменной цикла, причем цикл должен работать во втором скрипте, а не на главной странице.
дык я привёл код. это весь код, ну разве что session_start() ещё перед ними. --- Добавлено --- на js в консоль можно дампить переменные через console.log()
Ладно, куда вставлять этот код, я ничего не понимаю. Например мой скрипт, который я привел выше. И что такое 'key' и 'val' применительно к моему коду.
в отдельные два файла php. блин, чувак, тебе надо просто прочитать про PHP хоть одну сраную книжку =)
сессия это массив по сути. ты знаешь название элемента массива, обращаешься к нему по этому строковому ключу. Вот тебе код, который будучи исполнен позволит присваивать любое значение любому элементу сессии. Руками. Через урл. Ты можешь при дебаге тупо вбивать руками урл и в сессию будет втыкаться переданное значение по этому ключу. --- Добавлено --- как ты вообще работаешь с сессией, если ты этого не понимаешь? Может у тебя в этом косяк. Покажи код, где у тебя обработчик ajax запроса.