关于PHP中的文件指针

关于PHP中的文件指针,php,file-pointer,Php,File Pointer,我刚刚在培训PHP。 关于下面的代码,我从文件中读取了一个计划,如果文件中有给定的行number($lineNo),则覆盖或删除 那我有个问题。 执行fwrite功能后,文件指针是否更新 <?php $filename = "sample.txt"; function edit($filename,$lineNo){ $new_line = "Hello"; $schedule_list = file($filename);

我刚刚在培训
PHP
。 关于下面的代码,我从文件中读取了一个计划,如果文件中有给定的行
number($lineNo)
,则覆盖或删除

那我有个问题。 执行fwrite功能后,文件指针是否更新

<?php
    $filename = "sample.txt";
    function edit($filename,$lineNo){
        $new_line = "Hello";
        $schedule_list = file($filename);
        $fp = fopen($filename,"w");
        foreach($schedule_list as $schedule_lineNo => $line){
            if($schedule_lineNo == $lineNo){
                if($_POST["mode"] == "overwrite"){
                    fwrite($fp,$new_line);
                }
                elseif($_POST["mode"] == "delete"){

                }
            else{
                fwrite($fp,$line);
            }
        }
        fclose($fp);
    }
?>

不要把事情复杂化。由于您使用了
file()
函数,并且输入了所需的行号,因此请使用该行号指定要覆盖的数组键。例如:

$filename = "sample.txt";

function edit($filename, $lineNo){
    $new_line = "Hello";
    $schedule_list = file($filename, FILE_SKIP_EMPTY_LINES | FILE_IGNORE_NEW_LINES);
    if(!isset($schedule_list[$lineNo-1])) {
        return false;
    }

    if(/** overwrite **/) {
        // use the line number as key and use it on the array returned by file()
        $schedule_list[$lineNo - 1] = $new_line; // numeric indices start at zero
    } elseif(/** delete **/) {
        unset($schedule_list[$lineNo-1]);
    }

    file_put_contents($filename, implode("\n", $schedule_list));

    return true;
}

var_dump(edit($filename, 1));

这很方便,因为文件内容函数将“fopen”、“fwrite”和“fclose”合并在一起