Почему я не могу удалить файл из дочернего процесса демона PHP?

Я создаю простой скрипт демона PHP, используя класс php Daemon, предоставленный по адресу:
http://www.phpclasses.org/browse/file/8958.html

Я застрял в этом классе, лучше или хуже, и у меня не так много времени, чтобы это сделать; поэтому для того, чтобы отдавать демону пользовательские команды, я просто использую командный файл, расположенный в каталоге / tmp. Однако мне нужно удалить этот файл после того, как демон обработает все содержащиеся в нем команды.

Однако, когда я пытаюсь «отсоединить» файл в PHP, операция отсоединения просто терпит неудачу, и файл остается. Я точно знаю, что это не проблема с разрешениями. На самом деле я совершенно уверен, что это как-то связано с тем фактом, что каждая «итерация» демона порождается как дочерний процесс, и этот подпроцесс каким-то образом не должен иметь разрешения на удаление файлов.

Мой вопрос: почему PHP не может удалить этот файл и что я могу с этим поделать?


person Brian Lacy    schedule 20.01.2010    source источник
comment
Нет сообщения об ошибке, и я почти уверен, что использую error_reporting (E_ALL & E_STRICT). Но я присваиваю результат отсоединения переменной $ test, затем var_dump ($ test) и получаю bool (false).   -  person Brian Lacy    schedule 20.01.2010


Ответы (1)


/tmp обычно имеет установленный бит липкости, поэтому я считаю, что только пользователь, который разместил файл, может удалить его. Ваши дочерние процессы выполняются под тем же пользователем, что и родительский (apache, www и т. Д.)? Какой экземпляр процесса создал файл?

person prodigitalson    schedule 20.01.2010
comment
Я запускаю скрипт как php daemonscript.php из командной строки как root. Я не могу себе представить, что начальный процесс, загружающий класс демона, мог бы порождать дочерний элемент как что-либо, кроме root. - person Brian Lacy; 20.01.2010
comment
я тоже не могу - но вы можете проверить это. - person prodigitalson; 20.01.2010
comment
Вау, это интересно. В целях тестирования я помещаю задержку сна (15) в начало моего скрипта. Когда я впервые запускаю свой скрипт, а затем запускаю его, я вижу процесс php, а пользователь - root. Через 15 секунд запускается новый процесс, и пользователю теперь 99! Есть идеи, как это исправить? - person Brian Lacy; 20.01.2010
comment
Похоже, что в этом классе есть переменные для uid и gid, и они по умолчанию равны 99. я бы попытался установить их соответствующим образом. - person prodigitalson; 20.01.2010