PHP 在 HTML 的头部不起作用


php won't work in head of the html

我有一个标题.php和一个家.php。

我正在尝试将标题和描述从我的家传递到标题.php标题.php。问题出在我的标题.php,在 dom 中:看不到我的 php 变量,或者 php 只有在正文中工作正常时才能在我的 html 头部工作。

有什么建议吗?

这是我的文件:标题.php:

<?php session_start(); 
    header('Content-type: text/html; charset=utf-8');
    function sendPageInfo($title, $desc){
    if($title)
        $pageTitle= $title;
    if($desc)
        $description = $desc; 
    echo $pageTitle;
    }
?>
<!DOCTYPE html>
<html lang="en">
<head>
    <title><?php echo $pageTitle; ?></title> //the $pageTitle won't show up!!!
    <meta charset="UTF-8">
    <meta name ="description" content=" <?php echo $description; ?> "> //$description won't show
    <meta name="apple-mobile-web-app-capable" content="yes">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
    <link rel="stylesheet" href="css/menu.css"/>
    <link rel="stylesheet" type="text/css" href="css/pages.css" />
    <link rel="shortcut icon" href="images/favicon.ico" />
    <link href="css/lightbox.css" rel="stylesheet" />
</head>
<body>
<section class="bodyWrap"> 
<?php echo $pageTitle; ?> //// PAGE TITLE DOES SHOW UP!!!!!!!!!!!
    <section class="headerNav">
        <div class="logo">
        </div>
        <nav class="tpMenu shdw">
            <ul>
                <li><a href="home.php">Home</a></li>
                <li><a class="events" href="events.php">Events</a></li>
                <li><a class="press" href="pressNotes.php">Press</a></li>
                <li><a class="media" href="eventsalbum.php">Media</a></li>
                <li><a class="about" href="about.php">Our Vision</a></li>
                <li><a class="contact" href="contact.php">Contact Us</a></li>
<!--This is where you add memeber.php if the user is signed in-->
                 <?php
                  if(!isset($_SESSION['username']))
                  {
                  echo "<li><a href='"MemberLogin.php'"> Login</a></li>";
                  }
                  ?>
                 <?php
                  if(isset($_SESSION['username']))
                  {
                    echo "Welcome! &nbsp;";
                    echo $_SESSION['username'];
                    echo "&nbsp;&nbsp;&nbsp;&nbsp;";
                    echo "<li><a href='"logout.php'">Log out</a></li>";
                  }
                  ?>
                  </li>
          </ul>
        </nav>
    </section>

首页.php:

<?php include_once("includes/header.php");
    sendPageInfo('Troy Telugu Association Home', 'A Nonprofit organization fouced on South Indian culture in Troy, Michigan'); 
?>
<?php include_once("addHomeContentAlbum.php");?>
<?php include_once("includes/footer.php");?>

函数 sendPageInfo 永远不会被调用,也不会修改任何全局变量。它只创建新的函数局部变量。

直到include_once("includes/header.php")之后才调用sendPageInfo()。因此,在包含标头时,$pageTitle是未定义的。

确实出现的$pageTitle是您在sendPageInfo()中回响

的那个。

PHP 变量不能按照你使用它们的方式工作。

当您包含标头时,您的 html 将立即创建并回显或缓冲,具体取决于您使用的是缓冲区。

此时,您的页面标题未定义,因此不会回显任何内容。

您的函数将永远无法更改页面标题,因为它在调用时已经回显(PHP 变量在这里无法按照您想要的方式工作,尽管一些模板 enginges 可以完成您尝试使用引用做的事情)。

尝试在包含标题之前直接设置页面标题,而不是使用函数。

其他人回答了为什么它不起作用(这些变量在函数之外不存在)。 与其与全局变量一起玩弄,不如在家里这样做.php:

<?php
$pageTitle   = 'Troy Telugu Association Home';
$description = 'A Nonprofit organization fouced on South Indian culture in Troy, Michigan';
include_once("includes/header.php");

查看包括.php:

<?php
function write_head($title, $descr){
   echo "<head>'n";
   echo "   <title>$title</title>'n";
   echo "   <meta http-equiv='"Content-Type'" content='"text/html; charset=iso-8859-1'">'n";
   echo "   <meta name ='"description'" content='"$descr'">'n";
   echo "</head>'n";
}//write_head
?>

和索引.php:

<html>
<?php
   include_once("incl.php");
   write_head('Troy Telugu Association Home', 'A Nonprofit organization fouced on South Indian culture in Troy, Michigan');
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<body>
<h1>Stackoverflow is cool</h1>
</body>
</html>

它是您正在尝试的简化版本,并且可以工作.
您对"////页面标题确实显示 UP!!!!!!!!!!"行的结果感到困惑。但我认为你错了.
显示的标题来自行:
"回声$pageTitle;"内 "function sendPageInfo($title, $desc){"
正如其他海报所提到的,$pageTitle仅在"sendPageInfo"中有效。您正在其范围之外使用它。它不是全局可见的。