note 101093 added to function.inotify-init

From: Date: Thu, 25 Nov 2010 16:42:25 +0000
Subject: note 101093 added to function.inotify-init
Groups: php.notes 
Request: Send a blank email to php-notes+get-174358@lists.php.net to get a copy of this message
Example for tailing a file (like tail -f) using inotify. <?php /** * Tail a file (UNIX only!) * Watch a file for changes using inotify and return the changed data * * @param string $file - filename of the file to be watched * @param integer $pos - actual position in the file * @return string */ function tail($file,&$pos) { // get the size of the file if(!$pos) $pos = filesize($file); // Open an inotify instance $fd = inotify_init(); // Watch $file for changes. $watch_descriptor = inotify_add_watch($fd, $file, IN_ALL_EVENTS); // Loop forever (breaks are below) while (true) { // Read events (inotify_read is blocking!) $events = inotify_read($fd); // Loop though the events which occured foreach ($events as $event=>$evdetails) { // React on the event type switch (true) { // File was modified case ($evdetails['mask'] & IN_MODIFY): // Stop watching $file for changes inotify_rm_watch($fd, $watch_descriptor); // Close the inotify instance fclose($fd); // open the file $fp = fopen($file,'r'); if (!$fp) return false; // seek to the last EOF position fseek($fp,$pos); // read until EOF while (!feof($fp)) { $buf .= fread($fp,8192); } // save the new EOF to $pos $pos = ftell($fp); // (remember: $pos is called by reference) // close the file pointer fclose($fp); // return the new data and leave the function return $buf; // be a nice guy and program good code ;-) break; // File was moved or deleted case ($evdetails['mask'] & IN_MOVE): case ($evdetails['mask'] & IN_MOVE_SELF): case ($evdetails['mask'] & IN_DELETE): case ($evdetails['mask'] & IN_DELETE_SELF): // Stop watching $file for changes inotify_rm_watch($fd, $watch_descriptor); // Close the inotify instance fclose($fd); // Return a failure return false; break; } } } } // Use it like that: $lastpos = 0; while (true) { echo tail($file,$lastpos); } ?> ---- Server IP: 69.147.83.197 Probable Submitter: 84.184.93.219 ---- Manual Page -- http://www.php.net/manual/en/function.inotify-init.php Edit -- https://master.php.net/note/edit/101093 Del: integrated -- https://master.php.net/note/delete/101093/integrated Del: useless -- https://master.php.net/note/delete/101093/useless Del: bad code -- https://master.php.net/note/delete/101093/bad+code Del: spam -- https://master.php.net/note/delete/101093/spam Del: non-english -- https://master.php.net/note/delete/101093/non-english Del: in docs -- https://master.php.net/note/delete/101093/in+docs Del: other reasons-- https://master.php.net/note/delete/101093 Reject -- https://master.php.net/note/reject/101093 Search -- https://master.php.net/manage/user-notes.php

« previous php.notes (#174358) next »