[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: что будет если закрыть страницу выполняющую код
Страницы: 1, 2
Strannik
Добрый день. К примеру есть страница, на ней мы нажимаем кнопку и методом ajax запускаем выполнение php скрипта(к примеру скрипт на 10 000 строк). Скрипт выполняется на другой странице(в браузере она не открывается), на которую мы послали команду по ajax.

Вопрос: что будет если закрыть страницу с которой отправляли команду? Выполнится ли скрипт или он остановится?

P.S.: сорри за глупый вопрос)
inpost
в теории должен остановиться, если ты не отключил через ignore_user_about

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
Игорь_Vasinsky
скорее всего болт будет, но есть http://php.net/manual/en/function.ignore-user-abort.php wink.gif

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Игорь_Vasinsky
блин.. как не успел biggrin.gif

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Strannik
т.е. мы ставим
ignore_user_abort(true);

и если пользователь закрывает браузер, то код все равно будет выполнен?
inpost
Strannik
да

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
pak
Цитата (Strannik @ 14.08.2012 - 15:43)
т.е. мы ставим
ignore_user_abort(true);

и если пользователь закрывает браузер, то код все равно будет выполнен?

надо это запомнить, а где это обычтно пригодиться ?
inpost
pak
много где. Особенно где страницы выполняет множество действий и тебе не хочется, что спустя 1 минуту её закрыли, типо не работает smile.gif

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
pak
например загрузка картинок)
Strannik
попробовал, работает, только скрипт не до конца выполняется

в php.ini
настройки
max_execution_time = 144000
max_input_time = 144000

есть ли еще параметры которые могут прекратить работу скрипта?
inpost
set_time_limit(0);


_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
Strannik
inpost
спасибо, пока проскочил.
Strannik
импорт заглох на 2030 строке...(((
inpost
Strannik
А ты вывод ошибок в файл помести. И что значит "заглох"? Может соединение с БД закрылось? И вообще, для импорта и экспорта самих таблиц используй sypex dumper

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
Strannik
делаю такую штучку:


ignore_user_abort(true);
set_time_limit(0);
$i=0;
conn();
$sql_dump="SELECT * FROM `dump` WHERE `id`='1'";
$res_dump=mysql_query($sql_dump);
if(!$res_dump||mysql_num_rows($res_dump)<1){$sql_dump2="INSERT INTO `dump` (`text`,`status`) VALUES ('Идет обновление базы данных...','yes')";}else{$sql_dump2="UPDATE `dump` SET `text`='Идет дамп...',`status`='yes' WHERE `id`='1'";}
$res_dump2=mysql_query($sql_dump2);
$r1='';$r2='';$r3='';$r4='';
$filename="csv.csv";
$handle = fopen("$filename", "r");
$count_rows=0;
$import='';
$error1='';
$error2='';
$error3='';
$error4='';
while (($data = fgetcsv($handle, 1000000, ";")) !== FALSE)
{
$count_rows++;
$oldperiod = strtotime($data[1]);
$newperiod = date('Y-m-d H:i:s', $oldperiod);

$olddate_create = strtotime($data[15]);
$newdate_create = date('Y-m-d H:i:s', $olddate_create);

$oldperiodmeter_reading = strtotime($data[13]);
$newperiodmeter_reading = date('Y-m-d H:i:s', $oldperiodmeter_reading);

if($data[2]!=''){
$sql0="SELECT * FROM `balans` WHERE `period`='$newperiod' AND `idn`='$data[2]'";
$res0=mysql_query($sql0);
if(!$res0||mysql_num_rows($res0)<1){$importone="INSERT INTO `balans`(`idn`, `period`, `start_saldo`, `earn_m`, `earn_r`, `pay`, `finish_saldo`) VALUES ('$data[2]', '$newperiod', '$data[5]', '$data[7]', '$data[6]', '$data[8]', '$data[9]')";}
else{$importone="UPDATE `balans` SET `start_saldo` = '$data[5]', `earn_m` = '$data[7]', `earn_r` = '$data[6]', `pay` = '$data[8]', `finish_saldo` = '$data[9]' WHERE `idn` ='$data[2]' AND `period`='$newperiod'";}
$res_importone=mysql_query($importone) or die(mysql_error($res_importone));//$error1.=mysql_error($res_import1);
$sql0e="SELECT * FROM `equipment` WHERE `idn`='$data[2]'";
$res0e=mysql_query($sql0e);
if(!$res0e||mysql_num_rows($res0e)<1){if($data[10]!='0'){$importtwo="INSERT INTO `equipment`(`idn`, `type`, `model`, `date_create`, `serial_number`, `date_of_sealing`, `seal_number`, `state`) VALUES ('$data[2]', '', '$data[11]', '$newdate_create', '$data[12]', '', '', '')";$res_importtwo=mysql_query($importtwo) or die(mysql_error($res_importtwo));}}
else{$importtwo="UPDATE `equipment` SET `type`='',`model`='$data[11]',`date_create`='$newdate_create',`serial_number`='$data[12]',`date_of_sealing`='', `seal_number`='',`state`=''";$res_importtwo=mysql_query($importtwo) or die(mysql_error($res_importtwo));}
$sqlimport_meter_reading="SELECT * FROM `meter_reading` WHERE `value` = '$data[14]' AND `period`='$newperiodmeter_reading' AND `idn`='$data[2]'";
$resimport_meter_reading=mysql_query($sqlimport_meter_reading);
if(!$resimport_meter_reading||mysql_num_rows($resimport_meter_reading)<1)
{if($data[10]=='1'&&$data[13]!=''){$importtree="INSERT INTO `meter_reading`(`idn`, `period`, `value`, `pay_type`) VALUES ('$data[2]', '$newperiodmeter_reading', '$data[14]', '$data[10]')";$res_importtree=mysql_query($importtree) or die(mysql_error($res_importtree));//$error3.=mysql_error($res_import3);
}}
$sql="SELECT * FROM `user_info` WHERE `account` = '$data[2]'";
$res=mysql_query($sql);
if(!$res||mysql_num_rows($res)<1)
{$importfour="INSERT INTO `user_info`(`fio`, `account`, `living_space`, `occupancy`, `adress`, `telefone`, `mobile`, `email`, `icq`, `password`, `password_temp`, `status`) VALUES ('".mysql_real_escape_string($data[3])."', '$data[2]', '', '', '$data[4]', '', '', '', '', '', '', 'user')";}
else{$importfour="UPDATE `user_info` SET `fio` = '$data[3]', `adress` = '$data[4]' WHERE `account` ='$data[2]'";}
$res_importfour=mysql_query($importfour) or die(mysql_error($res_importfour));//$error4.=mysql_error($res_import4);*/
}$i++; echo $i.'<br>';
}


скрипт обрабатывает файл до 2187 строки и останавливается,
т.е. просто пишет цифры в ряд до 2187:
1
2
3
....
2187

а почему понять пока не могу...
кто знает в чем может быть причина?

P.S.: смотрел логи сервера, ошибок нет.
P.P.S.: код конечно слишком накрученный, но по-другому никак...
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.