我正在尝试通过PHP编辑文本文件的第一行。我打破了我的脚本并测试了1的功能1.我删除第1行的工作正常。然而,我然后尝试在开头插入一行,它将文件擦除为零,然后写入。
我的代码:
<?php
$filename = $_GET['jobname'];
$sunits = $_GET['s'];
$wunits = $_GET['w'];
$funits = $_GET['f'];
$vunits = $_GET['v'];
$tunits = $_GET['t'];
$data = "S: $sunits - W: $wunits - F: $funits - V: $vunits - T: $tunits";
$f = "$filename.txt";
// read into array
$arr = file($f);
// remove second line
unset($arr[0]);
// reindex array
$arr = array_values($arr);
// write back to file
file_put_contents($f,implode($arr));
$handle = fopen("$filename.txt", 'r+') or die('Cannot open file: '.$filename);
fwrite($handle, $data . "\n");
fclose($handle);
?>
谁能看到我做错了什么?
由于
答案 0 :(得分:4)
我只会使用file_get_contents() [file() in your case] + file_put_contents()
之后不需要使用fopen()(当你实际调用file_put_contents()
时调用它。
<?php
$filename = $_GET['jobname'];
$sunits = $_GET['s'];
$wunits = $_GET['w'];
$funits = $_GET['f'];
$vunits = $_GET['v'];
$tunits = $_GET['t'];
$data = "S: $sunits - W: $wunits - F: $funits - V: $vunits - T: $tunits";
$f = "$filename.txt";
// read into array
$arr = file($f);
// edit first line
$arr[0] = $data;
// write back to file
file_put_contents($f, implode($arr));
?>
你可能需要使用implode(PHP_EOL,$arr)
所以数组的每个元素都在它自己的行上
答案 1 :(得分:2)
您不能在文本文件的开头添加一行,只是在最后。您需要做的是将新行添加到数组的开头,然后将整个数组写回:
// Read the file
$fileContents = file('myfile.txt');
// Remove first line
array_shift($fileContents);
// Add the new line to the beginning
array_unshift($fileContents, $data);
// Write the file back
$newContent = implode("\n", $fileContents);
$fp = fopen('myfile.txt', "w+"); // w+ means create new or replace the old file-content
fputs($fp, $newContent);
fclose($fp);
答案 2 :(得分:0)
您的问题来自于您使用file_put_contents,如果文件不存在则创建文件或将文件擦除然后写入内容。在您的情况下,您需要在追加模式下使用fopen,fwrite来编写数据,然后fclose来关闭文件。在确切的代码中可能会有另外一两步,但这是将数据附加到已经存在内容的文件的一般想法。
答案 3 :(得分:0)
我最后做的不是unset $arry[0]
我设置$arr[0] = $data . "\n"
然后回到文件中它正在运行。有人看到这样做有什么问题吗?
答案 4 :(得分:0)
我整夜都在研究。这是我能找到的最佳解决方案。快速,资源少。当前,此脚本将回显内容。但是您始终可以保存到文件。以为我会分享。
$fh = fopen($local_file, 'rb');
echo "add\tfirst\tline\n"; // add your new first line.
fgets($fh); // moves the file pointer to the next line.
echo stream_get_contents($fh); // flushes the remaining file.
fclose($fh);