PHP require_once路径

时间:2013-07-30 14:58:13

标签: php directory-structure

我的网站具有以下目录结构:

index.php
connections/database.php
contacts/details.php
inc/functions.php

index.php,database.php和details.php页面都需要functions.php页面。我将这些内容包含在以下页面中:

$path = dirname(__DIR__);
// looks like this: /Library/WebServer/Documents/clients/acme
require_once $path.'/inc/functions.php';

这在我的Mac开发服务器上运行良好。我刚刚将文件上传到运行IIS / Windows 2008的生产服务器,所以我知道会出现一些路径问题。

我不得不更改代码以包含functions.php文件:

$path = dirname(__DIR__);
// looks like this: C:\inetpub\wwwroot\client_sites\acme
require_once $path.'\inc\functions.php';

到目前为止这都是有效的,但是我想知道是否有一种简单的方法可以使这个动态化,所以我不必修改字符串以获得正确的反斜杠或正斜杠,具体取决于服务器环境?我会忘记在某些时候,或者客户端可能会更改服务器,然后这将破坏并需要手动更改路径。

无论服务器操作系统环境如何,都有办法自动处理路径吗?

2 个答案:

答案 0 :(得分:2)

嗯,PHP中有DIRECTORY_SEPARATOR常量,但没有必要使用它。如果你使用正斜杠,你会在所有情况下都没问题。 Windows不介意。

答案 1 :(得分:1)

在app bootstrap或autoload中定义DIRECTORY_SEPARATOR。

e.g。

<?php
define('DS', DIRECTORY_SEPARATOR); // set the 3rd param to true to define case-insensitive

一些PHP框架(如CodeIgniter)以相同的方式执行它以确保正确的目录路径。

所以要在你的例子中重新创建路径:

<?php
define('DS', DIRECTORY_SEPARATOR);

require_once dirname(__DIR__).DS.'inc'.DS.'functions.php';

查看Predefined Constantsdefine()的PHP手册。

另请考虑使用set_include_path()spl_autoload_register()

快乐的编码!