構文ハイライト表示
PHPファイルの構文ハイライト表示について。
構文ハイライト表示とは?
PHPが利用可能な多くのウェブサーバでは、拡張子がphps
のファイルは自動的に構文ハイライト表示されるように(初期設定で)設定されています。例えばexample.phps
のようなファイルは、構文ハイライトしたソースファイルとして表示されます。
次の例は、foo.php
ファイルをexample.php
ファイルで構文ハイライト表示した際の例です。
foo.php
ファイル<?php phpinfo(); ?>
example.php
ファイル<?php highlight_file("foo.php") ?>
PHP 4 では、上の例の出力は以下のようになります。
<code><font color="#000000">
<font color="#0000BB"><?php phpinfo</font><font color="#007700">(); </font><font color="#0000BB">?></font>
</font>
</code>
また、PHP 5 では、上の例の出力は以下のようになります。
<code><span style="color: #000000">
<span style="color: #0000BB"><?php phpinfo</span><span style="color: #007700">(); </span><span style="color: #0000BB">?></span>
</span>
</code>
PHP 5 であれば、X/HTMLで非推奨のfont
要素ではなくspan
要素でソースがハイライト化されますが、code
要素があるのだからspan
要素を使うのはマークアップとして適切ではないと思います。
注釈
- PHPのハイライタでは、改行は行区切りタグ(
<br />
)で出力します。
構文ハイライト表示クラス
クラスの作成経緯
本サイトでのPHPソースの公開に際して、拡張子が違えど中身が同じ2つのファイル(拡張子がphp
とphps
のファイル)を態々用意したくはありませんでした。そこで、Apacheの設定ファイル(.htaccess
)に次のような記述を書いて試してみましたが駄目でした。
RewriteRule ^(.*)\.phps$ $1\.php [T=application/x-httpd-php-source, L]
そこで、highlight_file
関数を使った簡素なソース表示用スクリプトを書いてみました。ただ、highlight_file
及びhighlight_string
関数(PHP組込みの構文ハイライタ)の出力は、X/HTMLとして好ましいものではありません。そこで、即席ですが構文ハイライト表示の為のクラスを作成しました。
HighlightSource
クラス
public class HighlightSource extends Object
構造
コンストラクタ
public void HighlightSource()
- PHPファイルの構文ハイライト表示を行います。
メソッド
public Array getHighlight()
- 構文ハイライト表示モードの色の取得を行います。
- 返り値
- 構文ハイライト表示モードの色。
array( 'string' => string color, 'comment' => string color, 'keyword' => string color, 'bg' => string color, 'default' => string color, 'html' => string color );
public void setHighlight(Array $highlight)
- 構文ハイライト表示モードの色の設定を行います。
- 引数
Array $highlight
- 構文ハイライト表示モードの色を配列で指定する。
$highlight = array( 'string' => string color, 'comment' => string color, 'keyword' => string color, 'bg' => string color, 'default' => string color, 'html' => string color );
public void restoreHighlight()
- 構文ハイライト表示モードの色の設定を元に戻します。
public String dump(String $filename)
- 構文ハイライトします。
- 引数
String $filename
- ファイルのパス。
- 返り値
- 成功時に構文ハイライトしたHTMLコードを、失敗時には
FALSE
を返します。
HighlightSourceStrict
クラス
public class HighlightSourceStrict extends HighlightSource
構造
コンストラクタ
public void HighlightSourceStrict()
- PHPファイルの構文ハイライト表示(Strict版)を行います。
プロパティ
public Integer $parseType
- PHP5用のみ。構文ハイライト表示をstrictな構文に置換する際の処理方法を設定します。
0
なら正規表現検索(デフォルト)、1
ならXMLパーサを使用します。
メソッド
HighlightSource
クラスをご覧下さい。
クラスの使用例
次の例は、HighlightSource
クラスを使用したサンプルです。
<?php
ini_set("include_path", "./");
// require_once("org/purl/net/osamurai/misc/HighlightSource.php"); // for PHP 4
require_once("misc/HighlightSource.php"); // for PHP 5
$phps = new HighlightSource;
$filename = 'foo.php';
$highlight = array('string' => "#DD0000", 'comment' => "#FF8000", 'keyword' => "#007700",
'bg' => "#FFFFFF", 'default' => "#0000BB", 'html' => "#000000");
$phps->setHighlight($highlight);
echo $phps->dump($filename);
unset($phps);
?>
上の例の出力は、highlight_file
関数を使用した時と同じ結果を返します。この際、setHighlight
メソッドで設定した色が表示色として反映されます。このHighlightSource
クラスを厳密なHTMLを返すように拡張したクラスがHighlightSourceStrict
クラスです。
次の例は、HighlightSourceStrict
クラスを使用したサンプルです。
<?php
ini_set("include_path", "./");
// require_once("org/purl/net/osamurai/misc/HighlightSourceStrict.php"); // for PHP 4
require_once("misc/HighlightSourceStrict.php"); // for PHP 5
$phps = new HighlightSourceStrict;
$filename = 'foo.php';
$highlight = array('string' => "#DD0000", 'comment' => "#FF8000", 'keyword' => "#007700",
'bg' => "#FFFFFF", 'default' => "#0000BB", 'html' => "#000000");
$phps->setHighlight($highlight);
echo $phps->dump($filename);
unset($phps);
?>
上の例の出力は、次のようになります。
<pre class="php-highlight"><code class="html"><code class="default"><?php phpinfo</code><code class="keyword">();</code> <code class="default">?></code></code></pre>
注釈
HighlightSourceStrict
クラスを使用する場合には、色設定は外部スタイルシートで行います。- 構文ハイライト表示するソースコードに改行・空白などの制御文字が含まれる場合、PHPの
highlight_file
関数では、制御文字の直前のコードの要素に包括します。これをHighlightSourceStrict
クラスのdump
メソッドでは、直前のコードの要素に包括せず、尚且つbr
タグを使わずに厳密なマークアップで表示できます。 HighlightSourceStrict
クラスが返す結果は、XHTML 1.0/1.1 のDTDでも定義されている要素を使用していますが、最上位要素(pre要素)に名前空間を示さないので、XML/XHTMLでご利用の際にはそのことに注意して下さい。- ご利用の際の注意事項などもご覧下さい。
PHPソースビューア
概要
構文ハイライト表示クラスを使用した、PHPファイルのソースコードを表示する為のスクリプトです。本サイトでのPHPソースの公開にも使用しているスクリプトです。
ファイル一覧
注釈
- ご利用の際には、
define.default.php
をdefine.php
とファイル名を変更してからご利用ください。 View.php
,define.php
ファイルは、任意のディレクトリに格納して下さい。- ご利用の際の注意事項などもご覧下さい。
設定
必要であれば、設定ファイル(define.php
)で動作設定が行えます。設定ファイルをテキストエディッタで開き、コメント記述を参考にしながら編集して下さい。
使用方法
変換対象となるファイルのパスをView.php
のクエリーpath
に指定して使用します。クエリーpath
に指定する変換対象のファイルのパスは、設定ファイルの変数$ROOT_DIR
で指定されたディレクトリを起点としたパスを指定します。
http://www.example.com/psv/view.php?path=/foo.php
サーバソフトウェアがApacheで、尚且つmod_rewrite
モジュールが使用可能ならば、.htaccess
ファイルに次のような記述をすることで、拡張子がphps
のパスで要求された際にView.php
でソースを表示することができます(下記例では、phps
ファイルがある場合には、それを使います)。
RewriteEngine on
# 基となる名前に名前をrewriteして、php拡張子で存在確認する。
# もし存在すれば、その名前を取り、そうでなければオリジナルの状態(phps)のURLにrewriteする。
RewriteRule ^(.*)\.phps$ $1 [C,E=WasPHPS:yes]
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*)$ /php/psv/View.php?path=%{REQUEST_FILENAME}.php [S=1]
RewriteCond %{ENV:WasPHPS} ^yes$
RewriteRule ^(.*)$ $1.phps [L]