Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在文件中的特定行号处插入一行?_Php_Html - Fatal编程技术网

Php 如何在文件中的特定行号处插入一行?

Php 如何在文件中的特定行号处插入一行?,php,html,Php,Html,在PHP中,有用于读/写的fopen('r+')。(从文件开头开始) 还有用于读/写的fopen('a+')。(附加到文件末尾) 我制作了一个简单的$_POST['data']表单,将表单中写入的内容写入文件。我的问题是,如果我写一些东西,例如 'Red ' 'Green ' 'Blue ' 如果我附加这些数据,它将按照我写入的顺序显示在文件中 但是,我需要写到文件的开头,这样它的顺序就相反了 'Blue ' 'Green ' 'Red ' $file_data='在文件中写入什么' $

在PHP中,有用于读/写的fopen('r+')。(从文件开头开始) 还有用于读/写的fopen('a+')。(附加到文件末尾)

我制作了一个简单的$_POST['data']表单,将表单中写入的内容写入文件。我的问题是,如果我写一些东西,例如

'Red ' 
'Green ' 
'Blue '
如果我附加这些数据,它将按照我写入的顺序显示在文件中

但是,我需要写到文件的开头,这样它的顺序就相反了

'Blue '
'Green '
'Red '
$file_data='在文件中写入什么'

$file_data.=file_get_内容('testz.php'); 文件内容('testz.php',$file\u数据)

  • 这将把$file_data变量中的任何内容写入文件,然后再写入文件中最初的数据
  • 从而使它显示在文件中最初的所有内容之前。这个很好用


    当我想在文件的开头包含一行代码时,问题就开始了

    特别是我想要!DOCTYPE html head“始终位于 文件的顶部。我当然可以将其放入文件数据中,如: 文件内容('testz.php',$headerinformation.$file\u data)

    但问题是每次我提交帖子时,它都会重复

    <!DOCTYPE html><html><head>Blue
    <!DOCTYPE html><html><head>Green
    <!DOCTYPE html><html><head>Red
    
    蓝色
    绿色
    红色
    
    我想要的是

    <!DOCTYPE html><html><head>
    Blue
    Green
    Red
    
    
    蓝色
    绿色
    红色
    
    因此,我可以通过POST表单继续向文件中写入更多信息,而无需替换第一行

    <!DOCTYPE html><html><head>
    
    
    

    我知道这将是一个糟糕的问题,我到底能做些什么来实现这一点?

    为什么不检查一下文件中是否已经包含了一些数据,例如:

    $data_to_write = file_get_contents('testz.php'); 
    $header_data = '<!DOCTYPE html><html><head>';
    $file_data .= (empty($data_to_write))?$header_data.$data_to_write:$data_to_write;
    file_put_contents('testz.php', $file_data);
    
    $data\u to\u write=file\u get\u contents('testz.php');
    $header_data='';
    $file_data.=(空($data_to_write))?$header_data.$data_to_write:$data_to_write;
    文件内容('testz.php',$file\u数据);
    
    为什么不检查文件中是否已经包含一些数据,例如:

    $data_to_write = file_get_contents('testz.php'); 
    $header_data = '<!DOCTYPE html><html><head>';
    $file_data .= (empty($data_to_write))?$header_data.$data_to_write:$data_to_write;
    file_put_contents('testz.php', $file_data);
    
    $data\u to\u write=file\u get\u contents('testz.php');
    $header_data='';
    $file_data.=(空($data_to_write))?$header_data.$data_to_write:$data_to_write;
    文件内容('testz.php',$file\u数据);
    
    您只能添加到文件末尾。你可以在中间写,但是只写已有的数据。因此,为了将文本行始终作为第二行添加,您应该加载数据,将行添加到正确的位置,然后再次写入文件

    但我认为你所做的是一件非常奇怪的事情,而且很可能是可以避免的。您正在编写一个HTML文件,这使我认为您将在某个时候显示它,在这种情况下,您应该将数据处理和表示分离开来


    例如,您可以将该文件视为数据文件,其中只附加不带标题的行,然后当您希望以html形式提供数据时,首先输出标题,然后按相反顺序输出行

    您只能添加到文件末尾。你可以在中间写,但是只写已有的数据。因此,为了将文本行始终作为第二行添加,您应该加载数据,将行添加到正确的位置,然后再次写入文件

    但我认为你所做的是一件非常奇怪的事情,而且很可能是可以避免的。您正在编写一个HTML文件,这使我认为您将在某个时候显示它,在这种情况下,您应该将数据处理和表示分离开来


    例如,您可以将该文件视为数据文件,其中只附加不带标题的行,然后当您希望以html形式提供数据时,首先输出标题,然后按相反顺序输出行

    我最后就是这样做的

    <?php
    $f=fopen('WriteFile.php', 'r+');
    $W='<!DOCTYPE html>'.file_get_contents('WriteFile.php');
    $S='New Data';
    fwrite($f, "$W");
    fgets($f);
    fseek($f,15);
    fwrite($f, "$S");
    ?>
    

    我最后就是这样做的

    <?php
    $f=fopen('WriteFile.php', 'r+');
    $W='<!DOCTYPE html>'.file_get_contents('WriteFile.php');
    $S='New Data';
    fwrite($f, "$W");
    fgets($f);
    fseek($f,15);
    fwrite($f, "$S");
    ?>
    

    首先,您应该在创建文件时写入第一行,例如:

    $first_line = "<!DOCTYPE html><html><head>" . PHP_EOL;
    file_put_contents("somefile.txt", $first_line);
    
    用于将数组元素连接到字符串并最终写入文件:

    $file_content = implode(PHP_EOL, $lines);
    file_put_contents("somefile.txt", $file_content);
    

    请注意,这种方法在处理大型文件时会导致内存问题

    首先,您应该在创建文件时写入第一行,例如:

    $first_line = "<!DOCTYPE html><html><head>" . PHP_EOL;
    file_put_contents("somefile.txt", $first_line);
    
    用于将数组元素连接到字符串并最终写入文件:

    $file_content = implode(PHP_EOL, $lines);
    file_put_contents("somefile.txt", $file_content);
    

    请注意,这种方法在处理大型文件时会导致内存问题

    可能是
    if
    语句?再次写入前,检查第一行是否已在文件中?或者,我错过了什么吗?所以你曾经尝试过一些字符串连接,但是现在你第二次却失败了…?我不确定我将如何实现它。第一行已经在文件中,它将始终是。我希望是这样。诀窍是防止php多次编写。我可以做“标题信息”。“诸如此类”。文件内容('file.php');但我将以标题信息的多个实例结束,而我只需要一个实例在开头。因此,如果我使用if语句,我必须找到一种方法来扫描文档并删除除第一个实例之外的所有实例,这不太实际。可能是一个
    if
    语句?再次写入前,检查第一行是否已在文件中?或者,我错过了什么吗?所以你曾经尝试过一些字符串连接,但是现在你第二次却失败了…?我不确定我将如何实现它。第一行已经在文件中,它将始终是。我希望是这样。诀窍是防止php多次编写。我可以做“标题信息”。“诸如此类”。文件内容('file.php');但我将以标题信息的多个实例结束,而我只需要一个实例在开头。因此,如果我使用if语句,我必须找到一种方法来扫描文档并删除除第一个实例之外的所有实例,这不太实际。为什么我需要这样做?我已经知道里面有数据了。我需要在已经存在的数据之前写入更多数据