Превратить разобранный текстовый файл в таблицу

Я запускаю speedtest-cli на Linux-машине с заданием Cron для его регулярного запуска:

#!/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

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

Я пытаюсь сохранить его в пяти столбцах — ID, дата, ping, загрузка, загрузка — база данных, чтобы я мог запустить задание 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>

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

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

Решение

Файлы журнала содержат следующее:

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

Ping: xx.xxx ms

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

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

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

Ping: xx.xxx ms

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

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

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

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

$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++;
}
}
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]