Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   Сжатие php кода путём удаления комментариев, пробелов и т.п. (https://forum.antichat.xyz/showthread.php?t=113613)

-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

Krist_ALL 29.03.2009 20:28

ИНтересно, но безполезно)

-Hormold- 29.03.2009 20:29

Почему, иногда несколько бывает даже очень полезно =)

[Raz0r] 29.03.2009 20:48

автор видимо не в курсе, что существует функция php_strip_whitespace()

-Hormold- 29.03.2009 20:56

Наверное =)
Но там же не только комменты...

Sharky 29.03.2009 20:57

против я этих сжатий которые только сделают код нечитабельным а уменьшат на пару килобайт

Pashkela 29.03.2009 20:59

2 Sharky:

а зачем тебе читабельный шелл, например?

rcc0023 29.03.2009 21:18

Есть небольшой недочет..

Цитата:

else {$l_kod=7 ;};
целых два огромнейших пробела!! ;)

BlackSun 29.03.2009 21:25

PHP код:

$code = '<? /* тут типа куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча кода */ ?>';
$code = base64_encode(gzdeflate($code));
echo $code;

Распаковка - base64 decode && gzinflate && eval

zeppe1in 29.03.2009 22:10

-Hormold-
надо ещо все переменные переименовывать в короткие названия типо, $a $b.
а потом base64_encode(gzdeflate($code). для шела самое то.


Время: 15:58