構文ハイライト表示
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]