0

私はこのAJAX Logfile Tailer & Viewerを使用しています: http://commavee.com/2007/04/13/ajax-logfile-tailer-viewer/うまく動作しますが、ログが表示されているページではそうではありません特殊文字をフィルタリングして、乱雑に見えるようにします。logtail.php ファイルを変更して特殊文字を消去しようとしていますが、うまく動作しません。

元の logtail.php ファイルは次のとおりです。

<?
// logtail.php
$cmd = "tail -50 /home/user/logfile.log";
exec("$cmd 2>&1", $output);
foreach($output as $outputline) {
 echo ("$outputline\n");
}
?>

これは、特殊文字を一掃しようとしている私の変更された logtail.php ファイルです。

<?php
ini_set('display_errors', 1);
ini_set('error_reporting', E_ALL);

$cmd = "tail -50 /home/user/logfile.log";
exec("$cmd 2>&1", $output);

foreach($output as $outputline) {
 exec('sed -r '.escapeshellarg("s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g").' $output');
 echo ("$outputline\n");


}
?>

更新:これは元の出力を取得し、特殊文字を消去してから、消去されたテキストを出力する必要があると思いますが、次のようなジャンクがまだ表示されるため、機能しません:

[0;35;1m[something] text here[m

[something] の部分は問題ありませんが、[0;35;1m ... [m] を削除する必要があります。

4

1 に答える 1

1

結果の代わりにソース行を出力します。

あなたのコードは次のようになります:

foreach($output as $outputline) {
 exec("echo \"$output\" | sed -r ".escapeshellarg("s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g"), $output);
 echo ("$outputline\n");
}

しかし、これは効率的ではありません。

次のようにpreg_replace関数を使用することをお勧めします。

<?php
// logtail.php
$cmd = "tail -50 /home/user/logfile.log";
exec("$cmd 2>&1", $output);

$str = implode('\n', $output);
$result = preg_replace('/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]/', '', $str);

echo ("$result\n");
?>
于 2013-08-12T06:15:02.967 に答える