PHP:如何在使用auto_prepend_文件时设置动态标题?

PHP:如何在使用auto_prepend_文件时设置动态标题?,php,Php,标题说明了一切:我希望页面确定标题,但标题是在阅读页面之前设置的(我想)。有没有办法做到这一点,或者我注定要在每一页上都包含标题 以下是我所拥有的: php.ini: auto_prepend_file = "header.php" header.php: <?php if (isset($title) == false) { $title = "foobar"; } $title = "My Site : " . $title; ?> &

标题说明了一切:我希望页面确定标题,但标题是在阅读页面之前设置的(我想)。有没有办法做到这一点,或者我注定要在每一页上都包含标题

以下是我所拥有的:

php.ini:

auto_prepend_file = "header.php"
header.php:

<?php 
    if (isset($title) == false) {
        $title = "foobar";
    }
    $title = "My Site : " . $title;
?>
<title><?php echo($title) ?></title>

index.php

<?php 
    $title = "Home"; // ideally this would make the title "My Site : Home"
?>

我不使用auto_prepend_文件,而是使用:

include 'header.php';
我不使用auto_prepend_文件的一个重要原因是,如果您移动到另一台服务器,您必须记住编辑php.ini。如果只包含该文件,则可以将代码移动到任何服务器

而且,就像弗雷德二世说的,我不会用括号。此外,您在回声后缺少一个分号

为了更进一步,我将创建一个名为$config.php或$vars.php的文件。在一切之前包括它,并让它定义所有全局变量和常量


我想检查一下:

这不是一个理想的答案,但我可以使用CGI变量获取页面名称,然后将其转换为标题

function get_title($page){
    $title = str_replace("/", "", $page);
    $title = str_replace("_", " ", $title);
    $title = str_replace(".php", "", $title);
    $title = ucfirst($title);
    if($title = "Index"){
        $title = "Home";
    } elseif ($title == "") {
        $title = 'Foobar';
    }
    return $title;
}

$title = get_title($_SERVER["PHP_SELF"]);
$title = 'My Site: ' . $title;

作为我最初评论的后续,我将此作为一个答案发布,因为虽然它没有具体解决问题,但它解决了根本原因

免责声明:下面的代码有很多问题,特别是安全性,它不是直接复制的,只是解释了概念

你需要做的是有一个容器文件,其中包括你的头和其他任何东西,每个PHP文件都包含在其中。例如,将容器命名为
index.php
,并包含以下内容:

<?php
    include 'header.php';

    if ($_GET['page'])
        include $_GET['page'].'.php';

    include 'footer.php';
?>

然后,您拥有的每个PHP页面都将被包装在
index.PHP
文件中,您可以在头文件中添加任何需要的内容,头文件将包含在所有文件中。这样,您就不必在单个页面文件中包含任何内容

客户端将使用查询字符串访问您的页面,例如:
index.php?page=test


同样,出于安全原因,您仍然希望在每个单独的文件中包含基本检查,但从技术上讲,这可以在您的计划中避免。你肯定不需要在每个文件中都包含巨大的头文件,比如MySQL连接等。此外,为了安全起见,你应该对$\u GET变量进行严格检查,以确保只包含你想要的页面。

我会定义一个
writeTitle
(或类似)函数,该函数位于您正在自动预编的
header.php
文件中:

header.php

<?php

function writeTitle($title = 'foobar') {
    $title = "My Site : " . $title;
    return '<title>' . $title . </title>';
}
<?php

echo writeTitle('Home');

实现这一点的标准方法是创建一个包含头的容器文件,然后从中包含所有其他文件。您不应该在每个文件中都包含头文件(尽管出于安全目的,您可能希望包含一些基本会话检查)。@Ynhockey您知道一些文档描述了正确的方法吗?不是一个函数,它是一个语言构造
echo$title
谢谢@Fred ii-我喜欢使用括号来提高自己的可读性,这样做有什么危险吗?我怀疑有危险,只是不需要括号;虽然它仍然可以工作,但只需额外敲击两下键盘;)好的,但我试图避免在每个内容页上都包含header.php。似乎那个链接说我必须在每个页面上都包含标题,对吗?或者我遗漏了什么?对于这个方法,你必须在每个内容页面上都包含标题。除非您使用了一个框架,比如microMVC,并将其加载到视图之前或视图中。同样,我建议不使用php.ini的唯一原因是,您可能必须切换服务器,或者您可能希望此服务器上的更多站点不自动加载文件…+1,这是一个很好的理由,不使用ini文件。如果您必须在每个页面上都包含标题,那么您应该重新考虑如何构建项目@Travisheeter这也可以扩展为查找标题的查询字符串变量,但我个人不想在每个内部href中都放置标题变量,请确保正确执行此操作
此外,为了安全起见,您应该对$\u GET变量进行最严格的检查,以确保只包含您想要的页面。
但这不会将标题写入内容页而不是标题(不在元素中)?我的答案基于您的
header.php
文件-这取决于您的头文件中还有什么(如果有的话)。PSR建议文件声明功能或显示内容(“副作用”),而不是两者兼而有之。你可以看看模板库。