我是一个完整的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”语法适用于非头文件(例如我用于菜单的包含)。
因为这样的代码变得有点碎片,很难在所有不同的页面上维护变化。任何想法或解决方案将非常感谢。我真的是一个菜鸟,所以我可能无法将头脑包裹在任何太过花哨的地方。 :)
感谢您的时间。
乔恩
答案 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)
如果您确实希望将重要文件放在首位,可以使用下划线_
。