如何在PHP中读取以下TXT文件: example.txt
#字符是控制(分隔)字符,例如2846是打印机ID,以下数据是ID 2846的打印机参数。必须读取:
ID:2846
+ sn-> .1.3.6.1.4.1.367.3.2.1.2.1.4.0 = STRING:“已审查”
+ m-> .1.3.6.1.4.1.367.3.2.1.1.1.1.0 = STRING:“ Aficio MP 171”
+ s-> .1.3.6.1.4.1.367.3.2.1.1.1.2.0 = STRING:“ 1.03”
...等。+ sn,+ m等是打印机的参数。可以在@字符后读取座席的数据。 -字符是结束控制字符。然后,这些参数应保存在变量中,以便可以将其加载到mysql表中。
我尝试对脚本进行编程,但是我不知道如何读取文件。
<?php
$conn = mysqli_connect('localhost','root','','demo');
if(!$conn) die(mysqli_error());
$open = fopen('example.txt','r');
while (!feof($open)) {
$getTextLine = fgets($open);
/* reading txt file, separating values of control parameters of printer
the code...
*/
list($ID,$sn,$m,$s,...etc) = $explodeLine;
$qry = "insert into agent_name (ID,sn,m,s,...etc) values('".$ID."','".$sn."','".$m."','".$s.",...etc')";
mysqli_query($conn,$qry);
}
fclose($open);
?>
答案 0 :(得分:1)
此例程将从文件中读取行并将其构建为行的数组,然后当它到达仅包含#
的行时,它将处理数据。
对数据进行拆分,以便首先获取ID,然后依次选择标志的后几行和设置,并创建设置的关联数组。
$open = fopen('example.txt','r');
fgets($open); // Ignore first line
$entry = [];
while (!feof($open)) {
$getTextLine = trim(fgets($open));
if ( $getTextLine == '#' ) {
// Take ID as first line
$settings = ['ID' => array_shift($entry)];
for ( $i = 0; $i < count($entry); $i+=2 ) {
$settings[ltrim($entry[$i],"+")] = $entry[$i+1]??'';
}
print_r($settings);
// list($ID,$sn,$m,$s,...etc) = $explodeLine;
// $qry = "insert into agent_name (ID,sn,m,s,...etc) values('".$ID."','".$sn."','".$m."','".$s.",...etc')";
// mysqli_query($conn,$qry);
$entry = [];
}
else {
$entry[] = $getTextLine;
}
}
目前它会打印出数据,但是您应该能够将其插入数据库中。尽管我建议您研究准备好的语句,以确保没有引号或其他奇数引起SQL问题。
第一个条目的示例输出...
Array
(
[ID] => 2846
[sn] => .1.3.6.1.4.1.367.3.2.1.2.1.4.0 = STRING: "censored"
[m] => .1.3.6.1.4.1.367.3.2.1.1.1.1.0 = STRING: "Aficio MP 171"
[s] => .1.3.6.1.4.1.367.3.2.1.1.1.2.0 = STRING: "1.03"
[ff] => .1.3.6.1.4.1.367.3.2.1.2.19.5.1.9.1 = INTEGER: 254623
[fffc] => .1.3.6.1.4.1.367.3.2.1.2.19.5.1.9.23 = INTEGER: 746801
[ffny] => .1.3.6.1.4.1.367.3.2.1.2.19.5.1.9.6 = INTEGER: 230398
[ffm] => .1.3.6.1.4.1.367.3.2.1.2.19.5.1.9.19 = INTEGER: 19932
[scff] => .1.3.6.1.4.1.367.3.2.1.2.19.5.1.9.29 = INTEGER: 4476
[scsz] => .1.3.6.1.4.1.367.3.2.1.2.19.5.1.9.28 = INTEGER: 3549
[fb] => .1.3.6.1.4.1.367.3.2.1.2.24.1.1.5.1 = INTEGER: -3
)
更新的代码...
$open = fopen('example.txt','r');
fgets($open); // Ignore first line
$entry = [];
$all_settings = [];
while (!feof($open)) {
$getTextLine = trim(fgets($open));
if ( $getTextLine == '#' ) {
// Take ID as first line
$settings = ['ID' => array_shift($entry)];
for ( $i = 0; $i < count($entry); $i+=2 ) {
$settings[ltrim($entry[$i],"+")] = $entry[$i+1]??'';
}
$all_settings [] = $settings;
$entry = [];
}
else {
$entry[] = $getTextLine;
}
}
print_r($all_settings);