如何正确包含具有正确路径的文件并删除警告“文件不存在”

时间:2013-11-20 09:30:17

标签: php include htdocs

我正在开发一个连接到MySQL数据库的项目,需要以下内容:

  • 注册
  • 登录/已登录在/注销
  • 主页
  • 链接

登录者可以使用两项:

  • 我的书签
  • 联系我们

我目前的网站结构如下:

 *Shortened* URL (project root folder): sois.com/440/finalproject/
  • finalproject文件夹内容:htdocs文件夹| mysql_connect.php
  • htdocs文件夹内容:书签文件夹|联系人文件夹|主页文件夹|包括文件夹
  • 书签文件夹内容(所有PHP文件):添加|删除| deleteconfirm |指数|搜索| searchform |更新| updateform
  • 联系文件夹内容:contact.php
  • 主页文件夹内容(所有PHP文件):忘了|指数|链接|登录|登录|注销|注册
  • 包括文件夹内容:footer.php | header.php | logo.jpg

这是您在登录前应该看到的图像:

enter image description here

/Home/index.php的代码如下:

<?php # index.php
session_start();
//check session first
if (!isset($_SESSION['email'])){
include ('header.php');
}else
{
include ('header.php');
}
?>

<h2>Project Description</h2>
<h2>Blah Blah Blah ...</h2>
<h2>put images here if you want ...</h2>
<h2>change background ...</h2>
<h2>modify the site as you want ...</h2>

<?php
include ('footer.php');
?>

我的问题很简单,我收到错误:

  • “警告:include(kethcart.uwmsois.com/public_html/440/finalproject/htdocs/includes/header.php):无法打开流:/ home / kethcart / public_html / 440 / finalproject中没有此类文件或目录/htdocs/home/index.php在第5行“
  • “警告:include():无法打开'kethcart.uwmsois.com/public_html/440/finalproject/htdocs/includes/header.php'(include_path ='。:/ usr / lib / php:/ usr) / local / lib / php')在/home/kethcart/public_html/440/finalproject/htdocs/home/index.php第5行“
  • “警告:include(kethcart.uwmsois.com/public_html/440/finalproject/htdocs/includes/footer.php):无法打开流:/ home / kethcart / public_html / 440 / finalproject中没有此类文件或目录第19行的/htdocs/home/index.php“
  • “警告:include():无法打开'kethcart.uwmsois.com/public_html/440/finalproject/htdocs/includes/footer.php'(include_path ='。:/ usr / lib / php:/ usr) / local / lib / php')在/home/kethcart/public_html/440/finalproject/htdocs/home/index.php第19行“

问题: 如何正确链接header.php和footer.php(位于include文件夹中)的文件位置,以便我的index.php(位于Home文件夹中)正确显示,如上图所示?

虽然我知道StackOverflow周围还有其他帖子,但我找不到一个我完全理解并可以应用于我的情况的帖子。如果我的问题看起来很简单,我会道歉但我非常感谢任何帮助!

感谢大家,如果您有任何其他问题或需要更多详情,请与我们联系。

3 个答案:

答案 0 :(得分:0)

当你在PHP中包含文件时,就像你当前正在做的那样(仅提供文件名,例如header.php),PHP将查找与当前正在执行的文件相同的目录。

从我理解你的描述(我很难理解格式化),这是你的文档根目录中的目录布局(我只显示了对这个答案很重要的文件):

/home/index.php
/includes/header.php
/includes/footer.php

因此,如果您在/home/index.phpinclude 'header.php',PHP将假设您正在寻找位于/home/header.php的文件。您需要做的是告诉PHP您正在寻找其他位置。

在回答你的问题时,一个很好的方法就是告诉PHP看起来相对于当前目录的 。这就是您的包含之后的样子:

include '../includes/header.php';
include '../includes/footer.php';

这基本上告诉PHP从/home升级到一级(进入/),进入includes目录,并包含footer.php或{{1文件。

答案 1 :(得分:0)

您可以使用dirname(__FILE__); php函数 - 给定包含文件或目录路径的字符串,此函数将返回父目录的路径。

$file_path = dirname(__FILE__);
include $file_path . DIRECTORY_SEPARATOR . 'header.php';

参考:http://us1.php.net/dirname

答案 2 :(得分:0)

您可以使用__DIR__获取当前脚本的路径(如果 DIR 不可用,则可以dirname(__FILE__)

现在,要包含您可以执行的文件:

<?php
define('ROOT', __DIR__.'/');
include (ROOT.'includes/header.php');
// or include relative to the root dir (if it's in a parent or sub dir)
include (ROOT.'../../header.php');
include (ROOT.'../includes/header.php');
// and if you want a "cleaner inclusion"
// the following will get the full absolute path without ".."
$path = realpath(ROOT.'../../header.php');
include ($path);