кэширование — включение файла PHP с условием, что оно открыто, но закрыто в другом включенном файле PHP

Я хотел бы включить в начале моего скрипта файл 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';

К вашему сведению: я хотел бы сделать это, например:

  • везде проверять, что пользователь авторизован, перед отображением контента
  • внедрить систему кэширования веб-страниц (см. http://www.phpfastcache.com/ в разделе «Пример», «Кэширование всей веб-страницы»)

СПАСИБО!


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-страниц для кэширования, поэтому я бы хотел избежать повторения всего этого кода на каждой странице …

Надеюсь, что это изменение поможет вам лучше понять, почему я это сделаю, даже если бы я понял, как я боялся, это невозможно.

1

Решение

Я пробую это по-другому.

Единственное правило: работает только в глобальном пространстве (где еще :-))

Итак, вы хотите открыть 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/

Приятно провести время

1

Другие решения

Дайте ему попытку:

как я могу этого достичь?

Делай это злым путем и оценивай все, а не включай 🙂

eval(file_get_contents('header.php').'<?php echo "my awesome content";?>'.file_get_contents('footer.php'));

Это может быть решением, если вы хотите присоединиться к темной стороне 🙂

SideNote: В этом решении вы должны следить за глобальными переменными !!

Но, пожалуйста, помните о том, что вы хотите распространять условия по отдельным файлам, что, на мой взгляд, очень, очень, очень плохая практика.

Я действительно ответил на это 8]

2

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

Если так, то почему бы вам просто не всегда включить файлы, и на конкретной странице вы задаете условия для того, кто что может просматривать?

Я использую ob_start () в моем заголовке и ob_end_flush в моем нижнем колонтитуле, который прекрасно работает.
а затем проверьте с помощью моих переменных SESSION на содержимом конкретной страницы, имеет ли авторизованный пользователь право просматривать содержимое, в противном случае отображается сообщение типа: «У вас нет прав на просмотр этого содержимого»

0
По вопросам рекламы [email protected]