composer require textalk/websocket
<?PHP require('vendor/autoload.PHP'); use WebSocket\Client; if(3 > count($argv)){ fwrite( STDERR,'调用格式错误!使用格式 "tail.PHP 文件路径 服务地址 -d"'.PHP_EOL ); return 1; } define("MAX_SHOW",8192); $file_name = $argv[1]; $server = $argv[2]; if(isset($argv[3])&&$argv[3]=='-d'){ umask(0); if (pcntl_fork() != 0){ exit(); } chdir("/"); } $file_size = 0; $file_size_new = 0$add_size = 0$ignore_size = 0$sendData=''$ss = exec('/sbin/ifconfig eth0 | sed -n \'s/^ *.*addr:\\([0-9.]\\{7,\\}\\) .*$/\\1/p\'',$arr); $ip=$arr[0]; if(!file_exists($file_name//echo "{$file_name} not exist".PHP_EOL; ; } $fp = fopen($file_name,"r"); $client = new Client("ws://".$server); while(1clearstatcache(); $file_size_new = filesize(); $add_size = $file_size_new - $file_size; if($add_size > 0){ $add_size > MAX_SHOW){ $ignore_size = $add_size - MAX_SHOW; $add_size = MAX_SHOW; fseek($fp,1)">$ignore_size,1)">); } $sendData.=fread($add_size); while(!empty($sendData)){ try{ $lines=explode("\n",1)">); foreach($lines as $line){ if (!$line)) $client->send("[{$ip}] ".); } $res=$client->receive(); $res)) ; break; }catch(Exception $e){ echo "connect to {$server} Failed".PHP_EOL; sleep(1); } } $file_size = $file_size_new; } usleep(50000); } fclose($fp);