【问题标题】:Website built with PHP Includes that include head content使用 PHP 构建的网站包括包含头部内容的网站
【发布时间】:2014-06-24 15:30:50
【问题描述】:

我接管了一个基于 PHP 构建的网站。基本上,大多数页面在 IE 中都不能正确显示,我认为这是因为 DOCTYPE 没有设置。

经过进一步调查,似乎所有头部信息(包括 DOCTYPE)都在名为 header.php 的 PHP 包含文件中,这很公平,但是在未正确加载的页面上,在此包含之前的代码调用这就是为什么没有设置 DOCTYPE。

将 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); 
}; 




?>

【问题讨论】:

  • 每个页面都调用配置吗?
  • 你为什么说 DOCTYPE 没有设置。首先让 php 代码为标头设置变量没有任何问题。使用浏览器的页面查看器 (F12) 比较有效的和无效的。
  • 您好 - 感谢您的回复。 config.php 不会在每个页面上调用。如果我使用 IE 的开发人员工具并将正在运行的页面与不能运行的页面进行比较,我可以看到没有设置文档类型。
  • 由于您包含 header.php,它“应该”编写代码中显示的标题。当我将您的代码发布到新文档中时,我得到了标题。确保您的路径正确 - 是否有错误报告?如果没有错误,也许config.php 有问题?它输出任何html吗?如果您将其注释掉会发生什么,标题仍然不显示。
  • 您好,感谢您的 cmets - 我已经调查过并且可以正常工作的页面不会调用 config.php,因此它必须是此文件中的内容。如果我将其注释掉,则该页面根本不会加载。我会将配置文件添加到我的帖子中。如果有人有时间或知识浏览并查看他们是否能看到问题,我将非常感激。我看过但对 PHP 很陌生。提前谢谢你,山姆。

标签: php html include doctype


【解决方案1】:

鉴于问题很可能是空白之一,因此没有什么是理想的。简单的答案是将 doctype 放在它自己的文件中,并在每个页面前面加上&lt;?php include("../includes/doctype.php"); ?&gt;。就像我说的那样,不理想,但是对于这样的网站,没有整洁的解决方案。

我假设 config.php 的包含在整个网站上并不一致。

编辑:config.php 文件在开始 &lt;?php 标记之前有空格。删除它以及最后一个 ?&gt; 标记之后的任何内容,你应该没问题。如果这不起作用,下一步是提供浏览器接收到的输出的前几行,或站点的 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 文件中删除结束?&gt; 标记。

【讨论】:

  • 事实证明,似乎只有包含 config.php 的页面才会显示这些症状。我已将其添加到我的原始帖子中,因为我看不出哪个部分可能导致问题。谢谢。
  • 哦,那很简单。在 config.php 中的
  • 感谢您的帮助 - 我担心剪切和粘贴代码时添加了空格 - 我检查了原始 config.php 并且在开始 PHP 标记之前没有空格。坝!那时我以为你在做某事。再次感谢你,山姆。
  • 嗨,Sam,您能发布一个指向该网站的链接吗?如果我能看到您服务器的输出,那就容易多了。即使是在粘贴箱中匿名转储浏览器页面源也很方便。
  • 嗨,丹 - 网站是 askeric.tv。非常感谢您的宝贵时间!如果您在 IE 中查看它,您会发现它在某些页面上看起来很糟糕,并且在 Firefox 中查看时,主页可以工作,但是当您查看加载 config.php 文件的页面时,例如“获取报价”顶部导航,整个页面向下跳转。
猜你喜欢
  • 2011-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-22
相关资源
最近更新 更多