如何在PHP中设置绝对包含路径?

Nat*_*ong 40 php

在HTML中,我可以通过以"/"开头的文件路径找到从Web服务器的根文件夹开始的文件.喜欢:

/images/some_image.jpg
Run Code Online (Sandbox Code Playgroud)

我可以将该路径放在任何子目录中的任何文件中,它将指向正确的图像.

使用PHP,我尝试了类似的东西:

include("/includes/header.php");
Run Code Online (Sandbox Code Playgroud)

......但这不起作用.

我认为这个页面说的是我可以设置include_path一次,之后,它将被假设.但我不太懂语法.这两个例子都以句号开头,它说:

用一个 .在include路径中允许相对包含,因为它表示当前目录.

相对包含正是我想要的.

如何确保我的所有包含指向该root/includes文件夹?(额外奖励:如果我想将该文件夹放在公共目录之外怎么办?)

澄清

我的开发文件目前由XAMPP/Apache提供.这会影响绝对路径吗?(我不确定生产服务器是什么.)

更新

我不知道我的问题在这里.include_path我上面引用的东西正是我所寻找的,语法并不是真的令人困惑.我只是尝试过,效果很好.

我发生的一件事是,有些人可能认为"/ some/path"是"绝对路径",因为他们认为操作系统是Linux.此服务器是Windows,因此绝对路径必须以驱动器名称开头.

无论如何,问题解决了!:)

Rob*_*use 46

我所做的是将config.php文件放在我的根目录中.我的项目中的所有PHP文件都包含此文件.在那个config.php文件中,我然后执行以下操作;

define( 'ROOT_DIR', dirname(__FILE__) );
Run Code Online (Sandbox Code Playgroud)

然后在所有文件中,我知道我的项目的根目录是什么,可以做这样的事情

require_once( ROOT_DIR.'/include/functions.php' );
Run Code Online (Sandbox Code Playgroud)

对不起,没有获得公共目录以外的奖励积分;)这也有一个不幸的副作用,你仍然需要一个相对路径来查找config.php,但它使你的其他包括更容易.


Nat*_*ong 25

一个策略

我不知道这是不是最好的方式,但它对我有用.

$root = $_SERVER['DOCUMENT_ROOT'];
include($root."/path/to/file.php");
Run Code Online (Sandbox Code Playgroud)

  • 你太神奇了!! 我尝试了很多其他的东西,这完美地做到了.谢谢:) (3认同)

gnu*_*nud 8

include_path设置的工作方式类似于unix中的$ PATH(Windows中也有类似的设置).它包含多个目录名,由冒号(:)分隔.当您包含或要求文件时,将按顺序搜索这些目录,直到找到匹配项或搜索所有目录.

因此,为了确保您的应用程序始终包含您的路径(如果该文件存在),只需将include目录放在目录列表中.

ini_set("include_path", "/your_include_path:".ini_get("include_path"));
Run Code Online (Sandbox Code Playgroud)

这样,首先搜索include目录,然后搜索原始搜索路径(默认为当前目录,然后是PEAR).如果您在修改include_path时没有问题,那么这就是您的解决方案.


Jac*_*cco 6

include / require中没有任何内容禁止您使用绝对路径。所以你的例子

include('/includes/header.php'); 
Run Code Online (Sandbox Code Playgroud)

应该可以正常工作。假设路径和文件正确并且设置了正确的权限。
(从而允许您在文档根目录内或外部包含您喜欢的任何文件)

然而,这种行为被认为是可能的安全风险。因此,系统管理员可以设置open_basedir指令。

该指令配置了您可以包含/需要文件的位置,这可能只是您的问题。
某些控制面板(例如 plesk)默认将此指令设置为与文档根目录相同。

至于'.'语法:

/home/用户名/public_html <- 绝对路径  
public_html <- 相对路径  
./public_html <- 与上面的路径相同  
../username/public_html <- 另一个相对路径  

但是,我通常使用稍微不同的选项:

require_once(__DIR__ . '/Factories/ViewFactory.php');
Run Code Online (Sandbox Code Playgroud)

在此版本中,您可以指定相对于包含该语句的文件的绝对路径require_once()