0

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

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';

到目前为止,这一切都有效,但我想知道是否有一种简单的方法可以使这种动态化,因此我不必根据服务器环境修改字符串以获得正确的反斜杠或正斜杠?我有时会忘记,否则客户端可能会更改服务器,然后这会中断并需要手动更改路径。

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

4

2 回答 2

3

嗯,PHP 中有 DIRECTORY_SEPARATOR 常量,但没有必要使用它。如果您使用正斜杠,那么在所有情况下都可以。Windows 不会介意的。

于 2013-07-30T15:02:38.810 回答
0

在您的应用引导或自动加载中定义 DIRECTORY_SEPARATOR。

例如

<?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';

查看 PHP Manual for Predefined Constantsdefine()

还可以考虑使用set_include_path()spl_autoload_register()

快乐编码!

于 2013-07-30T15:14:04.317 回答