Чтение файла / вызывающего скрипта не приводит к тому же результату в preg_match_all, в котором есть текст в коде

0

У меня есть один скрипт PHP, который должен искать информацию в одном скрипте оболочки результата, этот сценарий оболочки делает одно соединение ssh, получает таблицу маршрутов и сохраняет это в одном.txt файле, но если я попытаюсь прочитать файл или получить информацию прямо из сценария и выполнив мой поиск с помощью preg_match_all, результат пуст, но я поставил результат прямо в свой файл php, код работает нормально, поэтому я потерялся с этой проблемой, мой php-код:

$resultsCK = array();

//     ([0])           [1]                  [2]       [3]       [4]            [5]          [6]                                [7]                           ([8])                     

$searchTextG = "/(S|R|B|O|A|K|H|P|U|i) +(IA|E|N|) +([0-9.]+)\/([0-9]+) +via +([0-9.]+), +([a-zA-Z0-9.]+|), +cost +(?:[0-9]+:|)([0-9]+), +age +[0-9]+ +\n((?: +via +[0-9.]+, +(?:[a-zA-Z0-9.]+|) +\n)*)/";

$searchTextC = "/(C) +([0-9.]+)\/([0-9]+) +is directly connected, +([a-zA-Z0-9.]+) +\n/";
foreach ($ciscoCk as $ipCk) {

   shell_exec('./tmp/routeCk.sh ' . $ipCk . ' 22 commandeCk > /tmp/resultRouteCk.txt');
   $txt=  file_get_contents('/tmp/resultRouteCk.txt');

   $matches = [];
   preg_match_all($searchTextG, $txt, $matches, PREG_SET_ORDER);
    foreach ($matches as $id => $match) {
        unset($matches[$id][0]);
        if (isset($match[8])) {
            preg_match_all($searchSubTextG, $match[8], $subpatternMatches, PREG_SET_ORDER);
            unset($matches[$id][8]);
            foreach ($subpatternMatches as $spmid => $spm) {
                unset($subpatternMatches[$spmid][0]);
                $matches[$id][8][] = $subpatternMatches[$spmid];
            }
        }
    }
    //g of general
    $resultsCK[$ipCk]["g"] = $matches;

    $matches = [];

    preg_match_all($searchTextC, $txt, $matches, PREG_SET_ORDER);
    foreach ($matches as $id => $match) {
         unset($matches[$id][0]);
    }

    $resultsCK[$ipCk]["c"] = $matches;

}

var_dump($resultsCK);

Поэтому я уже пробовал:

   shell_exec('./tmp/routeCk.sh ' . $ipCk . ' 22 commandeCk > /tmp/resultRouteCk.txt');
   $txt=  file_get_contents('/tmp/resultRouteCk.txt');

Это:

   $txt=('./tmp/routeCk.sh ' . $ipCk . ' 22 commandeCk');

И не работает, но если я

$txt="
Codes: C - Connected, S - Static, R - RIP, B - BGP,
       O - OSPF IntraArea (IA - InterArea, E - External, N - NSSA)
       A - Aggregate, K - Kernel Remnant, H - Hidden, P - Suppressed,
       U - Unreachable, i - Inactive

O E       0.0.0.0/0           via 10.140, bond1.30, cost 1:10, age 5  
                              via 10.141, bond1.31  
                              via 10.142, bond1.32  
O E       10.112/23       via 10.140, bond1.30, cost 46:1, age 2511  
O E       10.112/23       via 10.140, bond1.30, cost 46:1, age 2511  
O IA      10.138/29       via 10.140, bond1.30, cost 46, age 1029440  
C         10.141/29    is directly connected, bond2.35
C         10.141/29    is directly connected, bond2.35
";

Сценарий будет работать, и это будет одна и та же информация из файла, так как я могу это исправить? может быть проблема с кодировкой?

Написав это, я тестирую изменение одной строки на resultRouteCk.txt и тестирую PHP с помощью $txt=('./tmp/routeCk.sh '. $ipCk. ' 22 commandeCk'); и работает, поэтому, кажется, одна проблема между файлом или выходом из linux и строкой в php, но как я могу это исправить?

  • 0
    Вы проверили, загружен ли ваш файл? Вы уверены, что поля не разделены табуляцией вместо пробелов?
  • 0
    Это был какой-то особенный символ, я использую dos2unix и исправляю проблему, но я работаю с linux для linux, и вывод получился с символом dos: / не очень логично
Показать ещё 1 комментарий
Теги:

1 ответ

1

Я исправляю проблему, потому что это был особый символ, в конце у меня есть код:

$txt= shell_exec('./routeCk.sh ' . $ipCk . ' 22 commandeCk  | dos2unix ');

Это поместит весь вывод в unix-тип, но не является логическим, работает с linux, имеет ouptut с символом dos

Ещё вопросы

Сообщество Overcoder
Наверх
Меню