【问题标题】:Want to read a file from line(1) to line(n) in php想在 php 中从 line(1) 到 line(n) 读取文件
【发布时间】:2016-03-08 07:13:16
【问题描述】:

我有一个 PHP 脚本从第 n 行到第 (n) 行读取文件。我的意思是我将从下拉列表中选择行,脚本将读取该文件。我已经尝试过 this 和一些其他但没有解决我的问题。

PHP

<?php 

if(isset($_POST['submit'])){

    $selected_file = $_POST['files'];
    $from_line = $_POST['from_line'];
    $to_line = $_POST['to_line'];

    $file_open = fopen($selected_file,"r+") or die('Fail to open a file');

    $file_array = file($selected_file);

    $read = fread($file_open,3000); 
    }
?>

HTML

<form name="read" method="post" action="">
<table>

<tr><td>Select File</td><td><select name="files" style="width:183px;">
<?php
 foreach (scandir('.') as $file){
    $extension = pathinfo($file, PATHINFO_EXTENSION);
   if($extension == 'txt'){
 echo"<option>".$file."</option>";
 }}
?>
</select></td>
<tr><td>From</td><td><select name="from_line" style="width:183px">
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
<option>5</option>
<option>6</option>
<option>7</option>
</select></td></tr>
<tr><td>To</td><td><select name="to_line" style="width:183px">

<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
<option>5</option>
<option>6</option>
<option>7</option>
</select>
</td></tr>
<td><input type="submit" name="submit" value="Read" /></td></tr>

<tr><td></td></tr>


</table>
</form>

我想要什么

我将从下拉列表中选择值,脚本将在该范围内读取。例如从第 4 行到第 8 行

如果我错了,请更正我的脚本...谢谢。

【问题讨论】:

    标签: php file fread


    【解决方案1】:

    使用file 函数的简单逻辑。看看下面的解决方案:

    if(isset($_POST['submit'])){
    
        $selected_file = $_POST['files'];
        $from_line = $_POST['from_line'];
        $to_line = $_POST['to_line'];
    
    
    
        $file_array = file($selected_file);
    
        for($i = 0; $i < count($file_array); $i++){
            if($i >= ($from_line -1) && $i < ($to_line)){
                echo $file_array[$i];
                echo '<br />';
            }
        }
    }
    

    它将从文件中回显所需的行。

    【讨论】:

    • 数组将从0索引开始,这就是我们需要与$from_line -1比较的原因
    【解决方案2】:

    file() 函数将文件内容作为字符串数组返回(如果没有发生错误)。
    该数组中的第一行位于默认起始位置 (0)。
    因此,在获取预期范围时应考虑此条件。
    对于这样的输入边界:从4 - 到8 - 它应该是:从3 - 到7
    要从数组中获取元素(字符串)的范围,请使用 array_slice 函数:

    ...
    
    $file_array = file($selected_file);
    $len = $to_line - $from_line;
    $strings_slice = array_slice($file_array, $from_line - 1, $len);
    

    http://php.net/manual/en/function.array-slice.php

    【讨论】:

      【解决方案3】:

      试试这个代码。这肯定会对你有所帮助。

      <?php 
      if(isset($_POST['submit'])){
      
          $selected_file = $_POST['files'];
          $from_line = $_POST['from_line'];
          $to_line = $_POST['to_line'];
      
          $file_open = fopen($selected_file,"rb") or die('Fail to open a file')
          $i=1;
          while ($line = fgets($file_open, 1000)) {
              if($i>=$from_line && $i<=$to_line){
                  echo $line.'<br/>';
              }
              $i++; 
              }
          }
      ?>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-03-15
        • 1970-01-01
        相关资源
        最近更新 更多