Всем привет,
помогите пожалуйста!
Есть страница с кодом и в нем есть функция которая делает scrape запрос на другой сервер, к этому файлу с функцией идет ajax запрос и есть моменты когда время выполнения этой функции превышает лимит в 30 секунд ...
Хотел бы решить как-то эту проблему, Надо сделать тайм-аут на время выполнения этой функции. Если функции выполняется больше (10 секунд) то остановиться и продолжить выполнение файла, а если диапазон выполнения меньший или равный 10 секундам то продолжить работу функции и выполнения последующего кода.
Помогите сделать! НЕ шарю как сделать!
1. bt_corp - 27 Октября, 2011 - 00:34:45 - перейти к сообщению
2. DeepVarvar - 27 Октября, 2011 - 01:00:37 - перейти к сообщению
Не совсем понятно где этот таймаут нужен - в php или в js?
Сразу просветить.
PHP выполняется в одном потоке и вы не сможете сделать разветвление для режима работы в виде модуля Apache.
А т.к. ф-ция(-и) которую(-ые) вы используете для коннекта с другим сервером является "атомарным" действием, в однопоточном режиме невозможно получить сведения о состоянии процесса.
В вашем случае может помочь вариант разделения логики на два отдельных php-файла.
В начале работы отправляете ajax-запрос к первому, который "долгий".
Если через 10 сек от него все еще нет ответа, шлете запрос на второй файл, что мол вот дефолтные значения т.к. я ответа от брата не получил.
Если ответ от первого пришел, шлете результат второму.
bt_corp пишет:
Есть страница
bt_corp пишет:
к этому файлу
bt_corp пишет:
Ф-ции в js или в php?время выполнения этой функции
bt_corp пишет:
Надо сделать тайм-аут на время выполнения этой функции
Сразу просветить.
PHP выполняется в одном потоке и вы не сможете сделать разветвление для режима работы в виде модуля Apache.
А т.к. ф-ция(-и) которую(-ые) вы используете для коннекта с другим сервером является "атомарным" действием, в однопоточном режиме невозможно получить сведения о состоянии процесса.
В вашем случае может помочь вариант разделения логики на два отдельных php-файла.
В начале работы отправляете ajax-запрос к первому, который "долгий".
Если через 10 сек от него все еще нет ответа, шлете запрос на второй файл, что мол вот дефолтные значения т.к. я ответа от брата не получил.
Если ответ от первого пришел, шлете результат второму.
3. bt_corp - 27 Октября, 2011 - 01:11:23 - перейти к сообщению
Ф-ции в php!
Понятно, попробую ваш вариант,
спасибо!
Понятно, попробую ваш вариант,
спасибо!
4. DeepVarvar - 27 Октября, 2011 - 01:15:49 - перейти к сообщению
Вот типовой js:
CODE (javascript):
скопировать код в буфер обмена
скопировать код в буфер обмена
- var c,data1 = {/* тут данные запроса к долгому */},
- data2 = {/* а тут дефолт для второго, его заменят если будет ответ */};
- function send1() {
- c = setTimeout('send2();',10000);
- $.get("script1.php",data1,function(ans1){data2 = ans1;});
- }
- function send2() {
- clearTimeout(c);
- $.get("script2.php",data2,function(ans2){alert(ans2);});
- }
- send1();