ファイル内検索関数を作りたいのですが・・・
質問させて下さい。
PHPファイル内で危険な関数、非推奨になった関数が含まれているかをチェックするスクリプトを考えています。
php.iniにてdisable_functionsを使用すればいいのでしょうが、急に非推奨になったり、
コード規約で省かれたりと言った時に対処するような場合に使用したいと思っております。
コマンドラインから利用しようと思っているのですが、ここでは簡略化の為に引数を取って、1ファイル(check.php)のみに適用させています。
で、以下のように書いてみたのですが、全くエレガントな感じがしません。
自分としては、ファイルにHTMLに<table>にて整形したものを出力したいと考えています。
「どの関数が、どの行に、いくつあるのか」(フォルダを再帰的に調べる場合はパスも含める)
等を出力したいと考えています。
((search.php)
#!/usr/local/bin/php -q
<?php
$file = $argv[1];
if (!$file) {
die('このスクリプトは引数にphpファイルのパスを必要とします。');
}
//この中に該当する関数を書き入れる
$functions = array(
'preg_match',
'chdir',
'settype',
'system',
);
function checkFunc ($line, $functions, $n = 1)
{
foreach ($functions as $func)
{
if (strpos($line, $func) === FALSE)
{
continue;
}
else
{
echo($n . '行目に、' . $func . '()が含まれています。' . PHP_EOL);
}
}
}
$handle = fopen($file, 'r');
$r = 1;
while ($line = fgets($handle, 1024))
{
checkFunc($line, $functions, $r);
$r++;
}
fclose($handle);
((check.php))
<?php
$string = 'Hello, this is Tom. I love apple';
preg_match('/.*(apple)$/i', settype($string, 'string'), $result);
var_dump($result);
var_dump(getcwd());
chdir('../');
var_dump(getcwd());
もうちょっとスマートに書きたいのですが、アドバイスを頂けないでしょうか?
自分としてはecho()で出力していくのではなく、「どの関数が、どの行に、いくつあるのか」を貯めていって、
Smartyの変数にassign()で格納し出力といった感じにしたいと思っているのですが、
「どのファイルに」「何行目」、「どの関数が」、「何個」という各変数の扱い方(格納の仕方)が分かりませんでした。
Linux,PHP5.3.8です。
お礼
回答ありがとうございます!! おかげでうまく動作させることができました! うまく動作できたってのは,線形的に変化させることができたという意味です^^ 特にnum2strのところはコメントをもらわなかったらできていなかったです! また,知識を貸してもらうような機会があると重いますのでそのときにはまた,回答してくることを願います!