包含文件的PHP路径

时间:2011-09-25 09:54:20

标签: php .htaccess include-path

我有一个带index.php的网站。 index.php有许多包含文件,如

 <?php include_once('scripts/php/index_mainImageJoin.php');?>

我在根目录下创建了一个名为'extrapages'的新文件夹,我将在那里有一些页面,其中包含与该网站相关的信息。我已经添加了如上所述的include_once文件并更改了路径,这些连接正常。

我发现的问题是包含文件中的路径失败。例如:如果图像或其他包含文件位于包含内,则从“extrapages”文件夹运行时会失败。路径问题。

有没有好办法解决这个问题? 我是否可以将“extrapages”下的页面的站点根目录(www)的路径更改/设置为一个文件夹?

我可以将这些页面移动到根目录上,它们可以正常运行,但我真的不希望网站根目录上的所有混乱。

任何想法&amp; THX

4 个答案:

答案 0 :(得分:1)

任何路径问题的关键都称为绝对路径

  • 在为您的网站(包括图片来源)创建超链接时,始终从/开始,然后是完整正确的路径。它永远不会让你失望。

  • 对于文件系统调用是一样的:始终使用绝对路径。您的服务器通常为您提供非常方便的变量$_SERVER['DOCUMENT_ROOT'],其中包含文件系统与Web服务器相遇的点,指向您的Web根目录。

因此,从您网站的任何位置调用时,

include $_SERVER['DOCUMENT_ROOT'].'/scripts/php/index_mainImageJoin.php';

将始终指向同一位置

答案 1 :(得分:0)

你应该使用dirname__FILE__使用这两个常量你应该能够包含相对于当前文件的文件而不是web服务器调用的php脚本。

例如

include_once dirname(__FILE__) . '/../include.php';

dirname:将返回路径的目录部分

__FILE__:是一个魔术常量,它被当前文件的路径取代。

执行此类操作的唯一问题是锁定项目的结构,但大多数时候都可以接受。

答案 2 :(得分:0)

只需使用set_include_path()添加一次包含路径(位于开头某处或配置文件中),请参阅manual。使用绝对路径(不是相对路径;可以使用dirname(__FILE__)),它应该始终有效。

答案 3 :(得分:0)

如果您使用的是PHP 5.3.0或更高版本,您可以(而不是RageZ建议)使用__DIR__(新定义的魔术常量)。

示例:

include __DIR__ . '/../include.php';

现在,当你想避免../并映射你的包含时,这没有用。但是有一种更好的方法 - 在所有前端文件(应该是唯一的用户可访问的PHP文件)中,您定义了一个常量,它提供脚本的根路径(而不是当前文件)。 / p>

例如:

index.php

<?php
define('MYSCRIPT_ROOT', dirname(__FILE__));
// or in php 5.3+ ...
define('MYSCRIPT_ROOT', __DIR__);

// ... do some stuff here

include MYSCRIPT_ROOT . '/includes/myinclude.php';

现在假设我们想在include目录中包含一个文件。

我们在includes/myinclude.php中执行此操作,并包含文件includes/myotherinclude.php

includes/myinclude.php

<?php
if(!defined('MYSCRIPT_ROOT')) exit; // prevent direct access - ALWAYS a good idea.

// ... do stuff here or something

include MYSCRIPT_ROOT . '/includes/myotherinclude.php';

请记住,包含路径应​​该直接相对于项目本身的 root 目录,而不仅仅是其中一个前端文件。如果在子目录中有前端文件,则在定义常量时需要返回项目根目录。

示例:

subdirectory/index.php

index.php

<?php
define('MYSCRIPT_ROOT', dirname(dirname(__FILE__)));
// or in php 5.3+ ...
define('MYSCRIPT_ROOT', dirname(__DIR__));

// ... do some stuff here

include MYSCRIPT_ROOT . '/includes/myinclude.php';

我们在这里所做的就是添加一个dirname()调用,该调用将取消路径中的目录。 请参阅:http://us.php.net/manual/en/function.dirname.php