每页都需要页脚和页眉,但错误 500

require footer and header each page but error 500

,

我从 PHP 开始创建我的网站。我创建了页眉和页脚的组件以在每个页面上打印:require '/assets/components/header.php';require '/assets/components/footer.php';

所以,问题是在本地主机上,它可以工作,但在网站上,它没有工作,我有一个 http 错误 500

剧目: Folder tree

我试试:

1.不同类型link

require 'assets/components/header.php';

require './assets/components/header.php';

require '../assets/components/header.php';


2. 创建一个变量 $BASE_URL 来存储网站的 url 并要求这样:require "$BASE_URL/assets/components/header.php";。我将设置 'allow_url_include' 设置为 true 但出现此错误:

[04-Nov-2021 12:28:40 UTC] PHP Warning:  require(http://#####/assets/components/header.php): Failed to open stream: HTTP request failed! HTTP/1.1 500 Internal Server Error

'#####' -> 我的网站

我读到一个主题,将 'allow_url_include' 设置为 true 是不安全的,所以如果我们可以做不同的话。

Header.php

<?php
require_once "$BASE_URL"."assets/function.php";
if(!isset($title)){
    $title='Error 404 - Catif';
}
if(!isset($page)){
    $page='error';
}
?>
<!DOCTYPE html>
<html lang="fr">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href='/assets/css/style.css'>
    <title><?= $title ?></title>
</head>
<body>
    <nav>
        <div class="nav-left"><p class="nav-name">Catif</p></div>
        <div class="nav-right">
            <a class="nav-item <?php if($page === 'home'): ?>active<?php endif ?>" href="/index.php">Projets</a>
            <a class="nav-item ml-80 <?php if($page === 'me'): ?>active<?php endif ?>" href="views/me.php">Moi</a>
            <a class="nav-item ml-80 <?php if($page === 'contact'): ?>active<?php endif ?>" href="/views/contact.php">Contact</a>
        </div>
        <button class="nav-button">==</button>
    </nav>

    <div class="container">

在 PHP 中包含组件文件时,您应该使用 文件路径 ,而不是 URL。例如,我们可以使用相对文件路径来包含pageOther1.php中的文件头,应该是这样的。

require "../../../assets/components/header.php";
// OR
require __DIR__ . "/../../assets/components/header.php";

为了提高效率,特别是如果您要包含多个组件并具有不同级别的嵌套视图,您可以定义页眉和页脚路径(并包含任何其他全局脚本,如 functions.php)在应用的 根目录 上的 PHP 文件(例如 initialize.phpconfig.php)中。这样你只需要 require initialize.php 并使用 PHP 常量包含你想要的组件。

这是一种更有效的方法

在根目录

上的PHP文件(例如initialize.php)中将组件路径定义为常量
define("APP_PATH", dirname(__FILE__)); // The main project directory
define("HEADER", "APP_PATH" . "/assets/components/header.php"); // Path to header.php
define("FOOTER", "APP_PATH" . "/assets/components/footer.php"); // Path to footer.php

// You could also include your global scripts here and don't have to include it on each view page
require "APP_PATH" . "/path_to_global_script.php";

然后在视图中包含组件和脚本。 pageOther1.php 的例子是:

require "../../../initialize.php"; // Path to the file which defines the constants
require HEADER;
// Page content
require FOOTER;

您可以轻松地将其扩展为多个组件和函数脚本。