我正在尝试在“=”之后更改文本文件中的值,explode返回一个包含两个元素的数组,我希望第二个元素替换为新值,然后写入我的文件中,但我迷路了语法!!
$trID_Log_File = $fileName;
if(file_exists($trID_Log_File) && filesize($trID_Log_File) > 0)
{
$h = fopen($trID_Log_File, "r");
$contents = fread($h, filesize($trID_Log_File));
fclose($h);
if(!stristr($contents, "TrID is best suited to analyze binary files!"))
{
$lines = explode("\n", $contents);
foreach($lines as $line)
{
if(strlen($line) > 5)
{
$line_arr=explode("=",$line);
if ($line_arr[0]=='Sally')
{
$line_arr[1]="10"; // The New Value // ??????
fwrite($h,$line_arr,"w+") ; // ?????????
}
}
}
}
}
输入:
sally= 10
samy=40
所需的输出:
sally=55
samy=123
这个问题的正确语法是什么!! 我错过了一些代码吗? 感谢
答案 0 :(得分:0)
这是一个有效的代码:
<?php
if(file_exists($trID_Log_File) && filesize($trID_Log_File) > 0) {
$h = fopen($trID_Log_File, "r");
$contents = fread($h, filesize($trID_Log_File));
fclose($h);
$out_h = fopen("output filename", "w");
if(!stristr($contents, "TrID is best suited to analyze binary files!")) {
$lines = explode("\n", $contents);
foreach($lines as $line) {
if(strlen($line) > 5) {
$line_arr=explode("=",$line);
if ($line_arr[0]=='Sally') {
$line_arr[1]="10"; // The New Value
}
fwrite($out_h, implode("=", $line_arr)."\n");
}
}
}
}
您的代码中存在多个错误。首先,您正在尝试将数组写入文件,但您应该使用implode
函数将其转换回带有=
分隔符的字符串。
其次,你使用fwrite
完全错误。这个函数的第一个参数必须是打开文件处理程序,但是你已经通过了关闭的一个。第二个参数必须是要写的字符串,您已经传递了一个数组。第三个可选参数是length,但是你已经传递了“w +”,这对fwrite没有任何意义。 fwrite无法打开文件,因此无法使用文件访问修饰符。
第三,您无法修改文件以实现您的任务。如果必须这样做,则必须将文件光标设置为每行的开头,然后用新内容覆盖该行。如果新线的长度不等于旧线的长度,则变得非常复杂。因此,您应该创建另一个输出文件并将所有输出写入其中。
我发布的代码中还有其他一些问题:
fgets
读取一行,处理它,将其写入新文件,然后读取下一行。 另外,我没有检查stristr
条件,所以我不知道它是否有效。
所有这些都不是关于语法的。如果存在任何语法错误,解释器会非常具体地告诉您语法错误。
答案 1 :(得分:-1)
if(strlen($line) > 5) {
$line_arr=explode("=",$line);
if ($line_arr[0]=='Sally'){
$line_arr[1]="10"; // The New Value // ??????
$new_line = implode("=", $line_arr); //reconstruct the string here
// or something like that :
// $new_line = $line_arr[0] . "=10";
fwrite($h,$new_line) ; // ?????????
}
}
在写入文件之前,在数组上使用implode。如果没有,你试图写一个数组到文件...你必须在之前重建字符串!