PHP在任何输出之前吐出一个新行

时间:2013-02-12 05:27:59

标签: php apache

我有一个1& 1的VPS,CentOS 5.2 64位。

上周二我升级了PHP并安装了ImageMagick,它必须升级许多其他软件包,包括Apache,MySQL,Perl等。在这个过程中有很多东西升级了,但是我只是一个完整的菜鸟。 / p>

现在问题是所有网站都是这样的:

1.
2. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/    xhtml1/DTD/xhtml1-transitional.dtd">

(输出前每个PHP文件上的新行)

我甚至试过ob_start();die(trim(ob_get_clean()));没有运气。新的界限继续存在。

我简短地检查了/etc/php.ini没有任何突出的东西。

我该怎么办?

2 个答案:

答案 0 :(得分:6)

在黑暗中拍摄,但请检查php.ini中的auto-prepend-file值。它可能指向一个空白的默认文件,恰好有换行符。

答案 1 :(得分:3)

最可能的原因是一些基础包含文件末尾有空格。如果任何包含文件包含<?php?>标记的任何字符,包括换行符或空格,那么apache会在响应的开头写一个空行,就像你看到的一样。 / p>

不幸的是,包含链中的任何文件都可能是罪魁祸首。如果您在共享主机提供商,那么您可能需要联系他们的支持,以确保他们没有任何古怪的php自动包含行为或apache指令,如AlienWebguy提到。这是关于best practices for include files的一个很好的Stack Overflow问题。 (它甚至指出Smarty,第三方php模板插件在其包含文件中有空闲空白,即使在最近/当前版本中也是如此。)

这里有一篇关于如何find and kill pages with whitespace on them.的文章。如果你的* nix-fu足够强大,你可以用正则表达式来试图找到任何这样的罪魁祸首。预防性地,Mario在SO问题链接中发布了一些可以警告它的php指令,它可以被抛入svn提交钩子以捕获任何此类未来错误。