Сжатие php кода путём удаления комментариев, пробелов и т.п.

Discussion in 'PHP' started by -Hormold-, 29 Mar 2009.

  1. -Hormold-

    -Hormold- Кто, если не ты?

    Joined:
    29 Sep 2007
    Messages:
    418
    Likes Received:
    290
    Reputations:
    44
    Собственно, функции:

    Максимальное сжатие:
    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
     
    4 people like this.
  2. Krist_ALL

    Krist_ALL Banned

    Joined:
    14 Jan 2009
    Messages:
    436
    Likes Received:
    193
    Reputations:
    24
    ИНтересно, но безполезно)
     
  3. -Hormold-

    -Hormold- Кто, если не ты?

    Joined:
    29 Sep 2007
    Messages:
    418
    Likes Received:
    290
    Reputations:
    44
    Почему, иногда несколько бывает даже очень полезно =)
     
  4. [Raz0r]

    [Raz0r] Elder - Старейшина

    Joined:
    25 Feb 2007
    Messages:
    425
    Likes Received:
    484
    Reputations:
    295
    автор видимо не в курсе, что существует функция php_strip_whitespace()
     
    1 person likes this.
  5. -Hormold-

    -Hormold- Кто, если не ты?

    Joined:
    29 Sep 2007
    Messages:
    418
    Likes Received:
    290
    Reputations:
    44
    Наверное =)
    Но там же не только комменты...
     
  6. Sharky

    Sharky Elder - Старейшина

    Joined:
    1 May 2006
    Messages:
    487
    Likes Received:
    312
    Reputations:
    46
    против я этих сжатий которые только сделают код нечитабельным а уменьшат на пару килобайт
     
  7. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    2 Sharky:

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

    rcc0023 Elder - Старейшина

    Joined:
    3 Jul 2008
    Messages:
    100
    Likes Received:
    6
    Reputations:
    0
    Есть небольшой недочет..

    целых два огромнейших пробела!! ;)
     
  9. BlackSun

    BlackSun Banned

    Joined:
    1 Apr 2007
    Messages:
    989
    Likes Received:
    1,168
    Reputations:
    446
    PHP:
    $code = '<? /* тут типа куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча кода */ ?>';
    $code = base64_encode(gzdeflate($code));
    echo $code;
    Распаковка - base64 decode && gzinflate && eval
     
    1 person likes this.
  10. zeppe1in

    zeppe1in Elder - Старейшина

    Joined:
    12 Jul 2006
    Messages:
    343
    Likes Received:
    66
    Reputations:
    18
    -Hormold-
    надо ещо все переменные переименовывать в короткие названия типо, $a $b.
    а потом base64_encode(gzdeflate($code). для шела самое то.
     
  11. Sn@k3

    Sn@k3 Elder - Старейшина

    Joined:
    13 Apr 2006
    Messages:
    1,000
    Likes Received:
    437
    Reputations:
    90
    hormold , реал бесполезно)) ну если конечно идёт вопрос на мегабайты))) их труднее заливать, но в нае время пох на это.
     
  12. Sharky

    Sharky Elder - Старейшина

    Joined:
    1 May 2006
    Messages:
    487
    Likes Received:
    312
    Reputations:
    46
    а если не например?
     
  13. Soviet[HZ]

    Soviet[HZ] Elder - Старейшина

    Joined:
    20 Jul 2007
    Messages:
    87
    Likes Received:
    40
    Reputations:
    22
    А если не например, то какая в этом практическая польза? хоть что нить....
     
  14. nerezus

    nerezus Banned

    Joined:
    12 Aug 2004
    Messages:
    3,191
    Likes Received:
    727
    Reputations:
    266
    Нету пользы.