PHPのソースコードを軽量化する為に、改行やスペースを削除しようと思います。

str_replace(array(" ","\n"),"",$source);
としてみたのですが、これだとソース内の「function」や「class」が無効になってしまいます。
他に良い書き方があったら教えてください。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2011/06/14 20:14:38
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答1件)

id:y-kawaz No.1

回答回数1422ベストアンサー獲得回数226

ポイント100pt

こんな感じでどうでしょう?

<?php

/* 
 * PHPソースコード内の余分な空白を可能なかぎり削除します。
 *
 * ・単純に空白文字を消してしまうと色々問題が起こるので段階的に置換してみます。
 * ・文字列リテラル中の空白やコメントっぽい文字列のケアは対応外。
 *   例) "「こ   の」空白は必要。//ここはコメントじゃないよ!"
 */
function cleanWhiteSpace($source) {
        //複数行コメンを削除
        $source = preg_replace('|/\*.*?\*/|sm', '', $source);
        //1行コメントを削除
        $source = preg_replace('/\/\/.*/', '', $source);
        #シャープによる1行コメントも削除
        $source = preg_replace("/\x23.*/", '', $source);
        //空白文字の連続を半角スペース一つにする
        $source = preg_replace('/\s+/', "\x20", $source);
        //記号前後の空白を削除
        $source = preg_replace('/\s?([\(\)\[\]\{\},\;:=<>\+\-\/\*\%\!\?&\|])\s?/', '$1', $source);
        //最後のphpの閉じタグは無くて良いのでついでに削除
        $source = preg_replace('/\?>$/s', '', $source);
        return $source;
}

//テスト
echo cleanWhiteSpace(file_get_contents(__FILE__));

?>

↓実行結果

$ php a.php
<?php function cleanWhiteSpace($source){$source=preg_replace('|/\*.*?\*/|sm','',$source);$source=preg_replace('/\/\/.*/','',$source);$source=preg_replace("/\x23.*/",'',$source);$source=preg_replace('/\s+/',"\x20",$source);$source=preg_replace('/\s?([\(\)\[\]\{\},\;:=<>\+\-\/\*\%\!\?&\|])\s?/','$1',$source);$source=preg_replace('/\?>$/s','',$source);return $source;}echo cleanWhiteSpace(file_get_contents(__FILE__));

文字列リテラル中の空白やPHPコメントに見える文字列まで削除してしまうのが致命的な欠点ですが、そこに目を瞑れればそこそこ綺麗に動く気がします。

  • id:windofjuly
    うぃんど 2011/06/14 19:12:58
    >軽量化する為に、改行やスペースを削除
     
    (1)軽量化とはファイルサイズを小さくするという意味ですか?
    preg_replaceで「空白が連続している箇所は1つに」して「改行コードは全て削除」すればいいですね
    (2)軽量化とは動作を軽くするという意味ですか?
    テキストから中間コードに変換する際に関係するといえば関係しますが、
    スクリプトが短ければ短いほど無視できるほどの時間となりますし、
    スクリプトが長ければ長いほど中間コードを使って実際に処理を行う時間のほうが問題となりますので、
    いずれにしても残念ながら改行やスペースを削っても実質変わらないのですよ
     
    などと書いてから気づいたのだけど、、、回答拒否されてますね(苦笑)
    せっかく書いたのでコメントのほうに載せておきます
  • id:y-kawaz
    windofjulyさんと同じく最初に思ったことですが、ソースコードの空白除去はファイルサイズの圧縮にはなるかもしれませんが、高速化という観点からは殆ど意味のない行為です。高速化をしたいならPHPアクセラレータを使いましょう。

    ただ、今回は暇だったのでちょっとそれっぽい回答をしてみました。
  • id:kt26
    y-kawazさん回答有り難うございます。なぜか私が開く前に公開されていましたが・・。

    あと、私は自分がやろうとしている事の「答え」を知りたいから質問したわけで、私の目的や考え方を指摘していただきたい為に質問したのではありません。

    単にコードを出して「これが出来ない」と書くと誰も答えてくれないと思い、「スペースと改行を削除しようとした理由」を書く為に、冒頭に「軽量化の為に~」と入れただけです。まさかそこを突っ込まれるとは思いもしませんでした。

    質問の仕方が悪かったと反省します。
  • id:GAGASAN
    自分もphpを軽くしたいクチでここにたどりついちゃいました。
    すぐに『え?』とわかる程度なのでまだ大丈夫だったと思いますw

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません