我的网站具有以下目录结构:
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';
到目前为止这都是有效的,但是我想知道是否有一种简单的方法可以使这个动态化,所以我不必修改字符串以获得正确的反斜杠或正斜杠,具体取决于服务器环境?我会忘记在某些时候,或者客户端可能会更改服务器,然后这将破坏并需要手动更改路径。
无论服务器操作系统环境如何,都有办法自动处理路径吗?
答案 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 Constants和define()的PHP手册。
另请考虑使用set_include_path()和spl_autoload_register()。
快乐的编码!