Я бег 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
Может кто-то пожалуйста, укажите, почему это не заполнение таблицы после взрыва, а затем хранятся в базе данных правильно. Благодаря
Я верю разнесения функция не работает правильно, а все строки по-прежнему в «{$ ди [0]}», который вставить его значение в первом столбце , Можете ли вы поделиться выходом «var_dump ($ arrEx)»?? –
Я думаю, что ты прав. Даже без var_dump, я могу видеть из источника, если код работает это только поле дата заполняется: '
Теперь нам нужно var_dump, чтобы понять, почему функция взрываются делает работу, как вы ожидали, что это будет. –
ответ
в лог-файл содержит следующее:
И это продолжается .... Так что каждый строка содержит кусок данных, и каждая 4 строки (дата, пинг, загрузка, загрузка) являются одной «группой».
В своем коде, у вас есть:
Так что вы на самом деле делаете:
1 раунд цикла:
$arrEx = explode('\n', "Tue 31 Jan 20:00:01 UTC 2017");
2 раунд цикла:
$arrEx = explode('\n', "Ping: xx.xxx ms");
... ...Что вы должны сделать, это:
источник
2017-02-01 14:46:12
не проверили его, обновите меня, если он работает/нет. –
Спасибо, это здорово. И спасибо за объяснение; Я не рассматривал данные как группу, а каждую строку в качестве строки. – Phil
добро пожаловать. –
Смежные вопросы