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

Форум АНТИЧАТ (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). для шела самое то.

Sn@k3 29.03.2009 23:17

hormold , реал бесполезно)) ну если конечно идёт вопрос на мегабайты))) их труднее заливать, но в нае время пох на это.

Sharky 30.03.2009 01:09

Цитата:

Сообщение от Pashkela
2 Sharky:

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

а если не например?

Soviet[HZ] 30.03.2009 01:24

А если не например, то какая в этом практическая польза? хоть что нить....

nerezus 30.03.2009 02:34

Нету пользы.


Время: 00:43