0

我正在尝试通过 PHP 编辑文本文件的第一行。我已经分解了我的脚本并逐个测试了函数。我删除第 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);

?>

谁能看到我做错了什么?

谢谢

4

5 回答 5

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)所以数组的每个元素都在它自己的行上

于 2013-07-12T13:14:01.020 回答
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);
于 2013-07-12T13:08:38.487 回答
0

您的问题来自您对file_put_contents的使用,如果文件不存在,它会创建一个文件,或者将文件擦除干净然后写入内容。在您的情况下,您需要在附加模式下使用fopen , fwrite写入数据,然后fclose关闭文件。确切的代码中可能还会有另外一两个步骤,但这是将数据附加到已存在内容的文件的一般想法。

于 2013-07-12T13:02:02.653 回答
0

我最终所做的不是unset $arry[0]我设置$arr[0] = $data . "\n"然后放回文件并且它正在工作。有人看到这样做有什么问题吗?

于 2013-07-12T13:16:44.577 回答
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);
于 2019-07-03T11:20:41.687 回答