php - ファイルを読み込んで出力 - さらに行数を指定する

 
1. 概要
2. ソース

1. 概要

 前項で作成したものでは物足りなくなってきました・・・。  前項で作成したものでは、毎回ソース全行を出力してしまうのですが・・・。  全行でなく一部のみ出力したいことがあるのです。  ファイル指定時に start=n1、end=n2 として、start の行から出力を開始して、end がなければ末尾まで、あれば end の行まで出力させたいのです・・・。  やってみるか・・・。

2. ソース

 書けたみたいなので、そのソースで表示します。  前半の変更の大きな部分。
$start = NULL;
$end = NULL;

if (isset($_GET['filename']))
{
    $filename = $_GET['filename'];
}
else
{
    print("ファイル名が指定されていません\n");
    exit;
}

//	開始行・終了行があれば指定する

if (isset($_GET['start']))
{
	$start = $_GET['start'];
}

if (isset($_GET['end']))
{
	$end = $_GET['end'];
}

//  ソースファイルを読みこんで改行で分割

$original = file_get_contents("$filename", FILE_USE_INCLUDE_PATH);
$expload = explode("\n", $original);
$document = "";

for ($i=0; $i<count($expload); $i++)
{
	//	開始行が定義してあれば改行までは割愛

	if ($start != NULL)
	{
		if ($i < $start-1)
		{
			continue;
		}
	}

	//	終了行が定義してあれば終了行で終了

	if ($end != NULL)
	{
		if ($i > $end-1)
		{
			break;
		}
	}

	$document .= $expload[$i]."\n";
}
 後半の変更部分。  開始行があれば、その行番号を起点として出力するようにしています。
//	開始行が定義してある場合はその行番号から開始

if ($start != NULL)
{
	print('<pre class="line-numbers" data-start="'.$start.'"><code class="language-'.$ext.'">');
}
else
{
	print('<pre class="line-numbers"><code class="language-'.$ext.'">');
}