我正在使用此示例中的包装类实现模板系统:http://www.php.net/manual/en/stream.streamwrapper.example-1.php
我使用此代码获取包装器输出:
ob_start();
include("template://" . $template_name);
$template .= ob_get_contents();
ob_end_clean();
但是,在某些服务器中,此代码无效,我得到的只是一个空白页面。我不确定它是否是一个php指令问题,我将allow_url_include更改为0和1,但它对代码没有任何影响。
那么代码有什么问题。
编辑:错误日志记录已启用,并且未显示与此问题相关的任何错误
答案 0 :(得分:1)
在某些服务器中,此代码无效
很有可能,这是因为这些服务器上的PHP流不可用或配置不正确。它会因错误而死,并且由于输出缓冲区
,您没有看到错误答案 1 :(得分:1)
我的主人更新了Litespeed和更严格的Suhosin设置。起初我以为是Litespeed,但确实是Suhosin(我从这个帖子中抽出来,谢谢!)。
这只是一个需要更改的php.ini设置,您必须将您的流名称添加到包含白名单:
suhosin.executor.include.whitelist = template://
然后它会再次正常工作。这里有几个相同的链接:
答案 2 :(得分:0)
我遇到了同样的问题,发现PHP Suhosin导致了这个“白屏死机”。
这可以解释为什么这适用于某些服务器而不适用于其他服务器。
可能有一个Suhosin配置选项来处理,请查看网站:http://www.hardened-php.net/suhosin/
tl; dr我最终删除了解决问题的Suhosin。