在php中使用流包装器给出了空白页面

时间:2011-05-16 14:03:30

标签: php apache wrapper

我正在使用此示例中的包装类实现模板系统: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,但它对代码没有任何影响。

那么代码有什么问题。

编辑:错误日志记录已启用,并且未显示与此问题相关的任何错误

3 个答案:

答案 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。