| -Hormold- |
29.03.2009 20:20 |
Сжатие php кода путём удаления комментариев, пробелов и т.п.
Собственно, функции:
Максимальное сжатие:
PHP код:
<?
function compress_code($code) {
$array = token_get_all($code);
$ret = "";
for($i = 0; $i < count($array); $i++) {
$obj = $array[$i];
if(is_string($obj))
$ret .= $obj;
else {
$a = $obj[0];
$s = $obj[1];
if($a == T_ABSTRACT || $a == T_CASE || $a == T_CLASS || $a == T_CLONE || $a == T_CONST || $a == T_DECLARE || $a == T_ECHO || $a == T_ELSE || $a == T_FINAL || $a == T_FUNCTION || $a == T_GLOBAL || $a == T_INCLUDE || $a == T_INCLUDE_ONCE || $a == T_INTERFACE || $a == T_NEW || $a == T_OLD_FUNCTION || $a == T_PRINT || $a == T_PRIVATE || $a == T_PUBLIC || $a == T_PROTECTED || $a == T_RETURN || $a == T_REQUIRE || $a == T_REQUIRE_ONCE || $a == T_STATIC || $a == T_PROTECTED || $a == T_THROW || $a == T_USE || $a == T_VAR || $a == T_LNUMBER)
$ret .= strtolower($s)." ";
if($a == T_AND_EQUAL || $a == T_CHARACTER || $a == T_CONCAT_EQUAL || $a == T_CONSTANT_ENCAPSED_STRING || $a == T_CURLY_OPEN || $a == T_DEC || $a == T_DIV_EQUAL || $a == T_DOLLAR_OPEN_CURLY_BRACES || $a == T_DOUBLE_ARROW || $a == T_DOUBLE_COLON || $a == T_INC || $a == T_INLINE_HTML || $a == T_IS_EQUAL || $a == T_IS_GREATER_OR_EQUAL || $a == T_IS_IDENTICAL || $a == T_IS_SMALLER_OR_EQUAL || $a == T_MINUS_EQUAL || $a == T_MUL_EQUAL || $a == T_MOD_EQUAL || $a == T_OPEN_TAG_WITH_ECHO || $a == T_OR_EQUAL || $a == T_PAAMAYIM_NEKUDOTAYIM || $a == T_PLUS_EQUAL || $a == T_SL || $a == T_SL_EQUAL || $a == T_SR || $a == T_SR_EQUAL || $a == T_START_HEREDOC || $a == T_STRING || $a == T_ENCAPSED_AND_WHITESPACE || $a == T_NUM_STRING || $a == T_STRING_VARNAME || $a == T_XOR_EQUAL || $a == T_OBJECT_OPERATOR || $a == T_IS_NOT_EQUAL || $a == T_IS_NOT_IDENTICAL)
$ret .= $s;
if($a == T_AS || $a == T_BOOLEAN_AND || $a == T_BOOLEAN_OR || $a == T_EXTENDS || $a == T_IMPLEMENTS || $a == T_INSTANCEOF || $a == T_LOGICAL_AND || $a == T_LOGICAL_OR || $a == T_LOGICAL_XOR)
$ret .= " ".strtolower($s)." ";
if($a == T_CLASS_C || $a == T_DIR || $a == T_FILE || $a == T_FUNC_C || $a == T_LINE || $a == T_METHOD_C || $a == T_NS_C)
$ret .= strtoupper($s);
if($a == T_ARRAY || $a == T_ARRAY_CAST || $a == T_BOOL_CAST || $a == T_BREAK || $a == T_CATCH || $a == T_CONTINUE || $a == T_DEFAULT || $a == T_DO || $a == T_DOUBLE_CAST || $a == T_ELSEIF || $a == T_EMPTY || $a == T_ENDDECLARE || $a == T_ENDFOR || $a == T_ENDFOREACH || $a == T_ENDIF || $a == T_ENDSWITCH || $a == T_ENDWHILE || $a == T_WHILE || $a == T_EVAL || $a == T_EXIT || $a == T_FOR || $a == T_FOREACH || $a == T_HALT_COMPILER || $a == T_IF || $a == T_INT_CAST || $a == T_ISSET || $a == T_LIST || $a == T_OBJECT_CAST || $a == T_STRING_CAST || $a == T_SWITCH || $a == T_TRY || $a == T_UNSET || $a == T_UNSET_CAST)
$ret .= strtolower($s);
if($a == T_CLOSE_TAG)
$ret .= " ".$s;
if($a == T_DNUMBER)
$ret .= $s." ";
if($a == T_END_HEREDOC) {
$ret .= $s.";\r\n";
$i++;
}
if($a == T_OPEN_TAG)
$ret .= trim(strtolower($s))." ";
if($a == T_VARIABLE) {
if($s == '$HTTP_POST_VARS')
$s = '$_POST';
if($s == '$HTTP_GET_VARS')
$s = '$_GET';
if($s == '$HTTP_REQUEST_VARS')
$s = '$_REQUEST';
if($s == '$HTTP_COOKIE_VARS')
$s = '$_COOKIE';
if($s == '$HTTP_POST_FILES')
$s = '$_FILES';
if($s == '$HTTP_SERVER_VARS')
$s = '$_SERVER';
if($s == '$HTTP_SESSION_VARS')
$s = '$_SESSION';
$ret .= $s;
}
}
}
$ret = preg_replace("#<\?php#is","<?",$ret);
$ret = preg_replace("#php \?>#is","?>",$ret);
$ret = str_replace("<? ?>","",$ret);
return $ret;
}
?>
Только удаление комментраиев:
PHP код:
function remove_comments($code) {
$array = token_get_all($code);
$ret = "";
for($i = 0; $i < count($array); $i++) {
$obj = $array[$i];
if(is_string($obj))
$ret .= $obj;
else {
if(!strstr(token_name($obj[0]),"COMMENT"))
$ret .= $obj[1];
}
}
return $ret;
}
Пример:
PHP код:
$cnt=compress_code(file_get_contents('script.php'));
file_put_contents('script.php',$cnt);
(C) Eugen, с tem.dp.ua
|