|
php守护进程,获取最新添加的文件内容,推送给服务
composer require textalk/websocket
<?php
require(&#39;vendor/autoload.php&#39;);
use WebSocket\Client;
if(3 > count($argv)){
fwrite(
STDERR,
&#39;调用格式错误!使用格式 &#34;tail.php 文件路径 服务地址 -d&#34;&#39;.PHP_EOL
);
return 1;
}
define(&#34;MAX_SHOW&#34;, 8192);
$file_name = $argv[1];
$server = $argv[2];
if(isset($argv[3])&&$argv[3]==&#39;-d&#39;){
umask(0);
if (pcntl_fork() != 0){
exit();
}
if (pcntl_fork() != 0){
exit();
}
chdir(&#34;/&#34;);
}
$file_size = 0;
$file_size_new = 0;
$add_size = 0;
$ignore_size = 0;
$sendData=&#39;&#39;;
$ss = exec(&#39;/sbin/ifconfig eth0 | sed -n \&#39;s/^ *.*addr:\\([0-9.]\\{7,\\}\\) .*$/\\1/p\&#39;&#39;,$arr);
$ip=$arr[0];
if(!file_exists($file_name)){
//echo &#34;{$file_name} not exist&#34;.PHP_EOL;
return 1;
}
$fp = fopen($file_name, &#34;r&#34;);
$client = new Client(&#34;ws://&#34;.$server);
while(1){
clearstatcache();
$file_size_new = filesize($file_name);
$add_size = $file_size_new - $file_size;
if($add_size > 0){
if($add_size > MAX_SHOW){
$ignore_size = $add_size - MAX_SHOW;
$add_size = MAX_SHOW;
fseek($fp,$ignore_size,$file_size);
}
$sendData.=fread($fp, $add_size);
while(!empty($sendData)){
try{
$lines=explode(&#34;\n&#34;,$sendData);
foreach($lines as $line){
if (!empty($line)) $client->send(&#34;[{$ip}] &#34;.$line);
}
$res=$client->receive();
if(!empty($res)) $sendData=&#39;&#39;;
break;
}catch(Exception $e){
//echo &#34;connect to {$server} failed&#34;.PHP_EOL;
$client = new Client(&#34;ws://&#34;.$server);
sleep(1);
}
}
$file_size = $file_size_new;
}
usleep(50000);
}
fclose($fp);以上内容希望帮助到大家,很多PHPer在进阶的时候总会遇到一些问题和瓶颈,业务代码写多了没有方向感,不知道该从那里入手去提升,对此我整理了一些资料,包括但不限于:分布式架构、高可扩展、高性能、高并发、服务器性能调优、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql优化、shell脚本、Docker、微服务、Nginx等多个知识点高级进阶干货需要的可以免费分享给大家,需要
或者关注咱们下面的专栏
来源:https://www.cnblogs.com/taoshihan/articles/12158059.html |
|