eval関数

2007/02/12 | マイPHPメモ

だいたいどんな言語でも存在するeval関数についての話題。

もともとPHPはシフトJISはサポートしていない。プログラムを設置する際に、その発注先はプログラムの知識がないことが多いし、しかもそういうクライアントに限って「あとで自分たちでも改変できるように」なんて無茶なリクエストをすることが多々ある。そういうクライアントはたいていの場合文字コードに関しての知識はないに等しい。
そんなときにeval関数は便利だ。設定ファイルをシフトJISで書いてしまい、それを読み込む際に文字コードを変換して、さらにevalしてPHP化してしまうわけだ。例えば・・・。

設定ファイルを以下のように記述する(ファイル名「setting.txt」)。
define(‘MIDASHI1′,’見出し1′);

ここで設定ファイルには<?phpといったお決まりの文句を書かないことがキーポイントだ。でもって、このファイルは誰でも修正できるようシフトJISで書いておく。
このファイルをPHPプログラムから以下のようにして読み込めばOKだ。

<?php
$setting=file_get_contents(‘setting.txt’);
$setting=mb_convert_encoding($setting,’EUC-JP’,’SJIS’);
if(@eval($setting)===false){
(PHP化失敗)
}else{
(処理を書く)
}
?>

ここで@eval($setting)===falseと「===」でくくるのがミソ。元のファイルに構文エラーがなかった場合に、元のファイル中にreturn文がなかった場合、@eval($setting)はNULLを返してしまうからだ。
if(!@eval($setting){〜}なんて記述をしてしまうと、永久に???の世界の中にとどまることになってしまうので注意が必要だ。

諸刃の刃ではあるのだが、eval関数というのは便利だ。

コメントを残す


守谷市(まちの情報ポータル) 無料アンケートレンタルjpForm.net