2016-10-13 12 views
1

Я хотел бы включить в начале моего скрипта PHP-файл, который открывает условие IF. Затем я пишу свой сценарий, и, чтобы закончить, я включаю еще один файл PHP, который закрывает conditon.Включить файл PHP с условием, открытым, но закрытым в другом включенном файле PHP

Это приведет меня к ошибке «Ошибка анализа: ошибка синтаксиса, неожиданный конец файла в ...».

Это будет лучше понять с помощью этого простого примера:

header.php

if(aConditionalTest()) { 

footer.php

} // endIf 

mypage.php

include_once 'header.php'; 
echo 'my awesome content'; 
include_once 'footer.php'; 

FYI: Я хотел бы сделать это, например:

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

СПАСИБО!


редактировать: Объясните точнее, почему я хочу сделать это для использования phpfastcache:

http://www.phpfastcache.com/ говорит:

Caching Whole Webpage PHP Cache whole web page : You can use phpFastCache to cache the whole webpage easy too. This is simple example, but in real code, you should split it to 2 files: cache_start.php and cache_end.php. The cache_start.php will store the beginning code until ob_start(); and the cache_end.php will start from GET HTML WEBPAGE. Then, your index.php will include cache_start.php on beginning and cache_end.php at the end of file.

Это именно то, что я пытаюсь сделать! Согласно их части кода ниже, это приводит к ситуации, когда открыт условие «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-страниц в кэше, поэтому я хотел бы Avoir повторяя весь этот код на каждой странице ...

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

+4

Ouch ... это не сработает. – CD001

+0

В чем вопрос? –

+1

Вопрос: «Как я могу это достичь?«См. Ссылку phpfastcache для понимания. Мне не удается делать то, что они советуют делать ... –

ответ

1

Я пробовал его в другой путь.

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

Таким образом, вы хотите открыть, если() в cache_start.php и закрыть его cache_end.php. (по причинам ob_cache)

Но если условие не изменилось, почему бы не выполнить условие дважды!

В каждом файле test для if(condition)!

Или создать variabale как $cach_op_started=true и испытание для него во втором случае() в cache_end.php

Thing Боты должны работать для вас.

Его немного смешно, что я не видел, что решение в первый раз :)

Последняя Примечание: Вы также можете использовать автоматическую PREPEND и добавление файлов в PHP, если вы хотите. Это можно настроить в php.ini. Файлы будут автоматически загружаться до и после скрипта, всегда. http://www.webdevsecrets.com/using-phps-auto_prepend_file-and-auto_append_file/

Удачного времени.

+0

@DataHerder Посмотрите, его живые :-) – JustOnUnderMillions

+0

@ TooLiPHoNe.NeT Второй блок кода дает понять, первая версия shortend, был действительно непонятным. После того, как я знаю все о 'ob_cache', легко ответить. – JustOnUnderMillions

+0

спасибо, что это очень простое решение, и это отлично работает! Я поставил глобальное логическое значение в« начальный »включенный PHP-файл и использовал его для условий в «конце» PHP-файле, а также в моем «content» PHP-файл, который я хотел бы кэшировать ... Не знаю, почему я сам не думал об этом ... :) –

2

Дайте ему попробовать:

how can I achieve this ?

осилИТ злойпуть и Eval все вместо включая :) Как

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

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

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

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

ли я на самом деле ответить на этот вопрос 8]

+0

Да, я согласен, это REAAAALLLY плохое программирование. Это «СВЯТОЙ WOW, я бы боялся попробовать и поддерживать это. Давайте запустим этот мусор в мусор и начнем над кодом. – DataHerder

+0

Я не пойду на темную сторону ... :) –

+1

@DataHerder конечно, это плохо ... но +1 от меня за мужество использовать 'eval() 'this way. – Wh1T3h4Ck5

0

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

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^