Если вы просто хотите проверить файл без загрузки, используйте token_get_all()
:
<?php
header('Content-Type: text/plain');
$php_file = file_get_contents('c2.php');
$tokens = token_get_all($php_file);
$class_token = false;
foreach ($tokens as $token) {
if (is_array($token)) {
if ($token[0] == T_CLASS) {
$class_token = true;
} else if ($class_token && $token[0] == T_STRING) {
echo "Found class: $token[1]\n";
$class_token = false;
}
}
}
?>
По сути, это простой конечный автомат. В PHP последовательность токенов будет:
T_CLASS
: ключевое слово 'class';
T_WHITESPACE
: пробел (ы) после 'class';
T_STRING
: название класса.
Таким образом, этот код будет обрабатывать любые странные пробелы или переводы строк, которые вы получите, потому что он использует тот же синтаксический анализатор, который PHP использует для выполнения файла. Если token_get_all()
не может разобрать его, PHP тоже не сможет.
Кстати, вы используете token_name()
, чтобы превратить номер токена в его постоянное имя.
Вот мой c2.php:
<?php
class MyClass {
public __construct() {
}
}
class MyOtherClass {
public __construct() {
}
}
?>
Выход:
Found class: MyClass
Found class: MyOtherClass