PHP编辑文本文件的第一行

时间:2013-07-12 12:52:48

标签: php

我正在尝试通过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);

?>

谁能看到我做错了什么?

由于

5 个答案:

答案 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,如果文件不存在则创建文件或将文件擦除然后写入内容。在您的情况下,您需要在追加模式下使用fopenfwrite来编写数据,然后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);