我有一个带index.php的网站。 index.php有许多包含文件,如
<?php include_once('scripts/php/index_mainImageJoin.php');?>
我在根目录下创建了一个名为'extrapages'的新文件夹,我将在那里有一些页面,其中包含与该网站相关的信息。我已经添加了如上所述的include_once文件并更改了路径,这些连接正常。
我发现的问题是包含文件中的路径失败。例如:如果图像或其他包含文件位于包含内,则从“extrapages”文件夹运行时会失败。路径问题。
有没有好办法解决这个问题? 我是否可以将“extrapages”下的页面的站点根目录(www)的路径更改/设置为一个文件夹?
我可以将这些页面移动到根目录上,它们可以正常运行,但我真的不希望网站根目录上的所有混乱。
任何想法&amp; THX
答案 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