每页都需要页脚和页眉,但错误 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.php
或 config.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;
您可以轻松地将其扩展为多个组件和函数脚本。
嗨,
我从 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.php
或 config.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;
您可以轻松地将其扩展为多个组件和函数脚本。