Я работал над небольшим сценарием, который бы выполнял некоторые записи для меня с компьютера со звездочкой.В командной строке linux (centOS) я могу набрать:
asterisk -rx "transcoder show"
, что обеспечивает вывод, который мне нужен для регистрации.Эти выходные данные выглядят так:
5/5 encoders/decoders of 120 channels are in use.
Я хотел записать строку в файл журнала, которая бы выглядела следующим образом:
YYYY-MM-DD HH-MM-SS #encoders #decoders
, а затем я буду регистрировать это каждую паруминут, и у меня будет история того, сколько каналов я использовал.Итак, я написал небольшой скрипт php:
<?php
exec("asterisk -rx \"transcoder show\" | sed 's|\\([0-9]*\\)\/\\([0-9]*\\).*|\\1:\\2|'",$retval);
$time = date('Y-m-d h:i:s');
$vals = explode(":",$retval[0]);
$encoders = trim($vals[0]);
$decoders = trim($vals[1]);
$logString = "$time\t$encoders\t$decoders\n";
$fh = fopen('/root/script/trans.log','a');
fwrite($fh,$logString);
fclose($fh);
?>
Извините, код немного прикольный, теоретически я должен был бы вывести именно то, что мне нужно, из sed, но код, который вы видите послеЯ изменил его, чтобы попытаться решить проблему, которую вы увидите ниже.При тестировании я обнаружил, что скрипт sed работает из командной строки;он выводит #encoders: #decoders, как и ожидалось.Но когда я запустил скрипт php, он записывал в файл журнала такие строки:
2011-06-13 10:24:02 ^[[0;37;40m6 6
Я не могу понять, откуда исходит ^ [[0; 37; 40m.Как я понимаю, это цветовой код, который задает цвет для отображения текста в оболочке, но это что-то, что добавляет sed, или это исходный результат?Как мне от этого избавиться?Если я использую оператор echo для вывода переменных $ encoders и $ decoders в командную строку, специального цветового форматирования не будет, и в выводе исходной команды asterisk -rx нет.