包含已打开但已在另一个包含的PHP文件中关闭的PHP文件

时间:2016-10-13 14:50:22

标签: php caching php-include phpfastcache

我想在脚本的开头包含一个打开IF条件的PHP文件。然后我编写我的脚本,并完成我包含另一个关闭条件的PHP文件。

这让我想到了一个" Parse错误:语法错误,文件意外结束......"错误。

通过这个简单的例子可以更好地理解:

的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/,"缓存整个网页")

谢谢!

编辑:更准确地解释为什么我想使用phpfastcache这样做:

http://www.phpfastcache.com/说:

  

缓存整个网页PHP Cache整个网页:   您也可以使用phpFastCache缓存整个网页。这很简单   例如,但在实际代码中,您应该将其拆分为2个文件:   cache_start.php和cache_end.php。 cache_start.php将存储   开始代码直到ob_start();并且cache_end.php将从   获取HTML WEBPAGE。然后,您的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页面要缓存,所以我想在每个页面上重复所有这些代码......

希望这个编辑能帮助你更好地理解为什么我会这样做,即使我理解,因为我担心,这是不可能的。

3 个答案:

答案 0 :(得分:2)

试一试:

  

我怎样才能做到这一点?

这是邪恶的方式和eval所有而不是包括:)喜欢

__try

如果你想加入黑暗面,这可能是一个解决方案:)

SideNote:在这个解决方案中,你必须关注全局变量!

但是,关于这个事实的事情,你想传播条件超过单独的文件,在我看来是非常非常非常糟糕的做法。

我真的回答了这个问题8]

答案 1 :(得分:1)

我以其他方式尝试。

仅限规则:仅适用于全局空间(其他地方: - ))

因此,您要在cache_start.php中打开if()并关闭它cache_end.php。 (出于ob_cache的原因)

但如果条件没有改变,为什么不做两次这个条件呢?

if(condition)的每个文件测试中!

或设置$cach_op_started=true之类的变量,并在cache_end.php

中的第二个if()中对其进行测试

两者都适合你。

有点可笑,我第一次没有看到这个解决方案:)

最后注意: 如果需要,您还可以使用PHP中的自动前置和附加文件。 这可以在php.ini中配置。 始终在脚本之前和之后自动加载文件。 http://www.webdevsecrets.com/using-phps-auto_prepend_file-and-auto_append_file/

度过愉快的时光。

答案 2 :(得分:0)

所以我理解问题是当你不希望某个用户看到页面的内容时,页面的其余部分没有加载,那是什么导致错误?

如果是这样,为什么不直接包含这些文件?在特定页面中,您可以为谁设置查看内容的条件?

我在标题中使用ob_start(),在我的页脚中使用ob_end_flush,效果很好。 如果登录用户有权查看内容,请在特定页面内容上查看我的SESSION变量,否则会显示如下消息:“您无权查看此内容”