Некорректная отработка register_shutdown_function()

  • Автор темы constant
  • Дата начала

constant

Guest
Некорректная отработка register_shutdown_function()

Перед отправкой файла пользователю регистрирую через register_shutdown_function() свою функцию, для проверки закачал ли пользователь себе файл или нет. Вот так:

register_shutdown_function(check())
...
отправка файла
...

Непосредственно перед самой отправкой заголовков на отдачу скриптом файла - во временной папке создаю файл по имени IP в котором пока идет отдача файла по частям записываю сколько байт было отослано пользователю. Таким образом я всегда могу знать качает ли сейчас пользователь что-то и сколько он скачал. Проблема в том, что в функции check() не отрабатывается удаление это временного файла - хотя прекрасно отрабатывает отслеживание connection_aborted()

function check() {
if (@file_exists($GLOBALS["temp_path"].md5(getENV('REMOTE_ADDR')))) {@unlink($GLOBALS["temp_path"].md5(getENV('REMOTE_ADDR')));}
if (connection_aborted()) { $this->downloaded = false; } else {$this->downloaded = true;}

}

Я проверял - файл есть. Права на него есть (все работает на Windows под Администратором). Но почему-то не удаляется.
 

vitus

мимо проходил
int register_shutdown_function ( string func)
вчитываемся в сигнатуру
 

BRat

o_0
register_shutdown_function("check");
?

-~{}~ 04.03.05 06:26:

$GLOBALS["temp_path"].md5(getENV('REMOTE_ADDR')
ты саму эту переменную проверял?

перенеси md5 из расширения в имя файла.
 

constant

Guest
Автор оригинала: BRat
register_shutdown_function("check");
?

-~{}~ 04.03.05 06:26:

$GLOBALS["temp_path"].md5(getENV('REMOTE_ADDR')
ты саму эту переменную проверял?

перенеси md5 из расширения в имя файла.
$GLOBALS["temp_path"]="c:/temp/";
md5(getENV('REMOTE_ADDR') - это не расширение файла - а имя. Т.е c:/temp/fdadfjxheydkdhxnskdh263783 - и файл создается - я проверял.
 

BRat

o_0
не работает только в win или на юниксах тоже?

-~{}~ 04.03.05 07:26:

кстати если снять с unlink собачку может многое проясниться...
 

constant

Guest
Автор оригинала: BRat
не работает только в win или на юниксах тоже?

-~{}~ 04.03.05 07:26:

кстати если снять с unlink собачку может многое проясниться...
Не работает ни в Windows - ни в FreeBSD.
А собачку я естественно снимал - ошибок не выводит, в логах тоже нет ничего. Такое впечатление что он в этот кусок просто не попадает. Но! Строка if (!connection_aborted()) {$this->downloaded=true;} else {$this->downloaded=false;} срабатывает. Получается что эта функция вызывается но именно строка с удалением файла не обрабатывается.

-~{}~ 04.03.05 12:21:

Автор оригинала: BRat
не работает только в win или на юниксах тоже?

-~{}~ 04.03.05 07:26:

кстати если снять с unlink собачку может многое проясниться...
Только что провел интересный эксперимент - поставил имя конкретного файла для удаления - unlink('c:/tmp/tmp.tmp') в function check() - файл удалился т.е register_shutdown_function() отработал нормально. А если подставляю динамически создаваемое имя файла - не срабатывает. Странно.
 
Сверху