2016-03-08 78 views
1

我有一個PHP腳本來讀取從第n行到第(n)行的文件。我的意思是我會從下拉列表中選擇行列表和腳本將讀取該文件。我嘗試了this和其他一些但沒有解決我的問題。想要讀取一行文件從行(1)到行(n)在php

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> 

我想要什麼

我會從下拉列表中選擇值和腳本會讀取來自range.For例子第4行到第8行

糾正我的scr ipt如果我錯了...謝謝。

回答

0

使用簡單的邏輯與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 />'; 
     } 
    } 
} 

它會從文件中回顯需要的行。

+1

日Thnx豬頭...你已經解決了我的問題@chetan – Khan

+0

@Khan因此它可以被方式來考慮爲接受的答案:) –

+0

....你在循環中提到-1 ...這是什麼意思 ??? – Khan

0

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

0

試試這個代碼。這一定會幫助你。

<?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++; 
     } 
    } 
?>