7

我有一个来自 1&1 的 VPS 和 CentOS 5.2 64 位。

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

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

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了一下,没有什么突出的。

我能做些什么?

4

2 回答 2

6

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

于 2013-02-12T05:34:16.393 回答
3

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

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

这是一篇关于如何查找和杀死带有空格的页面的可能的文章。如果您的 *nix-fu 足够强大,您可以使用正则表达式 grep 文件结构来尝试找到任何此类罪魁祸首。预防性地,马里奥在 SO 问题链接中发布了一些可以警告它的 php 指令,可以将其放入 svn 提交钩子中以捕获任何此类未来错误。

于 2013-02-12T05:34:29.457 回答