<?php function strip_comments($fileName) { $source = file_get_contents($fileName); // $tokens = token_get_all($source); $result = ''; foreach ($tokens as $token) { if (!is_array($token)) { // 1- $result .= $token; } else { // - list($id, $value) = $token; switch ($id) { case T_COMMENT: case T_DOC_COMMENT: // break; default: // -> " " $result .= $value; break; } } } return $result; } ?>
<?php function getClasses($fileName) { $result = array(); $content = file_get_contents($fileName); $tokens = token_get_all($content); $waitingClassName = false; $waitingNamespace = false; $waitingNamespaceSeparator = false; $namespace = array(); for ($i = 0, $c = count($tokens); $i < $c; $i++) { if (is_array($tokens[$i])) { list($id, $value) = $tokens[$i]; switch ($id) { case T_NAMESPACE: $waitingNamespace = true; $waitingNamespaceSeparator = false; $namespace = array(); break; case T_CLASS: case T_INTERFACE: $waitingClassName = true; break; case T_STRING: if ($waitingNamespace) { $namespace[] = $value; $waitingNamespace = false; $waitingNamespaceSeparator = true; } elseif ($waitingClassName) { if (!empty($namespace)) { $value = sprintf('%s\\%s', implode('\\', $namespace), $value); } $result[] = $value; $waitingClassName = false; } break; case T_NS_SEPARATOR: if ($waitingNamespaceSeparator && !$waitingNamespace && !empty($namespace)) { $waitingNamespace = true; $waitingNamespaceSeparator = false; } break; } } else { if (($waitingNamespace || $waitingNamespaceSeparator) && ($tokens[$i] == '{' || $tokens[$i] == ';')) { $waitingNamespace = false; $waitingNamespaceSeparator = false; } } } return $result; } ?>
<?php use Dm\Runtime; $code = <<<CODE <?php echo str_replace( 0, 1, 100 ); ?> CODE; // Exception, , str_replace Runtime::code($code) ->disableFunction('str_replace') ->execute(); ?>
<?php use Dm\Runtime; $code = <<<CODE <?php echo str_replace( 0, 1, 100 ); ?> CODE; // 000, 111 Runtime::code($code) ->overrideFunction('str_replace', function ($search, $replace, $subject) { // 1 2 echo str_replace($replace, $search, $subject); }) ->execute(); ?>
Source: https://habr.com/ru/post/176725/
All Articles