Many, many moons ago I wrote a PHP daemon which ran endlessly in the background on a client system that received instructions by polling a server and then performed various file I/O actions in response. For what it's worth, here's the relevant portion of the code that allowed this to run as a daemon, i.e. a background PHP process:
// (Note:
// The writeLog() function has been set up previously and is a
// trivial function that adds timestamped lines into a logfile.)
$PIDfile='/tmp/myPID'; // Store process ID in this file
// If a deamon is already running, display its PID and abort:
if (file_exists ($PIDfile)) {
if (is_readable ($PIDfile))
die ($PIDfile . " already exists, PID=" .
file_get_contents ($PIDfile) . " (stale PID file?)\n");
else
die ($PIDfile . " already exists, but is not readable.\n");
}
// Set execution directives if we're running a PHP version prior to 5.3.0
// (ticks are deprecated as of PHP5.3.0 and will be removed from PHP6.0.0):
if (version_compare (PHP_VERSION, '5.3.0', '<'))
declare (ticks = 1);
// Fork off the background (daemon) process:
$pid = pcntl_fork ();
if ($pid == -1) {
die ("Fatal: unable to fork.\n");
} elseif ($pid)
exit (); // We are the parent process
// If we arrive at this point, we are the child process.
// Detach from the controlling terminal:
if (posix_setsid () == -1)
die ("Fatal: unable to detach from terminal.\n");
// Register child PID:
$posid = posix_getpid ();
$fp = fopen ($PIDfile, "w");
fwrite ($fp, $posid);
fclose ($fp);
// Set up signal handlers:
pcntl_signal (SIGTERM, "SIGhandler");
pcntl_signal (SIGHUP, "SIGhandler");
// Log successful deamonization:
writeLog ("Daemon spawned, PID = " . $posid);
// Daemon payload code starts here:
while (1) {
// Do all kinds of interesting stuff that does not require any user
// input or screen output. In my case this consisted of file I/O and
// communication with a server using various sockets.
}
// EOF
Hope this helps! Needless to say the above is a copy-and-paste of years old stuff from my code morgue and is supplied without any warranty or guarantee whatsoever. Enjoy!