2016-10-05 5 views
0

PHPで定義されたすべての内部関数を検出する正規表現付きのスクリプトがあります。スクリプトは正常に動作していますが、改行に問題があります。すべてのPHP関数を改行で検出する

このスクリプトでは、PHPの内部関数と定義された関数を検索しています。すべての関数を新しい関数 "no_function()"に置き換える必要があります。私のような機能を持っていた

$functions=get_defined_functions(); 
for($i=0;$i<count($functions["internal"]);$i++){ 
    //Include array functions 
    if($functions["internal"][$i]=="array"||$functions["internal"][$i]=="array_push"){ 
    }else{ 
     $code=preg_replace('#('.$functions["internal"][$i].'[ |\n|\r|\t]*\([ |\n|\r|\t]*.*\))#i',"no_function()",$code); 
    } 
} 

str_replace($search,$replace,$string); 
それは( no_functionと交換しますので、関数が呼び出されません

)。

正常に動作します。しかし、私はそのような関数を持っている場合:

str_replace($search, 
$replace, 
$string); 

正規表現はそれを検出しませんが、PHPもそれを実行します。私は正規表現を使っています。誰か助けてくれますか?

すべての応答ありがとうございます。

+1

あなたの質問は全く明確ではありません。あなたがしようとしていることをよく説明する時間を取る。入力例とそれに対応する出力を追加します。私はこの時点では分類することはできませんが、あなたは間違ったやり方をしようとしていると感じています。 –

+0

ご回答いただきありがとうございます。私は質問を更新しました、そして、それが今より理解できることを願っています。 –

+1

'。* \))#i''を'。*?\))#si''に置き換えてください。しかし、それは間違いなく問題に近づく方法ではありません。正しいパーサーが必要です。 –

答えて

0

ご使用のケースが不明です。しかし、ネームスペースを使用してネームスペース内の内部関数を再宣言することで、内部関数をリターンなしで置き換える素早いハックを行うことができます。

まず、ダミーの内部関数で構成されるファイルを作成します。

<?php 
$funcs = get_defined_functions(); 
$output = "<?php\n"; 
$output .= "namespace example;"; 
foreach ($funcs['internal'] as $func_name) { 
    $output.= "function $func_name() {}\n"; 
} 
file_put_contents('dummy_funcs.php', $output); 

次に、別のファイル(おそらく共通のブートストラップ)にダミー関数を早期に組み込みます。

<?php 
namespace example; 
include 'dummy_funcs.php'; 

echo str_replace('w', 'l', 'bawls'); 

出力しません。

ここで、コードを編集する必要はありません(インクルードの追加以外)。しかし、それはあなたの既存の名前空間に依存する痛みである可能性があります。

関連する問題