вместо
preg_match_all('/@include.*/', self::$viewMainContent, $include);
Попробуйте
preg_match_all('/@include\((?P<include>[^)]+)\)/', '@include(public/server/logik01/logik_web_init.php)', $include);
результат
include [9-49] => `public/server/logik01/logik_web_init.php`
Th ан вы можете пропустить весь беспорядок и просто сделать что-то вроде этого
Чтобы быть ясно, что вы можете просто сделать что-то вроде этого
$include = array();
preg_match_all('/@include\((?P<include>[^)]+)\)/', self::$viewMainContent, $include);
$matches = isset($include['include']) ? count($include['include']) : 0;
for($i = 0; $i < $matches; $i++) {
require_once($include['include'][$i]);
}
в любом случае включать не будет работать, потому что вы не хотите, чтобы заменить содержимое с совпадение regx, но с содержимым включенного файла.
для этого вам нужно сделать, это
ob_start();
require_once($include['include'][$i]);
$content = ob_get_clean();
И затем использовать полный матч $inclue[0]
и заменить его с включенным содержанием в исходном шаблоне ..
Что-то вроде этого
$include = array();
preg_match_all('/@include\((?P<include>[^)]+)\)/', self::$viewMainContent, $include);
$matches = count($include);
for($i = 0; $i < $matches; $i++) {
ob_start();
require_once($include['include'][$i]);
$content = ob_get_clean();
self::$viewMainContent = preg_replace('/'.preg_quote($include[0][$i]).'/', $content, self::$viewMainContent);
}
Конечно, я бы использовал file_get_contents
вместо включения, а затем сделайте все это, прежде чем обрабатывать шаблон для любых других тегов, что wo пакетирования исключающей с использованием PHP внутри включаемых файлов шаблонов, и вы бы не нужна буферизации вывода ob_*
функции ..
как так ..
$include = array();
preg_match_all('/@include\((?P<include>[^)]+)\)/', self::$viewMainContent, $include);
$matches = count($include);
for($i = 0; $i < $matches; $i++) {
$content = file_get_contents($include['include'][$i]);
self::$viewMainContent = preg_replace('/'.preg_quote($include[0][$i]).'/', $content, self::$viewMainContent);
}
Я не проверить это очень жаль, если это не 100% правильно но должен привести вас к правильной дороге.
лично соответствовать идентификатору на этом '@include \ ((? P [^)] +) \) ', но это только я, https://regex101.com/r/iC9kJ9/1 сэкономит вам около 6 строк кода. –
ArtisticPhoenix
Thx для быстрого ответа. На каком месте я должен написать этот '@include \ ((? P [^)] +) \)' –
Neonlight
, чтобы ответить на ваш вопрос, вы можете добавить 'preg_quote ($ include)' в замену preg, чтобы избежать этих скверны и точки. – ArtisticPhoenix