Веб-сайт, созданный с помощью PHP, включает заголовок

Я приобрел веб-сайт, созданный на PHP. По сути, большинство страниц не отображаются правильно в IE, и я решил, что это потому, что DOCTYPE не устанавливается.

После дальнейшего исследования кажется, что вся информация заголовка (включая DOCTYPE) находится в включаемом файле PHP с именем header.php, что достаточно справедливо, однако на страницах, которые загружаются некорректно, есть код до того, как это включение будет вызвано для поэтому DOCTYPE не устанавливается.

Было бы легко переместить include для header.php в первую строку кода, но первые строки кода - это переменные PHP, которые включают ключевые слова, описание страницы и заголовок страницы, на которые затем ссылается заголовок header.php. Если я переместу код включения выше этих переменных, то header.php не будет знать ключевые слова, заголовок страницы или описание, поскольку они еще не были установлены.

Весь сайт был построен таким образом - не знаю, как это когда-либо работало.

Есть ли способ обойти это, чтобы я не видел? Я включил часть файла header.php страницы, которая ниже отображается некорректно.

Любая помощь, полученная с благодарностью, и спасибо, что нашли время, чтобы прочитать это.

header.php ->

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title><?php echo $pageTitleDisp ?></title>
    <meta name="keywords" content="<?php echo $pageKeywords?>" />
    <meta name="description" content="<?php echo $pageDesc?>" />
    <meta http-equiv="content-language" content="en-gb" />
    <meta name="copyright" content="My company" />
    <meta name="revisit-after" content="3 days" />
    <meta name="Robots" content="index, follow" />
    <meta name="Robots" content="all" />
    <meta name="Distribution" content="Global" />
    <meta name="Author" content="Me"/>
    <meta name="Accessibility" content="WCAG Double-A" />
    <meta name="Audience" content="All Users" />
    <meta name="Coverage" content="UK" />
    <meta name="Language" content="English" />
    <meta name="Rights" content="Reproduction by Permission Only" />
    <meta name="Rights.Copyright" content="My company" />
    <meta name="Type" content="Web Page" />
    <link href="<?php echo $canonical; ?>"  rel="canonical" />
    <link href="/css/webstyle.css" rel="stylesheet" type="text/css" />
    <script src="/js/site-functions.js" type="text/javascript"></script>
    <!--[if IE 6]><style type="text/css">img,div { behavior: url(/js/iepngfix.htc) }</style><![endif]-->
    <!--[if IE 7]><link href="/css/ie7.css" rel="stylesheet" type="text/css" /><![endif]-->  

и это страница, которая затем вызывает указанную выше информацию header.php:

    <?php include("../includes/config.php"); ?>
    <?php 
    // SEO TAGGING 
    $pageTitleDisp="Page Title";
    $pageKeywords="cars planes bikes";
    $pageDesc="this is a webpage that looks pap in IE";
    $canonical="http://mydomain.com/about/";
    ?>
    <?php $popbox="true"; ?>
    <?php include("../includes/header.php"); ?>

После некоторых предложений полезных людей, похоже, что эта проблема есть только на страницах, которые вызывают config.php. Ниже приведен файл config.php - если у кого-то есть время или знания, чтобы определить, что может вызвать проблему, я был бы очень благодарен. Если я закомментирую вызов config.php, то страница вообще не будет отображаться!

    <?php
$user="user";
$password="password";
$database="DB";
mysql_connect("my.database.com",$user,$password);
@mysql_select_db($database) or die( "Unable to select database");

$bulkPrice="24.99";
$singlePrice="3.49";

function makeClickableLinks($text) {

  $text = eregi_replace('(((f|ht){1}tp://)[-a-zA-Z0-9@:%_+.~#?&//=]+)',
    '<a href="\1" target="_blank">\1</a>', $text);
  $text = eregi_replace('([[:space:]()[{}])(www.[-a-zA-Z0-9@:%_+.~#?&//=]+)',
    '\1<a href="http://\2" target="_blank">\2</a>', $text);
  $text = eregi_replace('([_.0-9a-z-]+@([0-9a-z][0-9a-z-]+.)+[a-z]{2,3})',
    '<a href="mailto:\1" target="_blank">\1</a>', $text);

return $text;

}

function multiInsert($table,$cols){
                $cols= explode(",", $cols);

                     foreach ($cols as $colname) {
                                            $sqlinsert1.= "$colname, ";
                                            global $$colname;
                                            if ($colname=="dateAdded")
                                                        {
                                                        $sqlinsert2.= "Now(), ";
                                                        }
                                                    else {
                                                        $sqlinsert2.= "'".$$colname."', ";
                                                        }
                                              }
                        $sqlinsert1=removeComma($sqlinsert1);
                        $sqlinsert2=removeComma($sqlinsert2);               
                        $sqlinsert= "($sqlinsert1) values ($sqlinsert2)";

                $query="insert into $table $sqlinsert ";
                $result=mysql_query($query)or die(  mysql_error()."<BR><BR><B>$query</b>"); 
                return mysql_insert_id();
}


function cleanUserText ($para){

    $para=html_entity_decode($para);

  $array = array("itxtvisited=\"1\"","<EM>","<EM >","</EM>","<em>","</em>","<i>","</i>");
  $para = str_replace($array, "", $para);

$para = str_replace("\n", "<BR>", $para);
$para = str_replace("\n\b", "<BR>", $para);

  $para = str_replace("&amp;quot;", "\"", $para);
      $para = str_replace("&amp;", "&", $para);

     $para = str_replace("•", "&middot;", $para);
     $para = str_replace("’", "'", $para);
    $para = str_replace("®", "", $para);
    $para = str_replace("™", "", $para);
    $para = str_replace("…", "...", $para);
   $para = str_replace("“", "\"", $para);
   $para = str_replace("”", "\"", $para);


    $para = str_replace('<span style="font-weight: bold;">', "<B>", $para);
        $para = str_replace('<span style="font-weight: bold;" class="largeblack">', "<B>", $para);
         $para = str_replace('<i style="font-weight: bold;">', "<B>", $para);
      $para = str_replace('BACKGROUND: white', "", $para);

     $para = str_replace('</span>', "</B>", $para);

        $search = array('@<script[^>]*?>.*?</script>@si',  // Strip out javascript
                '@<style[^>]*?>.*?</style>@siU',    // Strip style tags properly
               '@<![\s\S]*?--[ \t\n\r]*>@',        // Strip multi-line comments including CDATA
                '@<SPAN[^>]*?>@siU',    // Strip style tags properly
                '@</SPAN>@siU',    // Strip style tags properly
                '@<FONT[^>]*?>@siU',    // Strip style tags properly
                '@</FONT>@siU',    // Strip style tags properly
                    );
        $para = preg_replace($search, '', $para);

$para=makeClickableLinks($para);

    return $para;


}




function encLink($name){
    $name=strtolower($name);
$name=str_replace(" ","-",$name);
return "$name";


}

function decLink($name){
    $name=strtoupper($name);
$name=str_replace("-"," ",$name);
return "$name";


}


function getColours(){

    global $colours;

$query="SELECT * from colours";
$result=mysql_query($query)or die(mysql_error()); ;

while ($row = mysql_fetch_array($result,MYSQL_ASSOC)) {
            foreach($row as $k => $v){$$k = $v;}
            $colours["$colourID"]="$colourTitle";
                }   
}


function dispCatLink($catsLink){


$catsList = explode(",", $catsLink); 
$catsLink1=$catsList[0];


$query="SELECT * FROM cats  where catID = $catsLink1";
$result=mysql_query($query)or die(mysql_error()."Query is: <b>$query</b>"); 
$row = mysql_fetch_assoc($result);
if ($row){foreach($row as $k => $v){$$k = $v;}}


$catTitleF=str_replace(" ","-",$catTitle);
echo "<a href=/$catTitleF/products/>$catTitle</a>";

}

function alertMSG($alerter){

if ($alerter) echo "<div ID=alerter><img src=/icon/asterisk_yellow.png class=icn width=16 height=16 />$alerter</div>";

}

function open_image ($file) {
        # JPEG:
        $im = @imagecreatefromjpeg($file);
        if ($im !== false) { return $im; }
        # GIF:
        $im = @imagecreatefromgif($file);
        if ($im !== false) { return $im; }
        # PNG:
        $im = @imagecreatefrompng($file);
        if ($im !== false) { return $im; }
        # WBMP:
        $im = @imagecreatefromwbmp($file);
        if ($im !== false) { return $im; }
       # Try and load from string:
        $im = @imagecreatefromstring(file_get_contents($file));
        if ($im !== false) { return $im; }
        return false;
}

function upFile($upfile){


    if ($_FILES[$upfile]['tmp_name']){


                $newName= str_replace(" ","_",basename( $_FILES[$upfile]['name']));
                    $dest=  $_SERVER[DOCUMENT_ROOT]."/uploads/".$newName;
                    if(move_uploaded_file($_FILES[$upfile]['tmp_name'], $dest)) {

                         return $newName;
                    }
                    else {
                        echo $_FILES[$upfile]['name']." - There was an error uploading the file, please try again!";

                        return "";
                    }
        }
        else {
            return "";
        }

}



    function multiUpdate($table,$clause,$cols){
                $cols= explode(",", $cols);

                     foreach ($cols as $colname) {
                                            global $$colname;
                                            $sqlinsert.= " $colname = '".$$colname."',";
                                }

                    $sqlinsert=removeComma($sqlinsert);


                    global $$clause;

                $query="update $table set $sqlinsert where $clause=".$$clause;
                $result=mysql_query($query)or die(  mysql_error()."<BR><BR><B>$query</b>");

}

  function removeComma($var){
        if(substr($var, -1)==","){$var = substr($var,0,-1);}
        if(substr($var, -2)==", "){$var = substr($var,0,-2);}
        return $var;
                        }


function conv($size){

$converted=2.54*$size;
$converted= sprintf("%01.0f", $converted);

if ($converted=="0"){$converted="N/A ";}
return $converted;
}

function dispThumbs($prodID,$max_i,$size){



        for ($i=1; $i<=$max_i; $i++)  {

         $filename=$_SERVER['DOCUMENT_ROOT']."/prodImages/$size/".$prodID."/".$i.".jpg";

            if (file_exists($filename)) {
                        echo "<a href='/photos/$prodID/$i/'><img  border=0 class='imgTH' width=100 height=67 src=/prodImages/$size/".$prodID."/".$i.".jpg></a>";

                }

        }
}



        function open_dir ($dir){
        if (is_dir($dir)) {
            if ($dh = opendir($dir)) {
                while (($file = readdir($dh)) !== false) {
                        if (preg_match ("/.jpg/i", "$file")){
                        $files.="$file,";
                    }
                }
                closedir($dh);
            }
        }
        if(substr($files, -1)==","){$files = substr($files,0,-1);}
        return $files;
}



  function sec2hms ($sec, $padHours = false) 
  {

    $hms = "";

    $hours = intval(intval($sec) / 3600); 

//    $hms .= ($padHours) 
   //       ? str_pad($hours, 2, "0", STR_PAD_LEFT). ':'
  //       : $hours. ':';

    $minutes = intval(($sec / 60) % 60); 

    $hms .= str_pad($minutes, 2, "0", STR_PAD_LEFT). ':';

    $seconds = intval($sec % 60); 

    $hms .= str_pad($seconds, 2, "0", STR_PAD_LEFT);

    return $hms;

  }

     function checkIMG($imgLink){

    if (file_exists($_SERVER['DOCUMENT_ROOT'].$imgLink)) {
        echo $imgLink;
        }
        else {
         echo "/content/images/nophoto.gif";
        }

   }

        function checkTH($imgLink){

    if (file_exists($_SERVER['DOCUMENT_ROOT'].$imgLink)) {
        echo $imgLink;
        }
        else {
         echo "/images/noimage.gif";
        }

   }

function getIMGsize($img){


list($width, $height, $type, $attr) = getimagesize($_SERVER['DOCUMENT_ROOT'].$img);
echo "params='lightwindow_width=$width,lightwindow_height=$height'";

}


function  titleCase($string)  { 
        $len=strlen($string); 
        $i=0; 
        $last= ""; 
        $new= ""; 
        $string=strtoupper($string); 
        while  ($i<$len): 
                $char=substr($string,$i,1); 
                if  (ereg( "[A-Z]",$last)): 
                        $new.=strtolower($char); 
                else: 
                        $new.=strtoupper($char); 
                endif; 
                $last=$char; 
                $i++; 
        endwhile; 

        $new= str_replace("Led ","LED ",$new);
        $new= str_replace("Lcd ","LCD ",$new);

        return($new); 
}; 




?>

person Webbnos    schedule 24.06.2014    source источник
comment
Конфигурация вызывается на каждой странице?   -  person Paul Radich    schedule 24.06.2014
comment
Почему вы говорите, что DOCTYPE не устанавливается. Нет ничего плохого в том, чтобы сначала установить переменные для заголовка с помощью php-кода. Используйте средство просмотра страниц браузера (F12), чтобы сравнить те, которые работают, с теми, которые не работают.   -  person mseifert    schedule 24.06.2014
comment
Привет - спасибо за ответы. Config.php вызывается не на каждой странице. Если я использую инструменты разработчика IE и сравниваю страницу, которая работает, с другой, я вижу, что тип документа не устанавливается.   -  person Webbnos    schedule 24.06.2014
comment
Поскольку вы включаете header.php, он должен писать заголовок, показанный в коде. Когда я размещаю ваш код в новом документе, я получаю заголовок. Убедитесь, что ваши пути верны - включен ли отчет об ошибках? Если ошибок нет, возможно, что-то не так с config.php? Выводит ли он какой-нибудь html? Что будет, если закомментировать, заголовок все равно не отображается.   -  person mseifert    schedule 24.06.2014
comment
Привет, спасибо за ваши комментарии - я исследовал, и страницы, которые работают, не вызывают config.php, поэтому это должно быть что-то в этом файле. Если я закомментирую это, то страница вообще не загружается. Я добавлю конфигурационный файл в свой пост. Если у кого-то есть время или знания, чтобы просмотреть и посмотреть, видят ли они проблему, я был бы очень благодарен. Я смотрел, но я новичок в PHP. Заранее спасибо, Сэм.   -  person Webbnos    schedule 27.06.2014


Ответы (1)


Учитывая, что проблема, скорее всего, связана с пробелами, нет ничего идеального. Простым ответом было бы просто поместить doctype в отдельный файл и добавлять каждую страницу с <?php include("../includes/doctype.php"); ?> перед любым другим. Как я уже сказал, не идеально, но с таким сайтом нет аккуратного и аккуратного решения.

Я предполагаю, что включение config.php не единообразно для всего сайта.

РЕДАКТИРОВАТЬ: файл config.php имеет пробел перед открывающим тегом <?php. Удалите это и все после последнего тега ?>, и все будет в порядке. Если это не сработает, следующим шагом будет предоставление первых нескольких строк вывода, которые получает браузер, или URL-адрес сайта.

Окончательное редактирование: это определенно проблема с пробелами. Просматривая исходный код на странице приложения, вы можете сказать, что перед DTD есть пустая строка. Рассмотрите возможность рефакторинга страниц, чтобы использовать один тег PHP вместо одного для каждой строки, например:

<?php include("../includes/config.php");

// SEO TAGGING 
$pageTitleDisp="Page Title";
$pageKeywords="cars planes bikes";
$pageDesc="this is a webpage that looks pap in IE";
$canonical="http://mydomain.com/about/";
$popbox="true";

include("../includes/header.php"); ?>

Нет веских причин иметь отдельные теги PHP в каждой строке. Также рассмотрите возможность удаления закрывающего тега ?> из файла config.php.

person Dan Cowell    schedule 24.06.2014
comment
Оказывается, похоже, что только страницы, содержащие config.php, отображают эти симптомы. Я добавил его в свой исходный пост, так как не вижу, какая часть может вызывать проблемы. Спасибо. - person Webbnos; 27.06.2014
comment
О, тогда это легко. В вашем config.php есть пробел перед открывающим тегом ‹? Php - удалите его, и все будет в порядке. - person Dan Cowell; 28.06.2014
comment
Спасибо за вашу помощь - пробел был добавлен, когда я вырезал и вставил код, я боюсь - я проверил исходный config.php, и перед открывающим тегом PHP нет пробелов. Дамба! Тогда я думал, ты что-то понял. Еще раз спасибо, Сэм. - person Webbnos; 30.06.2014
comment
Привет, Сэм, ты можешь разместить ссылку на сайт? Было бы намного проще, если бы я мог видеть вывод с вашего сервера. Даже анонимный дамп исходного кода страницы вашего браузера в корзине для вставки был бы кстати. - person Dan Cowell; 30.06.2014
comment
Привет, Дэн, это веб-сайт askeric.tv. Большое спасибо за ваше время! Если вы просматриваете его в IE, вы можете увидеть, что он выглядит ужасно на определенных страницах, а при просмотре в Firefox домашняя страница работает, но как только вы просматриваете страницу, загружающую файл config.php, например, получите цитату сверху навигации, вся страница скачет вниз. - person Webbnos; 01.07.2014
comment
Хорошо, это определенно где-то ненадежный пробел, вы можете увидеть его, если просмотрите исходный код страницы. Убедитесь, что на любой из этих страниц нет ничего перед строкой <?php include("../includes/config.php"); ?>, и рассмотрите возможность объединения включения конфигурации и остальной части кода php. См. Мой ответ для получения дополнительной информации. - person Dan Cowell; 02.07.2014