Виндовый диалог копирования файлов хотя бы чем-то оперирует, делит объем на скорость. А тут - поди угадай, когда сервер изволит повернуться к тебе лицом.
Да я все понимаю, но куда деваться, значения получаю вот так Код (PHP): $str = 'status|d:95;country|s:2:"RU";city|s:3:"MOW";zone|s:3:"ALL";date_in|s:10:"30.09.2014";date_out|s:10:"01.10.2014";rooms|s:1:"1";adults1|s:1:"1";d_in|s:8:"20140930";d_out|s:8:"20141001";'; $arr = explode(';', $str); foreach ($arr as $key=>$val) { $a = explode('|',$val); if($a[0]=="status") { $b = explode(':',$a[1]); $status = $b[count($b)-1]; break; } } echo $status; Но проблема осталась в другом теперь, я думал что данные записываются сразу, а как оказалось видимо данные записываются после работы всего скрипта, так что у меня все ровно ничего не получилось)
Ничего не знаю, у меня код нормально работает, возвращает правильный массив Код (PHP): Array ( [status] => 95 [country] => RU [city] => MOW [zone] => ALL [date_in] => 30.09.2014 [date_out] => 01.10.2014 [rooms] => 1 [adults1] => 1 [d_in] => 20140930 [d_out] => 20141001 [] => )
В общем смысл такой, пользователь заполняет форму, и относительно этих данных с формы формируется список товаров, список товаров равен количеству запросов. Вот от количества запросов будет зависеть время работы скрипта, то есть через API в среднем обработка одного запроса занимает от 1 до 3 секунд отсюда и время получается, как сервер обработает весь список, отдает результат клиенту, время отдачи клиенту очень маленькое, менее секунды.
В общем рассказывал тут, расскажу еще раз. В общем пишу модуль для diafanCMS, там пользователь через форму отправляет данные на сервер. На сервере относительно этих данных формируется список товара, далее мне нужно информацию о товаре запросить через API, каждый товар запрашивается отдельно, то есть количество товара ровно количеству запросов через API на сторонний сервис. Так вот сторонний сервис через API возвращает мне информацию о товаре, время такого ответа в среднем 1-3 секунды. А только после того как мой скрипт обработал весь список товара и получил информацию о каждом из них, отдает результат в виде HTML пользователю. В итоге пользователь отправляет форму и просто видит как страница грузится...эта страница грузится где то минуты 3, нормальный пользователь подумав что "что то зависло" просто уйдет со странице, по этому я захотел сделать прогресс бар, который будет отслеживать процент выполнения того скрипта. Я в начале подумал что это можно как то реализовать средствами JS и поэтому создал ту тему. Потом подумал и решил это реализовать так: Я знаю сколько всего будет запросов, а каждый запрос выполняется в цикле. Получается процент выполнения можно было бы высчитать по обычной формуле (n/count)*100=x% Я решил в конце каждого круга цикла считать это значение и записывать в сессию, а в это время на той странице с формой, (пока новая страница не открылась, на старой все скрипты еще работают) при событии submit аяксом опрашивать какой нибудь скриптик в котором просто написанно Код (PHP): session_start(); echo $_SESSION['status']; И тут у меня началось самое интересное, скрипт вместо процента почему то начал возвращать ошибку что нет такой переменной, хотя я ее записывал в том цикле. После долгих поисков ошибки, я обнаружил что diafanCMS хранит сессию в базе данных вот в таком виде: Код (Text): status|d:95;country|s:2:"RU";city|s:3:"MOW";zone|s:3:"ALL";date_in|s:10:"30.09.2014";date_out|s:10:"01.10.2014";rooms|s:1:"1";adults1|s:1:"1";d_in|s:8:"20140930";d_out|s:8:"20141001"; Стандартные способы собрать эту строку в массив не помогли, я тогда написал свой скрипт, который из всей строки вытягивает эту переменную $_SESSION['status'],а главное ее значение, больше мне ничего не надо было... Все логически должно было заработать, но как оказалось что diafanCMS записывает сессию в базу,я так понимаю, после выполнения всего скрипта... то есть в начале у меня эта переменная ровна 0, а потом сразу 99... Вот в общем и полное описание моей проблемы, как это обойти, я пока не придумал)
Re: Строку в массив Господи... параллельно ты не можешь это грузить? можно наверняка. предлагаю упереться на параллельность.
Так, а запросы ты шлешь последовательно? В каком виде они отправляются? Может можно их за одну итерацию отдать?
Если последовательно, то все ещё проще, приняв за 100% все обработанные запросы и при обработке n-количества отдавать в свистелку-перделку "загрузил 10%, жди друг!". Если совсем серьёзно, то "честно" отследить и выставить остаточное время можно только для загрузки файлов через session.upload_progress.enabled
потому что на страницу, в которой идет работа с медленной API, происходит обычный переход, и эта страница запрашивается путем отправки на нее формы, без каких либо аяксов.