【问题标题】:New line before header()header() 前的新行
【发布时间】:2010-06-15 13:54:18
【问题描述】:

我正在使用一个定制的 Joomla 脚本,该脚本从数据库中的 blob 生成图像。但是,当我们将其从 Apache 服务器移动到 IIS 服务器时,脚本会中断。

经过调查,现在似乎在运行标头函数之前附加了一个换行符(当我注释掉图像部分并执行回显“测试”时;测试在线打印2的源代码。

我一遍又一遍地浏览了脚本,浏览了组件中的许多文件,但似乎无法找出新行的来源。完全没有。

我尝试过使用 ob_start() 和许多类似的函数,但似乎没有任何效果。

我完全没有想法,不知道该去哪里。

有没有办法跟踪页面中正在调用的文件?对进一步的步骤有什么想法吗?

【问题讨论】:

    标签: php joomla header


    【解决方案1】:

    注意 PHP 文件末尾的额外空格。如果 PHP 文件在最后一个 ?> 之后以多个返回结束,则无论文件包含/包含在何处,都会打印该内容。这是大型 PHP 项目中的常见错误源,可以满足您的症状。

    (为了避免这种情况,一些人开始使用禁止在其源文件中使用最后一个?> 的编码标准,这是完全合法的 PHP。)

    【讨论】:

    • +1 一些风格指南建议省略最后一个 ?> 正是出于这个原因。
    • 我浏览了一堆文件来检查这一点。但是,我不完全确定此脚本运行时调用的所有文件。它通过 joomla 运行,因此所有内容都通过 index.php 调用,而且我对完整结构不够熟悉,无法了解正在运行的每个文件。该站点涉及数百个文件,因此我试图避免一一浏览它们。我浏览了所有相关文件,并在尾随 ?> 标记后删除了任何多余的空格。
    • 我刚刚检查了一个我知道是 Joomla 的网站!实例。他们的 HTML 源代码中没有额外的空格,所以我猜,这不是 Joomla!来源(当然不是 100% 确定)。
    • 顺便说一句,正如我所说,您也可以删除最后一个?>,这样做很安全。
    • 我知道这不是任何源代码...但是以前的开发人员已经使用了很多自定义代码。奇怪的是,相同的脚本在之前的服务器上运行时运行良好......
    【解决方案2】:

    小心,可能是编码问题。在linux下用vim打开文件,看看有没有^M之类的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-20
      • 2011-04-04
      • 1970-01-01
      • 2012-02-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多