获取PHP的问题包括使用不同文件夹中的文件

时间:2011-06-19 11:49:58

标签: php include

我是一个完整的PHP菜鸟,我正在使用一个非常简单的PHP包括:

<?php include("~head.php"); ?>

为网站做一些模板(为我的所有页面实现常见的页眉,页脚,菜单)。

  • 注意:代字号(〜)就是为了让目录更易于查看(按字母顺序排列时将主文件推送到列表顶部)

它适用于同一目录中但当我在目录之外引用文件时的文件,如下所示:

<?php include("../~head.php"); ?>

然而,它似乎似乎没有找到文件,因为标题显然没有被拉入标记。

相反,如果我用完整的URL引用该文件,例如

<?php include("http://example.com/~head.php"); ?>

我的页面上出现以下错误代码。

Warning: include() [function.include]: URL file-access is disabled in the server configuration in /home/content/65/7392565/html/bikini/angela_bikini.php on line 1

Warning: include(http://example.com/~head.php) [function.include]: failed to open stream: no suitable wrapper could be found in /home/content/65/7392565/html/products/product_a.php on line 1

Warning: include() [function.include]: Failed opening 'http://example.com/~head.php' for inclusion (include_path='.:/usr/local/php5/lib/php') in /home/content/65/7392565/html/products/product_a.php on line 1

奇怪的是,“../ file.php”语法适用于非头文件(例如我用于菜单的包含)。

因为这样的代码变得有点碎片,很难在所有不同的页面上维护变化。任何想法或解决方案将非常感谢。我真的是一个菜鸟,所以我可能无法将头脑包裹在任何太过花哨的地方。 :)

感谢您的时间。

乔恩

2 个答案:

答案 0 :(得分:7)

不是仅使用../来获取上面的目录,而是这样的构造将创建完整的文件路径:

// Assuming you are including from the root
$application_path = dirname(__FILE__);
include("$application_path/../header.php);

通常我会通过定义一个常量来做,而不是使用变量。

define('APP_PATH', dirname(__FILE__));

将此用作:

// Assuming you are including at the file root:
define('APP_PATH', dirname(__FILE__));
include(APP_PATH . "/include/head.php");

// Assuming you are including from /include (one directory in)
// append a "/../" onto the end to indicate that the application
// root is one directory up from the currently executing file.
define('APP_PATH', dirname(__FILE__) . "/../");
include(APP_PATH . "somefile_at_the_root.php");

答案 1 :(得分:4)

你必须小心波浪号!在类UNIX操作系统下,代字号是主目录的快捷方式。如果Apache服务器可能在帐户www下运行,那么您的文件引用可以解释如下:

/home/www/head.php

对于使用完整URL的方法,错误说明全部:

  

在服务器配置中禁用了URL文件访问

忽略使用完整网址不是最佳做法(因为您的文件夹结构可能会发生变化等),您必须在allow_url_include中启用php.ini(请参阅PHP.net

如果您确实希望将重要文件放在首位,可以使用下划线_