php - ファイルを読み込んで出力 - ソースファイルを読みこんで出力

 
1. 概要
2. ソース

1. 概要

 例えば・・・ですが。  今から書くソースもこの項で紹介して「シンタックスハイライト - prism.js」で表示させるのですが・・・。  実際に書いて動作させたソースをいちいちコピーして貼り付けるのが面倒になってきたのです。  そこにあるソースなのですから、パスつきのファイル名をいれておけばそのまま表示できるっていうのは、楽だなぁと思ったのです。  ネタがばれない範囲のソースを置けばいいのです。  当然、バグがあればそれもばればれで大恥をかくことにはなるのですが。  恥をかくのは上達への近道だとも思います。

2. ソース

 これが実際のソースでして・・・。このソース自身を使用して表示しています。
<?php
$filename = NULL;

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

//  ソースファイルの読込と特殊文字の置換

$document = file_get_contents("$filename", FILE_USE_INCLUDE_PATH);
$document = str_replace('&', '&amp;', $document);
$document = str_replace('<', '&lt;', $document);
$document = str_replace('>', '&gt;', $document);

// 拡張子を取得してシンタックスハイライトの種類を変える

$extname  = pathinfo($filename, PATHINFO_EXTENSION);
$filename = pathinfo($filename, PATHINFO_FILENAME);

$ext = 'plain';

switch($extname)
{
case 'c':
case 'cpp':
case 'php':
    $ext = $extname;
    break;

case 'cs':
	$ext = 'csharp';
	break;

case 'rb':
	$ext = 'ruby';
	break;

case 'xml':
	$ext = 'markup';
	break;

default:
    if ($filename == '')
    {
        $ext = 'properties';
    }
    break;
}

print('<pre class="line-numbers"><code class="language-'.$ext.'">');
print("$document");

//  pathinfo の動作を確認 した残骸
// $dirname  = pathinfo($filename, PATHINFO_DIRNAME);
// $basename = pathinfo($filename, PATHINFO_BASENAME);
// $extname  = pathinfo($filename, PATHINFO_EXTENSION);
// $filename = pathinfo($filename, PATHINFO_FILENAME);
// print("PATHINFO_DIRNAME   [$dirname]\n");
// print("PATHINFO_BASENAME  [$basename]\n");
// print("PATHINFO_EXTENSION [$extname]\n");
// print("PATHINFO_FILENAME  [$filename]\n");

print('</code></pre>');
?>

 17~19行は、シンタックスハイライト内で表示して、タグを有効にさせないための工夫です。  17行目は他のものより前に置かないと、全部 & が &amp; に置換されてしまいます。  23~40行は、ファイルの拡張子により、シンタックスハイライトの種類を分けています。  SSI が有効であれば

<!--#include virtual="/パス/ソースファイル名.php?filename=表示するファイル名" -->
 と記述することで、この項の先頭の表示が得られます。  表示するファイル名は絶対パスで指定します。  ファイルの実行方法や引数の与え方は、サーバによって異なりますのでそのあたりはサーバに合わせて適宜、HTML の記述を変えていけばよいかと思います。
 
 
カウンタバックグラウンド