connection_aborted()

gudzon

Guest
connection_aborted()

Подскажите пожалуйста почему не срабатывает subj в следующем коде:
<?php
ignore_user_abort(true);
# соединение с базой
echo "connected...<br>";
flush();
sleep(3);
# в этом месте нажимаю стоп в броузере
if (connection_aborted()) {
# insert или update ...
} else {
# продолжение нормальной работы
}
?>
insert не делается :(
 

gudzon

Guest
Но тогда функция зарегистрированная register_shutdown_function будет выполнятся всегда, а я хотел чтобы только при отключении клиента происходили определенные действия.
 

tony2001

TeaM PHPClub
варианты:
1) инсерт выдает ошибку, но ты ее не видишь, т.к. вывод уже закончился
2) убери sleep и поставь вечный цикл. у меня именно так работает.
 

gudzon

Guest
1) ошибки в инсерте нет - проверил отдельно.
2) сделал с циклом вот так:
<?php
ignore_user_abort(true);
$conn=ocilogon("me","me","ORA");
echo "connected...<br>";
flush();
while(1!=0) {
# нажимаю стоп
}
if (connection_aborted()) {
$q="insert into tmp values('test')";
$stmt=ociparse($conn,$q);
ociexecute($stmt);
} else {
echo "ok";
}
?>
тот же самый эффект - инсерта не происходит
 

tony2001

TeaM PHPClub
нет, не совсем так.
я не слишком хорошо понимаю принцип функционирования Connect handling, но у меня работает вот так:
PHP:
while(1!=0) {
  if (connection_aborted()) {
    $q="insert into tmp values('test')";
    $stmt=ociparse($conn,$q);
    ociexecute($stmt);
  } 
}
 

gudzon

Guest
все равно не помогло - может это какой-то глюк данной версии php(4.3.2) ?
 

tony2001

TeaM PHPClub
хм.
есть такое дикое предположение, что к этом моменту могут быть закрыты все коннекты.
попробуй отладить на файле - открывать его на запись и писать в него при connection_aborted();.
 

gudzon

Guest
Сделал вот так:
<?php
ignore_user_abort(true);
while(1!=0) {
if (connection_aborted()) {
$h=fopen("file.txt","a+");
fwrite($h,"qwertyuiop");
fclose($h);
}
}
?>
в файл ничего не записалось.
права доступа к файлу поставил 777.
 

tony2001

TeaM PHPClub
вот это у меня работает.
PHP:
<?
ignore_user_abort(true);
echo "connected...<br>";
flush();
while (true) {
    if (connection_aborted()) {
        $fp = fopen("/www/test.txt",'a');
        fwrite($fp,'sdfsdf');
        fflush($fp);
        fclose($fp);
        exit;
    }
    else {
        echo ".";
    }
}
?>
 

gudzon

Guest
у меня почему-то даже твой код ничего не пишет в файл :(
 

gudzon

Guest
извени - с твоим кодом заработало - просто я не посмотрел,
что у тебя имя файла test.txt, а не file.txt и соответствено он просто не создавался даже.
Правда не понятно почему тогда закрывается соединение с ораклом...
спасибо за помошь.
 
Сверху