函式名稱:inotify_add_watch()
適用版本:該函式在PHP 5.4.0及以上版本中可用。
用法:inotify_add_watch()函式用於向inotify例項新增一個新的監視物件。它會監視指定的檔案或目錄,並返回一個唯一的監視描述符。一旦監視物件的狀態發生變化,可以使用該描述符來獲取有關該事件的資訊。
語法:int inotify_add_watch(resource $inotify_instance, string $pathname, int $mask)
引數:
- $inotify_instance:inotify例項,使用inotify_init()函式建立。
- $pathname:要監視的檔案或目錄的路徑。
- $mask:要監視的事件型別。可以是以下常量的組合:
- IN_ACCESS:檔案被訪問
- IN_ATTRIB:檔案屬性發生變化
- IN_CLOSE_WRITE:檔案被寫入並關閉
- IN_CLOSE_NOWRITE:檔案被關閉(不包括寫入)
- IN_CREATE:檔案或目錄被建立
- IN_DELETE:檔案或目錄被刪除
- IN_DELETE_SELF:監視的檔案或目錄自身被刪除
- IN_MODIFY:檔案被修改
- IN_MOVE_SELF:監視的檔案或目錄自身被移動
- IN_MOVED_FROM:檔案或目錄被移出監視的目錄
- IN_MOVED_TO:檔案或目錄被移入監視的目錄
- IN_OPEN:檔案被開啟
返回值:如果成功,則返回一個非負整數,表示監視描述符。如果失敗,則返回false。
示例:
$inotifyInstance = inotify_init();
$watchDescriptor = inotify_add_watch($inotifyInstance, '/path/to/file.txt', IN_MODIFY | IN_DELETE);
if ($watchDescriptor === false) {
echo "新增監視失敗";
} else {
echo "監視描述符:$watchDescriptor";
}
// 監聽事件
while (true) {
$events = inotify_read($inotifyInstance);
if ($events === false) {
echo "讀取事件失敗";
break;
}
foreach ($events as $event) {
echo "事件型別:{$event['mask']}\n";
echo "事件名稱:{$event['name']}\n";
echo "事件路徑:{$event['path']}\n";
}
}
// 關閉inotify例項
inotify_rm_watch($inotifyInstance, $watchDescriptor);
fclose($inotifyInstance);
在上面的示例中,我們首先透過inotify_init()函式建立了一個inotify例項。然後使用inotify_add_watch()函式向該例項新增了一個監視物件,即檔案/path/to/file.txt
。監視的事件型別為檔案被修改或刪除。如果新增監視成功,則返回一個監視描述符,否則返回false。接下來,我們使用inotify_read()函式讀取inotify例項中發生的事件,並對每個事件進行處理。最後,我們使用inotify_rm_watch()函式和fclose()函式關閉inotify例項和監視描述符。