Писане на прост PHP Code Obfuscator - Блог за разработчици

PHP има магическа функция token_get_all, която анализира кода в токени и връща резултата като масив. Отхвърляйки ненужните части от кода, ще получим необходимия ни рафиниран код, който спокойно можем да дадем на непознати лели и чичовци за изяждане.

изпълнение на статична функция ($from, $to = null)

$file = file_get_contents ($from); $tokens = token_get_all ( $file ); $файл = '' ;

foreach ($токени като $токен)

if ( is_string ( $token ) ) < // ;<>[] $file .= $token ; > else if ( isset ( $token [ 1 ] ) && ! in_array ( $token [ 0 ] , self :: $_IGNORED_TOKENS ) )

$_token = $token [0];

$pre_spacer = ( $_token == T_AS $_token == T_EXTENDS $_token == T_IMPLEMENTS $_token == T_INSTANCEOF ) ? ' ' : '' ;

$post_spacer = ( $_token == T_VARIABLE $_token == T_DOUBLE_COLON $_token == T_STRING $_token == T_OBJECT_OPERATOR $_token == T_DOUBLE_ARROW $_token == T_CONSTANT_ENCAPSED_STRING $_token == T_L NUMBER $_token == T_NUM_STRING $_token == T_DOLLAR_OPEN_CURLY_BRACES $_token == T_CURLY_OPEN $_token == T_ENCAPSED_AND_WHITESPACE ) ? '' : ' ' ;

$file .= ($pre_spacer . $token [ 1 ] . $post_spacer ) ;

if ( self :: $_head ) < $file = себе си :: $_head. $ файл; >

if ( $to ) < @ mkdir (dirname ($to), 0, вярно); file_put_contents ($to, $file); >

По подразбиране вземаме текущата директория, като използваме fs::build_tree получаваме рекурсивен списък на всички файлове в тази папка (не давам кода на fs класа, напишете го сами), след това преминаваме през този списък с файлове и стартираме obfuscator::run за *.php файлове и простокопирайте файлове от различен тип. Конвертираният код се поставя със същата структура в папката, посочена в променливата $dir_to.

Стартира се от командния ред (конзола), където показва всички извършени действия.