2016-10-13 126 views
1

我想在腳本的開頭添加一個打開IF條件的PHP文件。然後我寫我的腳本,並完成我包括另一個PHP文件關閉條件。包含打開條件的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'; 

所以我爲什麼要放2個獨立的文件中phpfastcache代碼的原因是,我有許多不同的PHP頁面緩存,所以我想avoir在每個頁面上重複所有這些代碼...

希望這個編輯能夠幫助你更好地理解爲什麼我會那樣做,即使我理解,正如我擔心的那樣,這是不可能的。

+4

哎喲...那不行。 – CD001

+0

問題是什麼? –

+1

問題是「我怎麼能做到這一點?「看到phpfastcache鏈接瞭解,我沒有設法做他們建議做的事...... –

回答

1

我嘗試另一種方式。

唯一的規則:只能在全球空間(別的地方:-))

所以,你要的,如果()在cache_start.php打開和關閉它cache_end.php。 (爲ob_cache原因)

但是,如果條件沒有改變,爲什麼不做兩次的條件!

在每個文件測試if(condition)

或設置在第二,如果(),它像一個$cach_op_started=true和variabale試驗cache_end.php

事情boths應該爲你工作。

它有點滑稽,我沒有看到這種解決辦法在第一時間:)

末注: 您也可以使用自動前插和,如果你想在PHP中追加文件。 可以在php.ini中進行配置。 文件將在腳本之前和之後自動加載,始終。 http://www.webdevsecrets.com/using-phps-auto_prepend_file-and-auto_append_file/

祝您有美好的時光。

+0

@DataHerder看,它的活着:-) – JustOnUnderMillions

+0

@ TooLiPHoNe.NeT第二個代碼塊說清楚,第一個短期版本,我知道所有關於'ob_cache'的信息都很容易回答。 – JustOnUnderMillions

+0

謝謝,這是一個非常簡單的解決方案,而且效果很好!我在包含「start」的PHP文件中放置了一個全局布爾值,用於「最終」PHP文件的條件,也用於我的「內容」我想緩存的PHP文件...不知道爲什麼我沒有自己想想... :) –

2

試試看:

how can I achieve this ?

做它惡道和eval而不是所有的包括照片喜歡

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

這可以是一個解決方案,如果你想加入的黑暗方:)

旁註:在這個解決方案中,你必須留意全局變量!

但是,請關於事實的東西,那個想要傳播條件分開的文件,在我看來是非常非常非常不好的做法。

我真的回答這個8]

+0

是的,我同意,這絕對是不好的編程,它是「聖潔的哇,我是否會試着去維護它。讓我們把垃圾扔到垃圾桶裏,然後重新開始「代碼 – DataHerder

+0

我不會在黑暗的一面...... :) –

+1

@DataHerder當然這很糟糕...但是+1我勇於使用'eval ()'這樣 – Wh1T3h4Ck5

0

於是我明白,問題是,當你不希望某個用戶看到一個頁面的內容,頁面的其餘部分沒有加載,那是什麼導致了錯誤?

如果是這樣,爲什麼不只是總是包含這些文件,並且在特定頁面中爲您設置了可以查看內容的條件?

我在我的頭文件中使用ob_start(),而在我的頁腳中使用ob_end_flush效果很好。 ,然後檢查特定頁面內容上的SESSION變量,如果登錄用戶有權查看內容,則顯示如下消息:「您無權查看此內容」