Вопрос про register_shutdown_function

dimases

Новичок
Вопрос про register_shutdown_function

В моем проекте необходимо работать с загрузкой и обработкой больших файлов. Поэтому, для правильности транзакции, при отключения пользователеля все обработанные, но еще не сформированные файлы должны быть удалены.
Таким образом, мне надо определить завершающую функцию, которая должна будет удалить созданные в процессе работы файлы. Что я сделал:

PHP:
function unlink_files(){
 global $success;
 if (connection_aborted() && count($success)>0)  foreach ($success as $value){
     @unlink($value);
   }
}


register_shutdown_function('unlink_files');
$success должна представлять собой пути к файлам, которые уже закачены:
Array
(
[0] => data/users/11/uploaded/ph_11339862001.jpg
[1] => data/users/11/show/ph_11339862001.jpg
[2] => data/users/11/preview/ph_11339862001.jpg
[3] => data/users/11/uploaded/ph_11339862082.jpg
[4] => data/users/11/show/ph_11339862082.jpg
[5] => data/users/11/preview/ph_11339862082.jpg
[6] => data/users/11/uploaded/ph_11339862173.jpg
[7] => data/users/11/show/ph_11339862173.jpg
[8] => data/users/11/preview/ph_11339862173.jpg
)

И что-то при нажатии STOP оно не работает.
Кто-нибудь в курсе?
 

_RVK_

Новичок
Stop не завершает работу скрипта, а лишь закрывает сокет.
 

dimases

Новичок
ага... вот это интереснее, хорошо, а если человек нажал стоп, то как это проверить и соответственно обработать? if (connection_aborted()) подойдет в конце?

или же просто связь потерялась?
 

dimases

Новичок
http://ru.php.net/manual/ru/functio...-user-abort.php

http://ru.php.net/manual/ru/feature...on-handling.php
Я это все прочитал. Там вообщем написано, что как круто, что так можно. Логика ясна, в действии не работает.
Еще раз задачу: если произошел обрыв, то вместо записи в БД удалить все файлы.
Можете пример привести?
Вариант
PHP:
if (connection_status()==3){
  foreach ($success as $value){
    @unlink($value);
  }
} else {
// -> DB
}
что-то тоже не удаляет.
 

dimases

Новичок
_RVK_

Отладка на виндах (Denwer). Работать будет на фре.

SiMM
Господа, пожалуйста, не принимайте меня за конченного идиота, FM уже давно прочел, поэкперементировал и так и так, и только после этого пошел за гласом народа. А вы мне ссылки лепите, которые я и так не плохо знаю.

для начала удалите файлы без register_shutdown_functions
Что значит удалить? register_shutdown_functions должна быть в первичном файле сборки?
 

_RVK_

Новичок
SiMM
@ тут как раз оправдана. Лищняя проверка == лишнее обращение к диску, а смысла вней ноль. Все равно предпринять ничего не сможешь. А так хоть логи забиваться не будут. Думаю проблемма не в этом. Есть мнение что на Windows сервер не прибивает скрипт при разрыве сокета. Но документального подтверждениия 'этому найти не сумел

-~{}~ 08.12.05 00:38:

dimases
Попробуй на фре. И не нервничай. Кто знает что ты читал, а за что спасибо скажешь?
 

dimases

Новичок
Причем удалять-то все удаляет, если не ставить условие if (connection_status()==3)
а собаки - так, на всякий случай.

-~{}~ 08.12.05 00:47:

Есть мнение что на Windows сервер не прибивает скрипт при разрыве сокета.
То что он не рубит скрипт - это я отлично вижу - файлы создаются после обрыва.
Вообще, конструкция вида:
if (connection_status()==3){
// Unlink
} else {
// -> DB
}

верна? Или надо как-то по другому делать? Кто такого вида операции уже делал?
 
Сверху