YesYo.com MintState Forums
뒤로    YesYo.com MintState BBS > Tech > PHP
검색
멤버이름    오토
비밀번호 
 

php 소스 압축 함수 php_strip_whitespace

페이지 정보

작성자 MintState 댓글 0건 조회 10,949회 작성일 09-02-17 11:31

본문

php 소스 압축 함수 php_strip_whitespace

js나 css는 Minnify이나 jsmin과 같은 유틸을 이용하여 용량을 줄일 수 있습니다.
그럼 php는 php_strip_whitespace로 줄일 수 있습니다.

php_strip_whitespace (PHP 5) - Return source with stripped comments and whitespace


아주 간단하죠 변수에 파일 이름만 넣으면 됩니다.
예로서 아래 소스를
<?php
// PHP comment here

/*
 * Another PHP comment
 */

echo        php_strip_whitespace(__FILE__);
// Newlines are considered whitespace, and are removed too:
do_nothing();
?>

적용 시키면 아래와 같이 결과값이 나옵니다.
<?php
 echo php_strip_whitespace(__FILE__); do_nothing(); ?>


하지만 php_strip_whitespace 내장 함수는 PHP5에서만 동작 합니다.
그럼 PHP4에서는 아래 함수를 사용하시면 됩니다.
<?php
//php_strip_whitespace PHP5에 있는 함수 대신 PHP4에 적용
function compress_php_src($src) {
		// Whitespaces left and right from this signs can be ignored
		static $IW = array(
				T_CONCAT_EQUAL,             // .=
				T_DOUBLE_ARROW,             // =>
				T_BOOLEAN_AND,              // &&
				T_BOOLEAN_OR,               // ||
				T_IS_EQUAL,                 // ==
				T_IS_NOT_EQUAL,             // != or <>
				T_IS_SMALLER_OR_EQUAL,      // <=
				T_IS_GREATER_OR_EQUAL,      // >=
				T_INC,                      // ++
				T_DEC,                      // --
				T_PLUS_EQUAL,               // +=
				T_MINUS_EQUAL,              // -=
				T_MUL_EQUAL,                // *=
				T_DIV_EQUAL,                // /=
				T_IS_IDENTICAL,             // ===
				T_IS_NOT_IDENTICAL,         // !==
				T_DOUBLE_COLON,             // ::
				T_PAAMAYIM_NEKUDOTAYIM,     // ::
				T_OBJECT_OPERATOR,          // ->
				T_DOLLAR_OPEN_CURLY_BRACES, // ${
				T_AND_EQUAL,                // &=
				T_MOD_EQUAL,                // %=
				T_XOR_EQUAL,                // ^=
				T_OR_EQUAL,                 // |=
				T_SL,                       // <<
				T_SR,                       // >>
				T_SL_EQUAL,                 // <<=
				T_SR_EQUAL,                 // >>=
		);
		if(is_file($src)) {
				if(!$src = file_get_contents($src)) {
						return false;
				}
		}
		$tokens = token_get_all($src);

		$new = "";
		$c = sizeof($tokens);
		$iw = false; // ignore whitespace
		$ih = false; // in HEREDOC
		$ls = "";    // last sign
		$ot = null;  // open tag
		for($i = 0; $i < $c; $i++) {
				$token = $tokens[$i];
				if(is_array($token)) {
						list($tn, $ts) = $token; // tokens: number, string, line
						$tname = token_name($tn);
						if($tn == T_INLINE_HTML) {
								$new .= $ts;
								$iw = false;
						} else {
								if($tn == T_OPEN_TAG) {
										if(strpos($ts, " ") || strpos($ts, "\n") || strpos($ts, "\t") || strpos($ts, "\r")) {
												$ts = rtrim($ts);
										}
										$ts .= " ";
										$new .= $ts;
										$ot = T_OPEN_TAG;
										$iw = true;
								} elseif($tn == T_OPEN_TAG_WITH_ECHO) {
										$new .= $ts;
										$ot = T_OPEN_TAG_WITH_ECHO;
										$iw = true;
								} elseif($tn == T_CLOSE_TAG) {
										if($ot == T_OPEN_TAG_WITH_ECHO) {
												$new = rtrim($new, "; ");
										} else {
												$ts = " ".$ts;
										}
										$new .= $ts;
										$ot = null;
										$iw = false;
								} elseif(in_array($tn, $IW)) {
										$new .= $ts;
										$iw = true;
								} elseif($tn == T_CONSTANT_ENCAPSED_STRING || $tn == T_ENCAPSED_AND_WHITESPACE) {
										if($ts[0] == '"') {
												$ts = addcslashes($ts, "\n\t\r");
										}
										$new .= $ts;
										$iw = true;
								} elseif($tn == T_WHITESPACE) {
										$nt = @$tokens[$i+1];
												if(!$iw && (!is_string($nt) || $nt == '$') && !in_array($nt[0], $IW)) {
												$new .= " ";
										}
										$iw = false;
								} elseif($tn == T_START_HEREDOC) {
										$new .= "<<<S\n";
										$iw = false;
										$ih = true; // in HEREDOC
								} elseif($tn == T_END_HEREDOC) {
										$new .= "S;";
										$iw = true;
										$ih = false; // in HEREDOC
										for($j = $i+1; $j < $c; $j++) {
												if(is_string($tokens[$j]) && $tokens[$j] == ";") {
														$i = $j;
														break;
												} else if($tokens[$j][0] == T_CLOSE_TAG) {
														break;
												}
										}
								} elseif($tn == T_COMMENT || $tn == T_DOC_COMMENT) {
										$iw = true;
								} else {
										if(!$ih) {
												$ts = strtolower($ts);
										}
										$new .= $ts;
										$iw = false;
								}
						}
						$ls = "";
				} else {
						if(($token != ";" && $token != ":") || $ls != $token) {
								$new .= $token;
								$ls = $token;
						}
						$iw = true;
				}
		}
		return $new;
}
?>


For example:


And the result is:


$src에 파일 이름을 넣어도 됩니다. 파일을 검사해 있으면 file_get_contents를 이용하여 파일을 읽어 옮니다.
첨부 파일
파일 종류: php compress_php_src.php (3.9K, 23 views)

댓글목록

등록된 댓글이 없습니다.

Total 165건 2 페이지
PHP 목록
번호 제목 글쓴이 조회 날짜
140 MintState 14008 07-02
139 MintState 12133 06-30
138 MintState 18061 04-28
137 MintState 11626 02-12
136 MintState 19761 01-13
135 MintState 12041 10-09
134 MintState 13763 08-25
133 MintState 10970 07-28
132 MintState 13231 04-28
131 MintState 16912 04-09
130 MintState 11753 04-06
129 MintState 9383 02-25
128 MintState 12038 02-25
127 MintState 8552 02-23
126 MintState 7798 02-23
125 MintState 11621 02-23
124 MintState 12110 02-17
열람중 MintState 10950 02-17
122 MintState 12925 11-17
121 MintState 12804 11-17
120 MintState 8302 11-17
119 MintState 12964 11-17
118 MintState 9558 11-17
117 MintState 11256 11-10
116 MintState 10095 11-10
게시물 검색
모바일 버전으로 보기
CopyRight ©2004 - 2019, YesYo.com MintState. ™