我有一个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行
如果我错了,请更正我的脚本...谢谢。
答案 0 :(得分: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 :(得分: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);
答案 2 :(得分: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++;
}
}
?>