Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
|
Сжатие php кода путём удаления комментариев, пробелов и т.п. |

29.03.2009, 20:20
|
|
Постоянный
Регистрация: 29.09.2007
Сообщений: 617
Провел на форуме: 3250478
Репутация:
999
|
|
Сжатие 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
|
|
|

29.03.2009, 20:28
|
|
Banned
Регистрация: 14.01.2009
Сообщений: 515
Провел на форуме: 1996429
Репутация:
468
|
|
ИНтересно, но безполезно)
|
|
|

29.03.2009, 20:29
|
|
Постоянный
Регистрация: 29.09.2007
Сообщений: 617
Провел на форуме: 3250478
Репутация:
999
|
|
Почему, иногда несколько бывает даже очень полезно =)
|
|
|

29.03.2009, 20:48
|
|
Members of Antichat - Level 5
Регистрация: 25.02.2007
Сообщений: 495
Провел на форуме: 3244717
Репутация:
1980
|
|
автор видимо не в курсе, что существует функция php_strip_whitespace()
|
|
|

29.03.2009, 20:56
|
|
Постоянный
Регистрация: 29.09.2007
Сообщений: 617
Провел на форуме: 3250478
Репутация:
999
|
|
Наверное =)
Но там же не только комменты...
|
|
|

29.03.2009, 20:57
|
|
Познавший АНТИЧАТ
Регистрация: 01.05.2006
Сообщений: 1,021
Провел на форуме: 3424739
Репутация:
921
|
|
против я этих сжатий которые только сделают код нечитабельным а уменьшат на пару килобайт
|
|
|

29.03.2009, 20:59
|
|
Динозавр
Регистрация: 10.01.2008
Сообщений: 2,841
Провел на форуме: 9220514
Репутация:
3338
|
|
2 Sharky:
а зачем тебе читабельный шелл, например?
|
|
|

29.03.2009, 21:18
|
|
Участник форума
Регистрация: 03.07.2008
Сообщений: 177
Провел на форуме: 644324
Репутация:
11
|
|
Есть небольшой недочет..
целых два огромнейших пробела!! 
|
|
|

29.03.2009, 21:25
|
|
Members of Antichat - Level 5
Регистрация: 01.04.2007
Сообщений: 1,268
Провел на форуме: 10046345
Репутация:
4589
|
|
PHP код:
$code = '<? /* тут типа куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча куча кода */ ?>';
$code = base64_encode(gzdeflate($code));
echo $code;
Распаковка - base64 decode && gzinflate && eval
|
|
|

29.03.2009, 22:10
|
|
Постоянный
Регистрация: 12.07.2006
Сообщений: 327
Провел на форуме: 1654818
Репутация:
117
|
|
-Hormold-
надо ещо все переменные переименовывать в короткие названия типо, $a $b.
а потом base64_encode(gzdeflate($code). для шела самое то.
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|