この質問を新しいアプローチで修正してみましょう... logtail.php、ajax.js、index.php の 3 つのファイルがあります。私の目標は、syslog ビューアー (Linux) を作成することです。
index.php で、syslog のフィルタリングされたコンテンツのみを表示する div を作成しました。logtail.php の内容をフィルタリングする必要があります。shell_exec と | を使用する必要があります。複数の異なる正規表現を使用して内容を grep します。今、私は | syslog ファイル全体を grep すると、ログ ビューアにライブで表示されますが、フィルタが計画どおりに機能していません。
$_GET を使用して、ユーザーが見たい syslog の内容のみを取得する方法を理解するのに助けが必要です。index.php ファイルにテキスト フィールドと送信ボタンを用意しました。関数を使用する必要がありますか (これは既に試しました)。または、より良いアプローチがありますか?いくつか例を挙げていただけますか?
logtail.php
//Executes a shell script to grab all file contents from syslog on the device
//Explodes that content into an array by new line, sorts from most recent entry to oldest entry
if (file_exists($filename = '/var/log/syslog')) {
$syslogContent = shell_exec("cat $filename | grep -e '.*' $filename");
$contentArray = explode("\n", $syslogContent);
rsort($contentArray);
print_r($contentArray);
}
ajax.js (正常に動作)
function createRequest() {
var request = null;
try {
request = new XMLHttpRequest();
} catch (trymicrosoft) {
try {
request = new ActiveXObject("Msxml2.XMLHTTP");
} catch (othermicrosoft) {
try {
request = new ActiveXObject("Microsoft.XMLHTTP");
} catch (failed) {
request = null;
}
}
}
if (request == null) {
return alert("Error creating request object!");
} else {
return request;
}
}
var request = createRequest();
function getLog(timer) {
var url = 'logtail.php';
request.open("GET", url, true);
request.onreadystatechange = updatePage;
request.send(null);
startTail(timer);
}
function startTail(timer) {
if (timer == "stop") {
stopTail();
} else {
t = setTimeout("getLog()",1000);
}
}
function stopTail() {
clearTimeout(t);
var pause = "The log viewer has been paused. To begin viewing again, click the Start Log button.\n";
logDiv = document.getElementById("log");
var newNode = document.createTextNode(pause);
logDiv.replaceChild(newNode,logDiv.childNodes[0]);
}
function updatePage() {
if (request.readyState == 4) {
if (request.status == 200) {
var currentLogValue = request.responseText.split("\n");
eval(currentLogValue);
logDiv = document.getElementById("log");
var logLine = ' ';
for (i = 0; i < currentLogValue.length - 1; i++) {
logLine += currentLogValue[i] + "<br/>\n";
}
logDiv.innerHTML = logLine;
} else
alert("Error! Request status is " + request.status);
}
}
index.php
<script type="text/javascript" src="scripts/ajax.js"></script>
<button style="margin-left:25px;" onclick="getLog('start');">Start Log</button>
<button onclick="stopTail();">Stop Log</button>
<form action="" method="get"> //This is where the filter options would be
Date & Time (ex. Nov 03 07:24:57): <input type="text" name="dateTime" />
<input type="submit" value="submit" />
</form>
<br>
<div id="log" style="...">
//This is where the log contents are displayed
</div>