PHPWebtail-f实用程序
目前我正在用PHP编写一个webPHPWebtail-f实用程序,php,ajax,tail,Php,Ajax,Tail,目前我正在用PHP编写一个webtail-f实用程序。 我已经完成了ajax每x毫秒请求tail.php以获取最后添加的行的部分。 现在我正处在这样一个时刻,不知何故,我需要跟踪最后一行是什么。我曾考虑过使用ftell并将其保存在cookie中,但由于文件开头的行也可能被剪切,所以这并不总是可行的 有什么办法吗?我希望在不使用额外数据库的情况下执行此操作,但通过使用cookie/会话和“指针”数据的大小必须很小 如果你不明白一些事情,请询问,这不是那么容易描述的;-) 我没有尝试过这个,但也许您
tail-f
实用程序。
我已经完成了ajax每x毫秒请求tail.php
以获取最后添加的行的部分。现在我正处在这样一个时刻,不知何故,我需要跟踪最后一行是什么。我曾考虑过使用
ftell
并将其保存在cookie中,但由于文件开头的行也可能被剪切,所以这并不总是可行的
有什么办法吗?我希望在不使用额外数据库的情况下执行此操作,但通过使用cookie/会话和“指针”
数据的大小必须很小
如果你不明白一些事情,请询问,这不是那么容易描述的;-) 我没有尝试过这个,但也许您可以使用JS库(如Prototype)来确定输出的长度,然后将其与上一个响应的长度进行比较,然后通过在适当的位置剪切字符串来采取相应的行动 未经测试的示例:
var lastLength;
Ajax.Request('/tail.php', {
onSuccess: function(data){
/* this is our callback and data.responseText will contain the raw response from the server */
var curLength=String(data.responseText).length;
if(curLength>lastLength) {
$('myDiv').insert(data.responseText.substr(lastLength)); // append the new part of the string to a DIV with id 'myDiv'
lastLength=curLength;
}
}
});
如果由于某种原因,该解决方案不令人满意或导致问题,您可以尝试让tail.php发送的不仅仅是原始数据。相反,JSON可以用于将字节计数与数据一起包括在内
假设
$tailOutput
包含最新的输出,使用
echo json_encode(array(
'tailOutput' => substr($tailOutput, $_REQUEST['tailLength']),
'curLength' => strlen($tailOutput)
));
将数据发送回客户端,现在包括最后的长度信息,然后相应地修改JS代码
var lastLength;
Ajax.Request('/tail.php', {
parameters: {
tailLength: lastLength
},
onSuccess: function(data){
var obj=data.responseText.evalJSON(); //convert to json object
$('myDiv').insert(obj.tailOutput);
lastLength=obj.curLength;
}
}
});
如果您希望纯粹在PHP中实现这一点,尽管我想知道,如果您已经在客户端拥有AJAX处理功能,您可以简单地使用session变量 在PHP中
$outputToClient=substr($tailOutput, ($_SESSION['lastTailLength']?$_SESSION['lastTailLength']:0));
$_SESSION['lastTailLength']=strlen($tailOutput);
echo $outputToClient;
像这样的东西应该能完成任务。如果PHP无法识别来自AJAX请求的会话(虽然这些时间已经过去了,这个问题不应该发生),请尝试在每次将PHPSESSID发送到服务器时将其与AJAX请求一起发送。这只是一个jquery AJAX请求
GET
'ingtail.PHP?file=file&getlog
。这里有一些想法:@Zulakis:你应该粘贴你已经尝试过的PHP代码,这样你的问题就更清楚了。你也应该让你的问题更具体。您的实现遇到的确切问题是什么?还有,您在该php脚本中根本不使用tail
的可能性有多大?您在该服务器上有多少访问权限?我们在这里寻找纯PHP解决方案吗?需要Windows支持吗?戴泽尔:需要纯PHP解决方案。哈克雷:不,我将只使用PHP文件函数。问题是,我不知道如何跟踪最后一个显示行(带有最后一个请求)的位置。我只想提交新行,检查应该在服务器端完成。这是必要的,因为它至少每秒被拉一次,并且会造成太多的流量。@Zulakis:如果你在问题中发布你的(正如你写的那样)代码,你就不会给Cummander Checkov带来太多无用的工作了。这是一个很好的例子,说明了为什么发布自己的代码很好,尽管你认为这太简单了。没什么大不了的。与提供编码情况的粗略描述相比,调整代码以使其能够脱离上下文显示可能需要花费太多的精力。另一种方法是保持与服务器的持续连接,在此期间,每当您注意到总行数(或内容长度)增加时,您都会回复客户端已经改变/增加了。