распарсить РНР файл, вывести содержимое каждой фунции отдельно

jeno

Новичок
распарсить РНР файл, вывести содержимое каждой фунции отдельно

Добрый день.

У меня на сайте шаблоны хранятся в РНР файлах...каждая функция - кусок шаблона...
файл шаблона выглядит примерно так:

PHP:
<?php
function part1()
{
	$HTML=<<<EOF
	... some html 1 ...
EOF;
}

function part2()
{
	if(1){
		$HTML=<<<EOF
... some html 2 ...
EOF;
	}
}

function part3()
{
$HTML=<<<EOF
... some html 3 ...
EOF;
}
?>
тут у нас 3 куска шаблона part1, part2, part3...

нужно распарсить этот файл так чтоб получить отдельно названия 3х функция (part1, part2, part3) и отдельно их содержимое (то что в фигурных скобках)...
можно было бы воспользоваться регулярными выражениями, но внутри функции могут быть закрывающие фигурные скобки, от чего могут возникнуть ошибки... (парсер будет возвращать все содержимое до первой фигурной скобки =\ )

мне надо чтоб парсер понимал какая закрывающая скобка что закрывает...

как это лучше сделать?

имхо:я вижу вариант с циклом,которые будет бегать по файлу, и разбираться какая скобка что закрывает/открывает...
но может есть более простые решения? (может быть просто регулярным выражением как-то)

спасибо!
 

jeno

Новичок
это файлы шаблонов, надо сделать редактирование НТМЛ шаблонов из админки (через веб морду).

или вы о методе шаблонизации?
 

Adelf

Administrator
Команда форума
Имхо проще сделать другие шаблоны.
Их потом можно опять в PHP перекомпиливать, если оптимизировать хотим. Всякие смарти это умеют сами.
 

jeno

Новичок
сделать другие шаблоны менее удобно...у меня файлов шаблонов штук 30 в каждом по 20-30 функций =\ хранить каждый кусок в отдельном файле...тоже как-то не хочется...
как минимум, кол. инклудов увеличиться (если подключать как РНР файл, а не просто текст и потом парсить или eval)..

---

вы скажите, такой файл без цикла не распарсить?
 

dimagolov

Новичок
jeno, ты тупой? делаешь ШАБЛОНЫ типа файл с кодом твоей ф-ии и именем ф-ии как имя файла. потом делаешь "компилятор" из трех строк, который сливает полученный в параметрах перечень шаблонов в "исполняемый" файл, который будет инклюдится. при редактировании отображаешь и меняешь ШАБЛОНЫ, меняться будет содержимое файла целиком, после изменения - перекомпиляция и использование как и до этого, парой инклюдов и без всяких eval.

-~{}~ 14.09.09 20:09:

п.с. не решай "сложные" задачи (распарсить php код, выделить ф-ии и их код), решай простые (слить файлы с php кодом в один, обрамив код внутри каждого определением ф-ии)
 

Духовность™

Продвинутый новичок
вы скажите, такой файл без цикла не распарсить?
для таких целей используются конечные автоматы. это нетривиальная задача парсить подобные куски кода. dimagolov тебе уже сказал - не решай "сложные" задачи. Ты в виду того,что выбрал не правильную, неуклюжую архитектуру столкнулся с тем, что она дала сбой. Исправляй и делай как у людей, пока не поздно. Хранить шаблоны в функциях - это бред.
 

alexv

Новичок
парсер будет возвращать все содержимое до первой фигурной скобки
- то есть вы уже пробовали что-то похожее ?
function (\S+)\(\)\s*\{\s*\$HTML=<<<EOF(.+?)EOF;\s*\}

EOF внутри точно не будет ;)
 
Сверху