【发布时间】:2017-02-01 13:46:01
【问题描述】:
我在 Linux 机器上运行 speedtest-cli,并使用 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 作业都填充一行;日期进入日期,ping 中,等等。
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
有人可以指出为什么它在爆炸后没有填充表,然后正确地存储在数据库中。 谢谢
【问题讨论】:
-
我相信explode 函数不能正常工作,所有行仍然在"{$di[0]}" 中,它将其值插入第一列。你能分享“var_dump($arrEx);”的输出吗?
-
我认为你是对的。即使没有 var_dump,当代码运行时,我也可以从源代码中看到它只是填充的日期字段:'
Sat 28 Jan 22:30 :01 UTC 2017 '等Ping: 36.209 毫秒 现在我们需要 var_dump 来了解为什么explode 函数会按您的预期工作。array(1) { [0]=> string(29) "2017 年 1 月 28 日星期六 22:30:01 UTC" } array(1) { [0]=> string(16) " Ping: 36.209 ms " } array(1) { [0]=> string(23) "下载: 41.43 Mbit/s " } array(1) { [0]=> string(20) "上传: 9.74 Mbit/s " } array(1) { [0]=> string(29) "2017 年 1 月 28 日星期六 22:45:01 UTC" } array(1) { [0]=> string(16) "Ping: 28.675 ms" } array(1) { [0]=> string(23) "下载:46.67 Mbit/s" } array(1) { [0]=> string(21) "上传:10.86 Mbit/s" }您能否在问题的代码块中复制 .log 文件的前 20 行?