PHP include () перед doctype, вызывая пробел - PullRequest
3 голосов
/ 03 февраля 2012

У меня есть веб-сайт с проблемой пробелов. Я включаю несколько файлов до 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");          
?>

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

Хорошо, я добавил обратно в?> И попробовал следующие предложения:

<!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 ]

5 голосов
/ 03 февраля 2012

Вы можете решить проблему следующим образом:

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

Но я наблюдал ошибочное поведение в этом отношении (хотя и не начиная с PHP4), поэтому самое простое решение, гарантирующее исправление, - это поставить <!DOCTYPE> перед включением - поскольку ни один из включенных файлов ничего не выводит, и это сломает ваш документ если это так.

<!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 -->
2 голосов
/ 03 февраля 2012

Вам не нужно удалять ?>. Просто пробел после него. Ваш код должен выглядеть так:

<?php
include ("include/session.php");
include ("include/updatestage.php");                                        
?><!DOCTYPE HTML>....
1 голос
/ 28 сентября 2013

Я понял это. Вы должны закодировать «UTF-8 без спецификации» для файла, который вы , включая .

Главный php-файл не обязательно должен кодироваться с помощью «UTF-8 без BOM», и на самом деле я бы рекомендовал этого не делать, если у вас есть определенные специальные символы (вызвавшие проблемы для меня). *

Здесь также ответили: PHP включает причины пробелов в верхней части страницы

1 голос
/ 03 февраля 2012

ОК, эти шаги должны решить вашу проблему:

  1. Просмотрите все PHP-файлы на вашем сайте. Если файл заканчивается на ?> (и, возможно, некоторые пробелы), удалите ?>. (Конечно, если после ?> есть какой-то текст HTML, его не следует удалять.)

  2. При выполнении вышеизложенного также убедитесь, что в любых файлах нет пробелов перед первым <?php.

  3. Если после этого у вас все еще есть проблемы, проверьте наличие невидимых символов перед <?php. Есть несколько способов сделать это, но просмотр шестнадцатеричного дампа файлов - один хороший способ. Первые два байта каждого файла PHP (который не начинается с текста HTML) должны быть <? (hex 3c 3f).

В том маловероятном случае, если эти шаги не решат проблему, сообщите нам об этом (и предпочтительно включите ссылку на страницу, на которой возникает проблема, чтобы мы могли сами проверить вывод).

0 голосов
/ 09 июня 2016

Открыть файл в Notepadd ++ С верхней панели: Кодировка-> Кодировать в UTF8 без спецификации Сохраните файл в Dreamweaver

Нажмите сочетание клавиш CTRL + J или перейдите в меню «Изменить-> Параметры страницы-> Плитка / Кодировка» и снимите флажок «ЮНИКОД»Спецификация, если она проверена.

...