在另一个包含的 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';
仅供参考:我想这样做,例如:
- 在显示内容之前检查用户是否获得授权
- 实施网页缓存系统(参见 "Example" 部分中的 http://www.phpfastcache.com/,"Caching Whole Webpage")
谢谢!
编辑:更准确地解释为什么我想这样做是为了使用 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 代码放在两个单独的文件中的原因是我有许多不同的 PHP 页面要缓存,所以我想避免在每个页面上重复所有这些代码.. .
希望这次编辑能帮助您更好地理解为什么我会这样做,即使我明白,正如我担心的那样,这是不可能的。
试一试:
how can I achieve this ?
用邪恶的方式来评估所有而不是包括 :) 喜欢
eval(file_get_contents('header.php').'<?php echo "my awesome content";?>'.file_get_contents('footer.php'));
如果你想加入黑暗面,这可能是一个解决方案:)
旁注:在这个解决方案中,你必须留意全局变量!!
但是请注意,您想将 条件 分布在单独的文件中,在我看来这是非常非常糟糕的做法。
这8我真的回答了吗]
据我所知,问题是当您不希望某个用户看到页面内容时,页面的其余部分未加载,这就是导致错误的原因?
如果是这样,您为什么不总是包含文件并在特定页面中设置谁可以查看什么的条件?
我在页眉中使用 ob_start(),在页脚中使用 ob_end_flush,效果很好。
然后在特定页面的内容上检查我的 SESSION 变量,如果登录用户有权查看内容,否则显示如下消息:"You are not authorized to see this content"
我换个方式试试
唯一规则:仅适用于全局 space(其他地方 :-))
所以您想在 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/
玩得开心。
我想在脚本的开头包含一个 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';
仅供参考:我想这样做,例如:
- 在显示内容之前检查用户是否获得授权
- 实施网页缓存系统(参见 "Example" 部分中的 http://www.phpfastcache.com/,"Caching Whole Webpage")
谢谢!
编辑:更准确地解释为什么我想这样做是为了使用 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 代码放在两个单独的文件中的原因是我有许多不同的 PHP 页面要缓存,所以我想避免在每个页面上重复所有这些代码.. .
希望这次编辑能帮助您更好地理解为什么我会这样做,即使我明白,正如我担心的那样,这是不可能的。
试一试:
how can I achieve this ?
用邪恶的方式来评估所有而不是包括 :) 喜欢
eval(file_get_contents('header.php').'<?php echo "my awesome content";?>'.file_get_contents('footer.php'));
如果你想加入黑暗面,这可能是一个解决方案:)
旁注:在这个解决方案中,你必须留意全局变量!!
但是请注意,您想将 条件 分布在单独的文件中,在我看来这是非常非常糟糕的做法。
这8我真的回答了吗]
据我所知,问题是当您不希望某个用户看到页面内容时,页面的其余部分未加载,这就是导致错误的原因?
如果是这样,您为什么不总是包含文件并在特定页面中设置谁可以查看什么的条件?
我在页眉中使用 ob_start(),在页脚中使用 ob_end_flush,效果很好。 然后在特定页面的内容上检查我的 SESSION 变量,如果登录用户有权查看内容,否则显示如下消息:"You are not authorized to see this content"
我换个方式试试
唯一规则:仅适用于全局 space(其他地方 :-))
所以您想在 cache_start.php
中打开一个 if() 并关闭它 cache_end.php
。 (出于 ob_cache 个原因)
但是如果条件没有改变,为什么不做两次条件呢!
在每个文件中测试if(condition)
!
或者设置一个像 $cach_op_started=true
这样的变量并在 cache_end.php
两者都应该适合您。
我第一次没有看到那个解决方案有点好笑:)
最后的注意事项: 如果需要,您还可以在 PHP 中使用自动前置和附加文件。 这可以在 php.ini 中配置。 这些文件将始终在脚本之前和之后自动加载。 http://www.webdevsecrets.com/using-phps-auto_prepend_file-and-auto_append_file/
玩得开心。