在doctype之前PHP包含(),导致空格

时间:2012-02-03 15:39:06

标签: php include whitespace

我的网站存在空白问题。我在doctype之前包含了一些文件 这导致输出空白区域。

搜索后我找到了这个解决方案: Problem with whitespace before doctype

然而,在删除?>后,我仍然遇到问题。以下是代码:

<?php
include ("include/session.php");
include ("include/updatestage.php");                                        
?>
<!DOCTYPE HTML>....

以下是session.php

<?php session_start();

// if a team name has been assigned to a session...
if ( isset($_SESSION ['teamName']))
{

//create "global variable $teamName that can be used across all pages as long as the function "session_start(); is present"
$teamName = $_SESSION ['teamName'];

}
else{

die ( "You are not logged in! Redirecting to login page...<meta http-equiv='REFRESH' content='2; url = index.php'>");

}

以下是updatestage.php

<?php
include("config.php");
//update stage

$inserted="n";
mysql_query ("UPDATE `team` SET `inserted`='$inserted' WHERE teamName = '$teamName' ");

$advance="n";
mysql_query ("UPDATE `game` SET `advance`='$advance' ");

以下是getstageinfo.php

<?php
include("include/config.php");
//Select the slogan from the current user
$currentStage = mysql_query("
SELECT `currentStage` FROM `team` WHERE `teamName` = '$teamName'
");
//assign the text located at the logo field (the path of the logo) to a variable $slogan
$row = mysql_fetch_assoc($currentStage);
$currentStage= $row['currentStage'];
?>

最后这里是config.php

<?php
// connect to database
$con = mysql_connect("xxxxxxx","xxxxxxx","xxxxxxx"); 

if (!$con)
      {
      die('Could not connect: ' . mysql_error());
      }

// select database 
mysql_select_db ("xxxxxxx");          
?>

/////////////////////////////////////////////// ///////////////////////////////////////////

好的,我已经添加了回来了?&gt;并尝试了以下建议:

<!DOCTYPE HTML>
<?php
include("include/session.php");
include("include/updatestage.php");
?>

或尝试:

<?php

echo "<!DOCTYPE HTML>\n";

include ("include/session.php");
include ("include/updatestage.php");

?>

制作:

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at public_html/period1.php:2) in public_html/include/session.php on line 1

尝试:

<?php
include("include/session.php");
include("include/updatestage.php");
?><!DOCTYPE HTML>

或者:

<?php

  ob_start();

  echo "<!DOCTYPE HTML>\n";

  include ("include/session.php");
  include ("include/updatestage.php");

  ob_end_flush();

?>

仍然产生空白区域。

5 个答案:

答案 0 :(得分:5)

您可以像这样解决问题:

<?php
include ("include/session.php");
include ("include/updatestage.php");                                        
?><!DOCTYPE HTML>

但是我已经观察到了这方面的错误行为(虽然不是自PHP4以来),所以保证修复的最简单的解决方案是将<!DOCTYPE>放在include之前 - 因为既没有包含文件输出任何东西,也会破坏你的文件,如果有的话。

<!DOCTYPE HTML>
<?php

  include ("include/session.php");
  include ("include/updatestage.php");

?>
<!-- Rest of HTML -->

或者这个:

<?php

  echo "<!DOCTYPE HTML>\n";

  include ("include/session.php");
  include ("include/updatestage.php");

?>
<!-- Rest of HTML -->

如果您使用第二个选项,请务必确保开场<标记中的<?php 是所有文件中的第一个字符。

编辑首先完全没有考虑到已经养成丑陋头脑的会话/ cookie问题,这是一个可行的解决方案:

<?php

  ob_start();

  echo "<!DOCTYPE HTML>\n";

  include ("include/session.php");
  include ("include/updatestage.php");

  ob_end_flush();

?>
<!-- Rest of HTML -->

答案 1 :(得分:2)

您不必删除?>。只是它后面的空白。您的代码应如下所示:

<?php
include ("include/session.php");
include ("include/updatestage.php");                                        
?><!DOCTYPE HTML>....

答案 2 :(得分:1)

好的,这些步骤可以解决您的问题:

  1. 浏览您网站上的所有 PHP文件。如果文件以?>结尾(可能还有一些空格),请删除?>。 (当然,如果在?>之后有一些HTML文本,则不应删除它。)

  2. 在执行上述操作时,还要检查任何文件中第一个<?php前面是否有空格。

  3. 如果此后仍有问题,请检查<?php前面的隐身字符。有几种方法可以做到这一点,但查看hex dump文件是一种好方法。每个PHP文件的前两个字节(不以HTML文本开头)应为<?(十六进制3c 3f)。

  4. 如果这些步骤无法解决问题,请告知我们(最好包含指向发生问题的页面的链接,以便我们自行检查输出。)

答案 3 :(得分:1)

我明白了。您必须为包括的文件编码“无BOM的UTF-8”。

主php文件不一定要用“没有BOM的UTF-8”进行编码,事实上我建议你不要使用某些特殊字符(给我带来问题)。

此处也回答:PHP include causes white space at the top of the page

答案 4 :(得分:0)

在Notepadd ++中打开文件 从顶部栏开始:编码 - &gt;在没有BOM的UTF8中编码 保存文件 在Dreamweaver中

按CTRL + J或转到更改 - &gt;页面设置 - &gt;平铺/编码,如果已取消,则取消选中UNICODE BOM。