2016-10-13 62 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变量,如果登录用户有权查看内容,则显示如下消息:“您无权查看此内容”