2

スクリプトが完成したら、それらを最適化/変換して、ファイルが盗まれたとしても、ファイルが何をするのかを知るのが難しくなります。

$c = file_get_contents('source.php');

$newStr  = '';
$commentTokens = array(T_COMMENT);
if (defined('T_DOC_COMMENT'))
    $commentTokens[] = T_DOC_COMMENT; // PHP 5
if (defined('T_ML_COMMENT'))
    $commentTokens[] = T_ML_COMMENT;  // PHP 4
$tokens = token_get_all($c);
foreach ($tokens as $token) {
    if (is_array($token)) {
        if (in_array($token[0], $commentTokens))
            continue;
        $token = $token[1];
    }
    $newStr .= $token;
}

$newStr = str_replace (chr(13), '', $newStr);
$newStr = str_replace (chr(10), '', $newStr);
$newStr = preg_replace('/\s+/', ' ', $newStr);

$newStr「圧縮された」ものが含まれるようになりました。ほとんど大丈夫ですが、それは多くの空白を殺します。次のようなコードに空白がある場合:

if (true)
   {
        codeeee();
   }

次のように変換されます。

if (true)
{
codeeee();
}

そしてそれは大丈夫です。しかし、これの場合:

$a = '      var          ';

します:

$a = ' var ';

これは望ましくありません。これを正しく最適化するにはどうすればよいですか?何かアイデアはありますか?クラス名の名前変更などを考えています。

4

1 に答える 1

1

この回答の助けを借りて、すべての空白(改行を含む)を単一のスペースにトリミングするが、引用符('または")の間の空白を保持するこの正規表現を作成することができました。

preg_replace('/\G(?:"[^"]*"|\'[^\']*\'|[^"\'\s]+)*\K\s+/', ' ', $string);
于 2012-05-31T12:38:24.273 に答える