2017-02-01 2 views
1

Я бег SpeedTest-кли на коробке Linux, с хронами, чтобы запустить его на регулярной основе:Turn разобранном текстового файла в таблицу

#!/bin/bash 
date >> /home/blob/speedtest.log 
/usr/local/bin/speedtest --simple >> /home/blob/speedtest.log 

Это выводит четыре переменные, с разрывами строк между собой:

Tue 31 Jan 20:00:01 UTC 2017 
Ping: xx.xxx ms 
Download: xx.xx Mbit/s 
Upload: xx.xx Mbit/s 

Они хранятся в непрерывном файле журнала.

Я пытаюсь сохранить его в пяти столбцах - идентификатор, дата, пинг, загрузка, загрузка - база данных, так что я могу запустить задание cron, прочитать результат в базе данных и затем обрезать файл журнала (так что не дубликаты):

<body> 
<table> 

<?php 
    $f = fopen("/home/blob/speedtest.log", "r") or exit("Unable to open file!"); 
    $arr_to_insert = array(); 
    // Read line by line until end of file 
    while (!feof($f)) { 

    // Make an array using line break as delimiter 
     $arrEx = explode('\n',fgets($f)); 
    // Put exploded data in an array 
     echo '<tr><td name="date">' . $arrEx[0] . '</td><td name="ping">' . $arrEx[1] . '</td><td name="download">' . $arrEx[2] . '</td><td name="upload">' . $arrEx[3] . '</td></tr>'; 
     //strore text file row to an array 
     $arr_to_insert[] = $arrEx; 
    } 

    fclose($f); 
{ 

    // Connect to Database 
include '../includes/connection.php'; 
    // Database Insert 
foreach($arr_to_insert as $di){ 
    $sql="INSERT INTO speed (date, ping, download, upload) VALUES ('{$di[0]}','{$di[1]}','{$di[2]}','{$di[3]}')"; 
    if (!mysqli_query($conn,$sql)) 
     { 
     die('Error: ' . mysqli_error()); 
     } 

} 
mysqli_close($conn); 
} 
?> 
</table> 
</form> 
</body> 
</html> 

что же хранить данные - так что никаких сообщений об ошибках - но все в одном столбце, а не каждый хрон заполнение одной строки; дата идет в дату, пинг в пинг и т.д.

ID date ping download upload 
1 Sat 28 Jan   
2 Ping: xx    
3 Download: xx    
4 Upload: xx   
5 Sat 28 Jan   
6 Ping: xx    
7 Download: xx    

Может кто-то пожалуйста, укажите, почему это не заполнение таблицы после взрыва, а затем хранятся в базе данных правильно. Благодаря

+1

Я верю разнесения функция не работает правильно, а все строки по-прежнему в «{$ ди [0]}», который вставить его значение в первом столбце , Можете ли вы поделиться выходом «var_dump ($ arrEx)»?? –

+0

Я думаю, что ты прав. Даже без var_dump, я могу видеть из источника, если код работает это только поле дата заполняется: '

'и т.д. – Phil

+1

Теперь нам нужно var_dump, чтобы понять, почему функция взрываются делает работу, как вы ожидали, что это будет. –

ответ

2

в лог-файл содержит следующее:

вт 31 янв 20:00:01 UTC 2017

Ping: xx.xxx мс

Скачать: xx.xx Мбит/s

загрузки: xx.xx Мбит/с

вт 31 января 20:00:01 UTC 2017

Ping: xx.xxx мс

Скачать: xx.xx Мбит/с

загрузки: xx.xx Мбит/с

И это продолжается .... Так что каждый строка содержит кусок данных, и каждая 4 строки (дата, пинг, загрузка, загрузка) являются одной «группой».

В своем коде, у вас есть:

$arrEx = explode('\n',fgets($f)); 

fgets - возвращает строку.

Так что вы на самом деле делаете:

1 раунд цикла: $arrEx = explode('\n', "Tue 31 Jan 20:00:01 UTC 2017");

2 раунд цикла: $arrEx = explode('\n', "Ping: xx.xxx ms"); ... ...

Что вы должны сделать, это:

$arr_to_insert = array(); 
    $line = 1;  
// Read line by line until end of file 
    while (!feof($f)) { 
     if($line == 1){ 
      $group = array(); 
     } 

     $group[] = fgets($f); 


     if($line == 4){ 
     echo '<tr><td name="date">' . $group[0] . '</td><td name="ping">' . $group[1] . '</td><td name="download">' . $group[2] . '</td><td name="upload">' . $group[3] . '</td></tr>'; 

     //reset lines group 
     $arr_to_insert[] = $group; 
     $line = 1; 
     unset($group); 
     } else { 
     $line++; 
     } 
    } 
+0

не проверили его, обновите меня, если он работает/нет. –

+0

Спасибо, это здорово. И спасибо за объяснение; Я не рассматривал данные как группу, а каждую строку в качестве строки. – Phil

+0

добро пожаловать. –

Смежные вопросы

Сб 28 января 22:30:01 UTC 2017 <имя = "загрузить"><имя = "загрузить">
Ping: 36.209 мс <имя = «загрузить»><имя = «загрузить»>