Я хотел бы включить в начале моего скрипта файл PHP, который открывает условие IF. Затем я пишу свой сценарий, и в завершение я включаю другой файл PHP, который закрывает условие.
Это приводит меня к ошибке «Parse error: синтаксическая ошибка, неожиданный конец файла в …».
Это будет лучше понять на этом простом примере:
header.php
if(aConditionalTest()) {
footer.php
} // endIf
mypage.php
include_once 'header.php';
echo 'my awesome content';
include_once 'footer.php';
К вашему сведению: я хотел бы сделать это, например:
СПАСИБО!
edit: Объясните более точно, ПОЧЕМУ я хочу сделать это для использования phpfastcache:
http://www.phpfastcache.com/ говорит:
Кэширование всей веб-страницы PHP Кэширование всей веб-страницы:
Вы также можете использовать phpFastCache для простого кэширования всей веб-страницы. Это просто
Например, но в реальном коде, вы должны разделить его на 2 файла:
cache_start.php и cache_end.php. Cache_start.php будет хранить
начальный код до ob_start (); и cache_end.php начнется с
ПОЛУЧИТЬ HTML-ВЕБ-СТРАНИЦУ. Затем ваш index.php будет включать cache_start.php на
начало и cache_end.php в конце файла.
Это именно то, что я пытаюсь сделать!
Согласно приведенному ниже коду, это приводит к ситуации, когда условие открывается в «cache_start.php», а затем закрывается в «cache_end.php».
cache_start.php
use phpFastCache\CacheManager;
$cache = CacheManager::Memcached();
$keyword_webpage = md5($_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'].$_SERVER['QUERY_STRING']);
// try to get from Cache first.
$resultsItem = $cache->getItem($keyword_webpage)
if(!$resultsItem->isHit()) {
ob_start();
cache_end.php
// GET HTML WEBPAGE
$html = ob_get_contents();
$resultsItem->set($html)->expireAfter(1800);
$cache->save($resultsItem);
}
echo $resultsItem->get();
mypage.php
include_once 'cache_start.php';
// my awesome content to cache goes here...
include_once 'cache_end.php';
myotherpage.php
include_once 'cache_start.php';
// my other great content to cache goes here...
include_once 'cache_end.php';
Поэтому причина, по которой я хочу поместить код phpfastcache в 2 отдельных файла, заключается в том, что у меня есть много разных PHP-страниц для кэширования, поэтому я бы хотел избежать повторения всего этого кода на каждой странице …
Надеюсь, что это изменение поможет вам лучше понять, почему я это сделаю, даже если бы я понял, как я боялся, это невозможно.
Я пробую это по-другому.
Единственное правило: работает только в глобальном пространстве (где еще :-))
Итак, вы хотите открыть if () в cache_start.php
и закрой его cache_end.php
, (по причинам ob_cache)
Но если условие не изменилось, почему бы не выполнить условие дважды!
В каждом файле тест для if(condition)
!
Или настроить переменную как $cach_op_started=true
и проверить это во втором if () в cache_end.php
Вещи оба должны работать на вас.
Немного забавно, что я не видел это решение в первый раз 🙂
Последнее примечание:
Вы также можете использовать автоматическое добавление и добавление файлов в PHP, если хотите.
Это можно настроить в php.ini.
Файлы будут автоматически загружаться до и после скрипта, всегда.
http://www.webdevsecrets.com/using-phps-auto_prepend_file-and-auto_append_file/
Приятно провести время
Дайте ему попытку:
как я могу этого достичь?
Делай это злым путем и оценивай все, а не включай 🙂
eval(file_get_contents('header.php').'<?php echo "my awesome content";?>'.file_get_contents('footer.php'));
Это может быть решением, если вы хотите присоединиться к темной стороне 🙂
SideNote: В этом решении вы должны следить за глобальными переменными !!
Но, пожалуйста, помните о том, что вы хотите распространять условия по отдельным файлам, что, на мой взгляд, очень, очень, очень плохая практика.
Я действительно ответил на это 8]
Итак, я понимаю, что проблема в том, что когда вы не хотите, чтобы определенный пользователь видел содержимое страницы, остальная часть страницы не загружается, и это является причиной ошибки?
Если так, то почему бы вам просто не всегда включить файлы, и на конкретной странице вы задаете условия для того, кто что может просматривать?
Я использую ob_start () в моем заголовке и ob_end_flush в моем нижнем колонтитуле, который прекрасно работает.
а затем проверьте с помощью моих переменных SESSION на содержимом конкретной страницы, имеет ли авторизованный пользователь право просматривать содержимое, в противном случае отображается сообщение типа: «У вас нет прав на просмотр этого содержимого»