首页 > 解决方案 > 使用 PHP 常量和函数导航文件目录

问题描述

PHP 版本 5.6.40

目的是通过使用常量和函数来启用索引页面导航以分隔包含在以下子目录文件中的页眉和页脚等文件,以使站点更新更容易。

C:\wamp64\www\games_database\index.php
C:\wamp64\www\games_database\php\all_games.php
C:\wamp64\www\games_database\private\footer.php

header.php functions.php initialise.php
C:\wamp64\www\games_database\css\style.css

预期结果:

C:\wamp64\www\games_database\php\all_games.php

实际结果:

The requested URL /games_databasephp/all_games.php was not found on this server. 

使用的代码

索引.php

<?php
require_once('private/initialise.php');
?>
<?php 
include_once(PRIVATE_PATH . '/header.php');
?>
<main>
    <p></p>
    <p></p>
    <p></p>
    <p></p>
</main>
<?php
include_once(PRIVATE_PATH . '/footer.php');
?>

初始化.php

<?php
define("PRIVATE_PATH", dirname(__FILE__));
define("PROJECT_PATH", dirname(PRIVATE_PATH));
define("PUBLIC_PATH", PROJECT_PATH . 'php');
define("SHARED_PATH", PRIVATE_PATH . 'private');


$public_end = strpos($_SERVER['SCRIPT_NAME'], '/') + 15;
$doc_root = substr($_SERVER['SCRIPT_NAME'], 0, $public_end);
define("WWW_ROOT", $doc_root);
require_once('functions.php');  
?>

all_games.php

<?php
require_once('private/initialise.php');
?>
<?php include_once(PRIVATE_PATH . '/header.php');?>
<main>
    <table>
        <tr>
            <td>Game name </td>
            <td> </td>
        </tr>
        <tr>
            <td>Platform </td>
            <td> </td>
        </tr>
        <tr>
           <td>Type </td>
           <td> </td>
        </tr>
        <tr>
           <td>Released </td>
           <td> </td>
        </tr>
    </table>
</main>
<?php include_once(PRIVATE_PATH . '/footer.php');?>

函数.php

<?PHP
    function url_for($script_path){
    return WWW_ROOT . $script_path;
    }
?>

页脚.php

<footer>
    <p>&copy; 2019</p>
</footer>
</body>
</html>

头文件.php

<!doctype html>
<html>
<head>
    <meta charset="utf-8">
    <title>Games Database</title>
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="<?php echo url_for('css/style.css'); ?>" rel="stylesheet" 
    type="text/css">
</head> 
<body>
    <header>
        <h1>Games Database</h1>
    </header>
    <nav>
        <ul>
            <li><a href="<?php echo url_for('index.php'); ?>">Games Database</a></li>
            <li><a href="">Login/Register</a></li>
            <li><a href="<?php echo url_for('php/all_games.php'); ?>">View All Games</a></li>
        </ul>
    </nav>

使用的方法 - 为 PHP 常量分配文件路径 - 使用FILE 返回此文件的当前路径 - 使用 dirname() 返回父目录的路径 - 将根 URL 分配给 PHP 常量

我显然不完全理解如何在 PHP 中完全实现常量和函数,我怀疑问题出在 initialise.php 文件上,尤其是这部分代码

$public_end = strpos($_SERVER['SCRIPT_NAME'], '/') + 15;
$doc_root = substr($_SERVER['SCRIPT_NAME'], 0, $public_end);
define("WWW_ROOT", $doc_root);
require_once('functions.php');

标签: php

解决方案


我发现我需要在 url_for() 中放置一个额外的 /。我也忽略了将 ../ 放在所有链接到目录的开头。我愚蠢地认为,当我设置我的初始化约束和函数时,这将是不需要的。

我谦虚地感谢大家的时间和耐心。


推荐阅读