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


Include PHP file with condition opened but closed in another included PHP file

我想在脚本的开头包含一个PHP文件,该文件打开IF条件。然后我写我的脚本,最后我包含了另一个PHP文件来关闭这个条件。

这给我带来了一个"Parse error: syntax error, unexpected end of file in…"的错误。

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

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你也可以使用phpFastCache来缓存整个网页。这很简单例如,但在实际代码中,您应该将其拆分为两个文件:Cache_start.php和cache_end.php。 cache_start.php将存储开始代码直到ob_start();而cache_end。php将从获取HTML网页。那么,你的index.php将包含cache_start.php on

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页面缓存,所以我想避免重复所有这些代码在每个页面…

希望这篇编辑能帮助你更好地理解为什么我要这样做,即使我明白,正如我担心的那样,这是不可能的。

试试吧:

我怎样才能做到这一点?

用邪恶的方式,eval all而不是像

那样包含:)
eval(file_get_contents('header.php').'<?php echo "my awesome content";?>'.file_get_contents('footer.php'));

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

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

但是,事实是,你想把条件分散到不同的文件中,在我看来这是非常非常糟糕的做法。

[p]

我用了另一种方法。

Only规则:只适用于全局空间(其他:-))

所以您想在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/

祝你玩得愉快

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

如果是的话,为什么不总是包含文件,并在特定的页面中设置谁可以查看哪些文件的条件呢?

我在页眉中使用ob_start(),在页脚中使用ob_end_flush,效果很好。然后检查我的SESSION变量在特定页面的内容,如果登录的用户有权看到的内容,否则显示一个消息,如:"你没有被授权看到这个内容"