如何在PHP中设置绝对包含path?
在HTML中,我可以通过使用“/”开始文件path,从Web服务器的根文件夹中find一个文件。 喜欢:
http://img.dovov.comsome_image.jpg
我可以把这个path放在任何子目录的任何文件中,它会指向正确的图像。
用PHP,我尝试了类似的东西:
include("/includes/header.php");
…但这不起作用。
我认为这个页面是说,我可以设置include_path
一次,之后,它会被假设。 但是我不太懂语法。 两个例子都是以一段时间开始的,它说:
用一个 。 在包含path中允许相对包含,因为它表示当前目录。
相对包括正是我不想要的。
我如何确保我所有的包含指向root/includes
文件夹? (奖金:如果我想将该文件夹放在公共目录之外呢?)
澄清
我的开发文件目前由XAMPP / Apache服务。 这是否影响绝对path? (我不确定生产服务器是什么。)
更新
我不知道我的问题在这里。 上面引用的include_path
是我正在寻找的东西,而且语法并没有让人困惑。 我刚刚尝试过,效果很好。
发生在我身上的一件事是,有些人可能以为“/ some / path”是“绝对path”,因为他们认为操作系统是Linux。 这个服务器是Windows,所以绝对path必须以驱动器名称开头。
无论如何,问题解决了! 🙂
我所做的是把一个config.php文件放在我的根目录下。 该文件包含在我的项目中的所有PHP文件。 在那个config.php文件中,我做了以下操作;
define( 'ROOT_DIR', dirname(__FILE__) );
然后在所有文件中,我知道我的项目的根源是什么,可以做这样的事情
require_once( ROOT_DIR.'/include/functions.php' );
对不起,在公共目录之外没有任何奖励点);这也有不幸的一面,你仍然需要一个findconfig.php的相对path,但是这会让你包含的其他部分更容易。
一个策略
我不知道这是否是最好的方法,但它已经为我工作。
$root = $_SERVER['DOCUMENT_ROOT']; include($root."/path/to/file.php");
include_path设置的工作方式类似于Unix中的$ PATH(在Windows中也有类似的设置)。它包含多个目录名,由冒号(:)分隔。 当您包含或需要文件时,将按顺序search这些目录,直到find匹配项或search到所有目录为止。
因此,为了确保您的应用程序始终包含您的path(如果文件存在),只需将您的包含目录首先放入目录列表中即可。
ini_set("include_path", "/your_include_path:".ini_get("include_path"));
这样,首先search包含目录,然后search原始searchpath(默认为当前目录,然后是PEAR)。 如果你没有修改include_path的问题,那么这是你的解决scheme。
没有任何内容/ 要求禁止你使用绝对path。 所以你的榜样
include('/includes/header.php');
应该工作得很好。 假设path和文件是正确的,并且具有正确的权限设置。
(从而允许您在文档根目录之外或之外包含任何您喜欢的文件)
但是,这种行为被认为是一种可能的安全风险。 因此,系统pipe理员可以设置open_basedir指令。
这个指令configuration你可以在哪里包含/需要你的文件,这可能只是你的问题。
一些控制面板(例如plesk)默认设置该指令与文档根目录相同。
至于'.'
句法:
/ home / username / public_html < - 绝对path public_html < - 相对path ./public_html < - 与上面的path相同 ../username/public_html < - 另一个相对path
另一个select是在$_SERVER['DOCUMENT_ROOT']
目录中创build一个文件,并且定义你的绝对path。
例如,如果你的$_SERVER['DOCUMENT_ROOT']
目录是
C:\wamp\www\
创build一个包含这个文件(即my_paths.php
)
<?php if(!defined('MY_ABS_PATH')) define('MY_ABS_PATH',$_SERVER['DOCUMENT_ROOT'].'MyProyect/')
现在,您只需要在MyProyect文件夹中的每个文件中包含此文件( my_paths.php
),以便您可以将MY_ABS_PATH
用作MyProject的绝对path。
不是直接回答你的问题,而是要记住一些事情:
当在你的ini中使用include和allow_url_include时,请注意,当从包含文件访问会话时,如果从脚本中包含一个使用绝对文件引用的文件,然后使用url文件引用在本地服务器上包含第二个文件具有不同的variables范围,并且从包含的文件中不会看到相同的会话。 原来的会话将不会从URL包含文件中看到。
来自: http : //us2.php.net/manual/en/function.include.php#84052
嘿所有…我有一个类似的问题,我的系统。 我需要一些安全方面的硬path。 想想最好的办法就像是抢了写的。 为快速肮脏的编码认为这个作品也.. ..–)
<?php $path = getcwd(); $myfile = "/test.inc.php"; /*
getcwd()指向:/ usr / srv / apache / htdocs / myworkingdir(例如)
echo ($path.$myfile); would return... /usr/srv/apache/htdocs/myworkingdir/test.inc.php access outside your working directory is not allowed. */ includ_once ($path.$myfile); //some code ?>
美好的一天strtok
我遵循这个WordPress的例子。 我去定义一个根path,通常是文档根目录,然后去定义一堆其他path(以及我的每个类目录,IE:数据库,用户,html等)。 通常我会手动定义根path,而不是依赖于服务器variables。
例
如果($ _ SERVER ['SERVERNAME'] ==“localhost”) { define(“ABS_PATH”,“/ path / to / upper / most / directory”); //手动 } 其他 { define(“ABS_PATH,dirname(__ FILE__)); //将path定义为包含文件的目录,通常是config.php } //定义其他path... 包括(绝对path “/ mystuff.php”。);
谢谢 – 这是2个链接之一,如果你的谷歌PHP的Apache窗口绝对path。
作为一个插手PHP开发人员的新手,我不明白为什么Apache Windopws系统上的绝对path是c:\ xampp \ htdocs(apache文档根目录 – XAMPP默认)而不是/
因此如果在http // localhost / myapp / subfolder1 / subfolder2 / myfile.php中,我想包含来自http // localhost / myapp的文件
我需要将其指定为:include(“c:\ xampp \ htdocs \ myapp \ includeme.php”)或include(“../../ includeme.php”)
不包括(“/ myapp / includeme.php”)
我想出了一行代码来设置我的每个PHP脚本的顶部,以弥补:
<?php if(!$root) for($i=count(explode("/",$_SERVER["PHP_SELF"]));$i>2;$i--) $root .= "../"; ?>
通过这个build筑物,$ root根据蜜蜂“../”从放置文件的任何地方逐步升级。 每当我想包括一个绝对path,线将是:
<?php include($root."some/include/directory/file.php"); ?>
我不太喜欢它,似乎是一个尴尬的方式来解决它,但它似乎工作无论系统的PHP运行和文件放置在哪里,使系统独立。 要到达web目录之外的文件,在$root
之后添加一些../
,例如$root."../external/file.txt"
。