• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

PHP inotify_read函数代码示例

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

本文整理汇总了PHP中inotify_read函数的典型用法代码示例。如果您正苦于以下问题:PHP inotify_read函数的具体用法?PHP inotify_read怎么用?PHP inotify_read使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。



在下文中一共展示了inotify_read函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的PHP代码示例。

示例1: main_loop

/**
 * Simple tail program using the inotify extension
 * Usage: ./tail.php file
 */
function main_loop($file, $file_fd)
{
    $inotify = inotify_init();
    if ($inotify === false) {
        fprintf(STDERR, "Failed to obtain an inotify instance\n");
        return 1;
    }
    $watch = inotify_add_watch($inotify, $file, IN_MODIFY);
    if ($watch === false) {
        fprintf(STDERR, "Failed to watch file '%s'", $file);
        return 1;
    }
    while (($events = inotify_read($inotify)) !== false) {
        echo "Event received !\n";
        foreach ($events as $event) {
            if (!($event['mask'] & IN_MODIFY)) {
                continue;
            }
            echo stream_get_contents($file_fd);
            break;
        }
    }
    // May not happen
    inotify_rm_watch($inotify, $watch);
    fclose($inotify);
    fclose($file_fd);
    return 0;
}
开发者ID:diesse,项目名称:php7-inotify,代码行数:32,代码来源:tail.php


示例2: fire

 /**
  * Execute the console command.
  *
  * @return mixed
  */
 public function fire()
 {
     $watches = array();
     $in = inotify_init();
     // add watches starting from root directory
     $root = Path::fromRelative('');
     $this->addWatches($in, $root, $watches);
     printf("\nReading for events\n");
     while (true) {
         $events = inotify_read($in);
         foreach ($events as $event) {
             $path = $watches[$event['wd']];
             $expanded = $this->expandMask($event['mask']);
             $eventName = trim(implode(', ', $expanded), ', ');
             // if the event has a name attached, then index that
             if ($event['name']) {
                 $newPathName = $path->getPathname() . '/' . $event['name'];
                 $newPath = new Path($newPathName);
                 Indexer::index($newPath, 1);
                 // this may be a new directory, so add a watch to it anyway
                 if ($newPath->exists() && $newPath->isDir()) {
                     try {
                         $wd = inotify_add_watch($in, $newPath->getPathname(), $this->computedMask);
                         $watches[$wd] = $newPath;
                     } catch (Exception $e) {
                         echo 'Caught exception: ', $e->getMessage(), "\n";
                     }
                 }
             } else {
                 // event must apply to this directory, so index it, 1 level deep
                 Indexer::index($path, 1);
             }
         }
     }
 }
开发者ID:qqueue,项目名称:MangaIndex,代码行数:40,代码来源:WatcherCommand.php


示例3: start

 public function start()
 {
     $this->stop = false;
     $fd = inotify_init();
     $wd = inotify_add_watch($fd, $this->path, IN_ALL_EVENTS);
     $read = [$fd];
     $write = null;
     $except = null;
     stream_select($read, $write, $except, 0);
     stream_set_blocking($fd, 0);
     while (true) {
         if ($this->stop) {
             inotify_rm_watch($fd, $wd);
             return fclose($fd);
         }
         if ($events = inotify_read($fd)) {
             foreach ($events as $details) {
                 if ($details['name']) {
                     $target = rtrim($this->path, '/') . '/' . $details['name'];
                 } else {
                     $target = $this->path;
                 }
                 $file = new \SplFileInfo($target);
                 switch (true) {
                     case $details['mask'] & IN_MODIFY:
                         $this->modify($file);
                         break;
                 }
                 $this->all($file);
             }
         }
     }
 }
开发者ID:mbfisher,项目名称:watch,代码行数:33,代码来源:InotifyWatcher.php


示例4: watch

 /**
  * @param array         $directories
  * @param \Closure|null $callback
  * @return Watcher
  * @throws \RuntimeException
  */
 public function watch(array $directories, \Closure $callback = null)
 {
     foreach ($directories as $directory) {
         if (!is_dir($directory)) {
             $this->clearWatch();
             throw new \RuntimeException("[{$directory}] is not a directory.");
         }
         $wd = inotify_add_watch($this->inotify, $directory, $this->events);
         $this->watchDir[$directory] = $wd;
     }
     $this->callback = $callback;
     // Listen modify.
     \swoole_event_add($this->inotify, function () use($callback) {
         $events = inotify_read($this->inotify);
         if (!$events) {
             return;
         }
         foreach ($events as $event) {
             if (!empty($event['name'])) {
                 echo sprintf("[%s]\t" . sprintf('["%s"] modify', $event['name']) . PHP_EOL, date('Y-m-d H:i:s'));
             }
         }
         if (is_callable($callback)) {
             $callback($this);
         }
     });
     return $this;
 }
开发者ID:JanHuang,项目名称:swoole,代码行数:34,代码来源:Watcher.php


示例5: tail

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;
                    break;
                    // File was moved or deleted
                // 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;
            }
        }
    }
}
开发者ID:stawen,项目名称:domovision,代码行数:60,代码来源:knx-function.php


示例6: watch

 /**
  * Check the file system, triggered by timer
  * @return void
  */
 public function watch()
 {
     if ($this->inotify) {
         $events = inotify_read($this->inotify);
         if (!$events) {
             return;
         }
         foreach ($events as $ev) {
             $path = $this->descriptors[$ev['wd']];
             if (!isset($this->files[$path])) {
                 continue;
             }
             $this->onFileChanged($path);
         }
     } else {
         static $hash = [];
         foreach ($this->files as $path => $v) {
             if (!file_exists($path)) {
                 // file can be deleted
                 unset($this->files[$path]);
                 continue;
             }
             $mt = filemtime($path);
             if (isset($hash[$path]) && $mt > $hash[$path]) {
                 $this->onFileChanged($path);
             }
             $hash[$path] = $mt;
         }
     }
 }
开发者ID:kakserpom,项目名称:phpdaemon,代码行数:34,代码来源:FileWatcher.php


示例7: tick

 /**
  * Tick handler
  */
 public function tick()
 {
     $events = inotify_read($this->inotifyStreamDescriptor);
     if (is_array($events)) {
         $this->handleEvents($events);
     }
 }
开发者ID:thinframe,项目名称:inotify,代码行数:10,代码来源:FileSystemWatcher.php


示例8: evaluate

 /**
  * Evaluate Filesystem changes
  *
  * @return mixed
  */
 public function evaluate()
 {
     $this->tracker->clearChangeSet();
     $this->modified = array();
     $inEvents = inotify_read($this->inotify);
     $inEvents = is_array($inEvents) ? $inEvents : array();
     foreach ($inEvents as $inEvent) {
         $this->translateEvent($inEvent);
     }
 }
开发者ID:phpguard,项目名称:listen,代码行数:15,代码来源:InotifyAdapter.php


示例9: getModifiedFiles

 /**
  * 获取更改的文件
  * @return array
  */
 public static function getModifiedFiles()
 {
     // 读取监控事件
     $events = inotify_read(self::$inotifyFd);
     if (empty($events)) {
         return false;
     }
     // 获得哪些文件被修改
     $modify_files = array();
     foreach ($events as $ev) {
         $modify_files[$ev['wd']] = self::$inotifyWatchFds[$ev['wd']];
     }
     return $modify_files;
 }
开发者ID:nangong92t,项目名称:go_src,代码行数:18,代码来源:Inotify.php


示例10: __invoke

 /**
  * Checks all new inotify events available
  * and emits them via evenement
  */
 public function __invoke()
 {
     if (false !== ($events = \inotify_read($this->inotifyHandler))) {
         foreach ($events as $event) {
             // make sure the watch descriptor assigned to this event is
             // still valid. removing watch descriptors via 'remove()'
             // implicitly sends a final event with mask IN_IGNORE set:
             // http://php.net/manual/en/inotify.constants.php#constant.in-ignored
             if (isset($this->watchDescriptors[$event['wd']])) {
                 $path = $this->watchDescriptors[$event['wd']]['path'];
                 $this->emit($event['mask'], array($path . $event['name']));
             }
         }
     }
 }
开发者ID:tufanbarisyildirim,项目名称:react-inotify,代码行数:19,代码来源:Inotify.php


示例11: check_files_change

function check_files_change($inotify_fd)
{
    global $monitor_files;
    // 读取有哪些文件事件
    $events = inotify_read($inotify_fd);
    if ($events) {
        // 检查哪些文件被更新了
        foreach ($events as $ev) {
            // 更新的文件
            $file = $monitor_files[$ev['wd']];
            echo $file . " update and reload\n";
            unset($monitor_files[$ev['wd']]);
            // 需要把文件重新加入监控
            $wd = inotify_add_watch($inotify_fd, $file, IN_MODIFY);
            $monitor_files[$wd] = $file;
        }
        // 给父进程也就是主进程发送reload信号
        posix_kill(posix_getppid(), SIGUSR1);
    }
}
开发者ID:shitfSign,项目名称:workerman-filemonitor-inotify,代码行数:20,代码来源:start.php


示例12: run

 /**
  * @return Result
  */
 public function run()
 {
     /** @noinspection PhpUndefinedFunctionInspection */
     $inotify = inotify_init();
     $watches = $this->createInotifyWatches($inotify);
     stream_set_blocking($inotify, 0);
     while (true) {
         /** @noinspection PhpUndefinedFunctionInspection */
         $events = inotify_read($inotify);
         if ($events) {
             if ($this->clear) {
                 passthru('bash -c clear');
             }
             $this->runTasksForInotifyEvents($events);
         }
         sleep(1);
     }
     $this->shutdownInotify($inotify, $watches);
     return $this->gasp->result()->setStatus(Result::SUCCESS)->setMessage('And now his watch is ended.');
 }
开发者ID:griffbrad,项目名称:gasp,代码行数:23,代码来源:Watch.php


示例13: start

 public function start()
 {
     $this->init();
     $this->fd = fopen($this->path, 'r');
     stream_set_blocking($this->fd, 0);
     $pos = filesize($this->path);
     while (true) {
         $events = inotify_read($this->ifd);
         foreach ($events as $event) {
             switch (true) {
                 case $event['mask'] & self::MASK:
                     fseek($this->fd, $pos);
                     $buf = '';
                     while (!feof($this->fd)) {
                         $buf .= fread($this->fd, 8192);
                     }
                     $this->handler->InModify($buf, $this->filename);
                     $pos = ftell($this->fd);
                     break;
             }
         }
     }
 }
开发者ID:google2013,项目名称:StatsCenter,代码行数:23,代码来源:File.php


示例14: __construct

 /**
  * @param $serverPid
  * @throws NotFound
  */
 function __construct($serverPid)
 {
     $this->pid = $serverPid;
     if (posix_kill($serverPid, 0) === false) {
         throw new NotFound("Process#{$serverPid} not found.");
     }
     $this->inotify = inotify_init();
     $this->events = IN_MODIFY | IN_DELETE | IN_CREATE | IN_MOVE;
     swoole_event_add($this->inotify, function ($ifd) {
         $events = inotify_read($this->inotify);
         if (!$events) {
             return;
         }
         var_dump($events);
         foreach ($events as $ev) {
             if ($ev['mask'] == IN_IGNORED) {
                 continue;
             } else {
                 if ($ev['mask'] == IN_CREATE or $ev['mask'] == IN_DELETE or $ev['mask'] == IN_MODIFY or $ev['mask'] == IN_MOVED_TO or $ev['mask'] == IN_MOVED_FROM) {
                     $fileType = strstr($ev['name'], '.');
                     //非重启类型
                     if (!isset($this->reloadFileTypes[$fileType])) {
                         continue;
                     }
                 }
             }
             //正在reload,不再接受任何事件,冻结10秒
             if (!$this->reloading) {
                 $this->putLog("after 10 seconds reload the server");
                 //有事件发生了,进行重启
                 swoole_timer_after($this->afterNSeconds * 1000, array($this, 'reload'));
                 $this->reloading = true;
             }
         }
     });
 }
开发者ID:jonny77,项目名称:auto_reload,代码行数:40,代码来源:AutoReload.php


示例15: readEvents

 /**
  * Returns all events happened since last event readout
  *
  * @return array
  */
 protected function readEvents()
 {
     return inotify_read($this->inotify);
 }
开发者ID:mgoedecke,项目名称:Lurker,代码行数:9,代码来源:InotifyTracker.php


示例16: watchInotify

 /**
  * Monitor the paths for any changes based on the modify time information.
  * When a change is detected, all listeners are invoked, and the list of
  * paths is once again traversed to acquire updated modification timestamps.
  */
 private function watchInotify()
 {
     if (($eventList = inotify_read($this->inotify)) === false) {
         return;
     }
     foreach ($eventList as $event) {
         $mask = $event['mask'];
         if ($mask & IN_DELETE_SELF || $mask & IN_MOVE_SELF) {
             $watchDescriptor = $event['wd'];
             if (inotify_rm_watch($this->inotify, $watchDescriptor)) {
                 unset($this->paths[$watchDescriptor]);
             }
             break;
         }
     }
     $this->runListeners();
 }
开发者ID:gsouf,项目名称:pho,代码行数:22,代码来源:Watcher.php


示例17: wait

 public function wait()
 {
     return inotify_read($this->inotify);
 }
开发者ID:Ronmi,项目名称:fruit-watchkit,代码行数:4,代码来源:PECLInotify.php


示例18: start

 function start()
 {
     $this->initDirs();
     while (true) {
         $fds = $this->ifds;
         if (stream_select($fds, $w = null, $e = null, 1)) {
             foreach ($fds as $file => $ifd) {
                 $events = inotify_read($ifd);
                 foreach ($events as $event) {
                     switch (true) {
                         case $event['mask'] & IN_MODIFY:
                             if (isset($this->fds[$file])) {
                                 fseek($this->fds[$file], $this->pos[$file]);
                                 $buf = '';
                                 while (!feof($this->fds[$file])) {
                                     $buf .= fread($this->fds[$file], self::BUFFER_SIZE);
                                 }
                                 if ($buf) {
                                     $this->handler->InModify($buf, basename($file));
                                     $this->pos[$file] = ftell($this->fds[$file]);
                                 }
                             }
                             break;
                         case $event['mask'] & IN_CREATE and $event['mask'] & IN_ISDIR:
                             $this->addDir($event['name']);
                             $this->log("add dir event " . $event['name']);
                             break;
                         case $event['mask'] & IN_CREATE:
                             $this->addFile($event['name']);
                             $this->log("add file event " . $event['name']);
                             break;
                         case $event['mask'] & IN_DELETE and $event['mask'] & IN_ISDIR:
                             $this->deleteDir($event['name']);
                             break;
                         case $event['mask'] & IN_DELETE:
                             $this->deleteFile($event['name']);
                             break;
                     }
                 }
             }
         }
         if (date("His") == "000100") {
             $yesterday = date($this->format, time() - 24 * 3600);
             $this->log(date("Y-m-d H:i:s") . "stop watch {$yesterday}");
             $this->stopWatchDir($yesterday);
         }
     }
 }
开发者ID:google2013,项目名称:StatsCenter,代码行数:48,代码来源:DirByDay.php


示例19: array

<?php

class G
{
    static $users = array();
    static $files = array();
    static $watchList = array();
    static $inotify;
}
$server = new swoole_websocket_server("0.0.0.0", 9502, SWOOLE_BASE);
$server->on('WorkerStart', function (swoole_websocket_server $server, $worker_id) {
    G::$inotify = inotify_init();
    swoole_event_add(G::$inotify, function ($ifd) use($server) {
        $events = inotify_read(G::$inotify);
        if (!$events) {
            return;
        }
        foreach ($events as $event) {
            $filename = G::$watchList[$event['wd']];
            $line = fgets(G::$files[$filename]['fp']);
            if (!$line) {
                echo "fgets failed\n";
            }
            //遍历监听此文件的所有用户,进行广播
            foreach (G::$files[$filename]['users'] as $fd) {
                $server->push($fd, $line);
            }
        }
    });
});
$server->on('Message', function (swoole_websocket_server $server, $frame) {
开发者ID:matyhtf,项目名称:websocket_tail,代码行数:31,代码来源:server.php


示例20: start

 public function start()
 {
     $paths = $this->_paths;
     if ($this->_followLinks) {
         $paths = LinksHelper::followLinks($paths, $this->_excludePatterns);
     }
     $this->_fd = inotify_init();
     $finder = new Finder();
     $finder->directories();
     foreach ($this->_excludePatterns as $excludePattern) {
         $finder->notName($excludePattern);
     }
     foreach ($paths as $p) {
         $finder->in($p);
     }
     $this->_watches = array();
     foreach ($paths as $p) {
         $this->_addWatch($p);
     }
     foreach ($finder as $f) {
         $this->_addWatch($f->__toString());
     }
     $this->_logger->info("Watches set up...");
     $read = array($this->_fd);
     $write = null;
     $except = null;
     stream_select($read, $write, $except, 0);
     stream_set_blocking($this->_fd, 0);
     $events = array();
     while (!$this->_stopped) {
         while ($inotifyEvents = inotify_read($this->_fd)) {
             foreach ($inotifyEvents as $details) {
                 $file = $this->_watches[$details['wd']];
                 if ($details['name']) {
                     $file .= '/' . $details['name'];
                 }
                 if ($details['mask'] & IN_MODIFY || $details['mask'] & IN_ATTRIB) {
                     $events[] = new ModifyEvent($file);
                 }
                 if ($details['mask'] & IN_CREATE) {
                     $events[] = new CreateEvent($file);
                 }
                 if ($details['mask'] & IN_DELETE) {
                     $events[] = new DeleteEvent($file);
                 }
                 if ($details['mask'] & IN_MOVED_FROM) {
                     $this->_previousMoveFromFile = $file;
                 }
                 if ($details['mask'] & IN_MOVED_TO) {
                     if (!isset($this->_previousMoveFromFile)) {
                         $this->_logger->error('MOVED_FROM event is not followed by a MOVED_TO');
                     } else {
                         $events[] = new MoveEvent($this->_previousMoveFromFile, $file);
                         unset($this->_previousMoveFromFile);
                     }
                 }
                 if ($details['mask'] & IN_DELETE_SELF) {
                     unset($this->_watches[$details['wd']]);
                 }
             }
         }
         $events = $this->_compressEvents($events);
         if ($this->_queueSizeLimit && count($events) > $this->_queueSizeLimit) {
             $this->_dispatchEvent(QueueFullEvent::NAME, new QueueFullEvent($events));
             $events = array();
         }
         foreach ($events as $event) {
             $name = call_user_func(array(get_class($event), 'getEventName'));
             $this->_dispatchEvent($name, $event);
         }
         usleep(100 * 1000);
     }
     foreach ($this->_watches as $wd => $path) {
         inotify_rm_watch($this->_fd, (int) $wd);
     }
     fclose($this->_fd);
     return;
 }
开发者ID:koala-framework,项目名称:file-watcher,代码行数:78,代码来源:Inotify.php



注:本文中的inotify_read函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
PHP inp函数代码示例发布时间:2022-05-15
下一篇:
PHP inotify_init函数代码示例发布时间:2022-05-15
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap