PHP でデータベースから記事を読み込んできて、そこに PHP コードが埋め込まれている場合に、その PHP コードをさらに実行して文字列を生成することができたら、ブログの記事管理がもっと楽になりそうだなぁと思い、出来ないか試してみました。eval() を使ってみたところ、簡単に実現することができましたので、メモしておきます。
以下は任意のテキストから <?php ... ?> の部分を抽出する関数です。
function extractPhpCode($html)
{
$phpBeginTag = "<?php";
$phpEndTag = "?>";
$phpBeginTagPos = strpos($html, $phpBeginTag);
if ($phpBeginTagPos == FALSE)
{
return null;
}
$phpBeginPos = $phpBeginTagPos + strlen($phpBeginTag);
$tmp = substr($html, $phpBeginPos);
$phpCodeLength = strpos($tmp, $phpEndTag);
return substr($tmp, 0, $phpCodeLength);
}
以下は上記関数を利用して HTML テキストの PHP コードを実行し、戻り値の文字列を元の PHP コードと置換する例です。元コードの置換は preg_replace を使うことで簡単に置換できました。
$phpCode = extractPhpCode($html);
if ($phpCode != null)
{
$insertText = eval($phpCode);
if ($insertText == null)
{
$insertText = "";
}
// php コード部分を戻り値で置換
$replacedHtml = preg_replace("/<\?php[\s\S]*\?>/", $insertText, $html);
}
echo $replacedHtml;
これで記事に PHP を埋め込めるようになったので、記事を書くときに機械的な処理を楽に記述できるようになりました。
ただし、eval() は php.net に警告があるようにセキュリティ上のリスクが高いので利用する際は注意が必要です。