如何在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"