获取根网站到该网站的文件夹并不困难但我正在尝试获取所有网站所在的文件夹而不是特定网站的根文件夹。我一直在使用下面的代码,但是我遇到了一个影响$ CommonPath的实例,由于一个网站的特定结构,它不起作用。
换句话说,我的一个Windows开发系统有类似的东西:
C:\Server\Sites\site1.loc
C:\Server\Sites\site2.loc
C:\Server\Sites\site3.loc
和另一个基于Linux的开发系统有:
/var/www/html/site1.loc
/var/www/html/site2.loc
/var/www/html/site3.loc
我试图从这些根目录下的子文件夹或两个代码中获取C:\ Server \ Sites \或/ var / www / html /。如何在不必指定创建变量的子文件夹的情况下完成?
$SiteFolder = @end(explode(DIRECTORY_SEPARATOR, dirname(__DIR__)));
$CommonPath = str_replace($SiteFolder,"",dirname(__DIR__)) . "common" . DIRECTORY_SEPARATOR;
$ConfigPath = dirname(__DIR__) . DIRECTORY_SEPARATOR . "configuration" . DIRECTORY_SEPARATOR;
$FunctionsPath = dirname(__DIR__) . DIRECTORY_SEPARATOR . "functions" . DIRECTORY_SEPARATOR;
答案 0 :(得分:0)
你可以看一下:
realpath - 返回规范化的绝对路径名
http://php.net/manual/en/function.realpath.php
如果路径/文件不存在,则返回false。
<?php
echo realpath('/windows/system32');
echo realpath('C:\Program Files\\');
?>
<强>输出强>:
C:\WINDOWS\System32
C:\Program Files
已添加参考:
这也可以帮助您:Get 'My Documents' path in windows using php
答案 1 :(得分:0)
我终于通过首先为站点的根创建变量,然后在目录分隔符上爆炸并仅获取最后一位,然后将其从路径中过滤掉。也许它不是最优雅的代码,但似乎有效。
$dirSeparator = DIRECTORY_SEPARATOR;
$serverRoot = str_replace("/",$dirSeparator,$_SERVER['DOCUMENT_ROOT']);
$SiteFolder = end(explode($dirSeparator,$serverRoot));
$CommonPath = str_replace($SiteFolder,"",$serverRoot);
我不确定为什么我无法直接使用 DIRECTORY_SEPARATOR ,但为它创建变量确实有效。另外,可能是一个PHP错误,在Windows服务器上使用 $ _ SERVER [&#39; DOCUMENT_ROOT&#39;] 仍然会提供Linux目录分隔符,因此我必须执行 str_replace()< / strong>解决这个问题。
我需要做的所有这一切的原因是能够包含具有别名文件夹中的多个站点共有的功能的文件,所以我的实际代码是这样的:
$CommonPath = str_replace($SiteFolder,"",$serverRoot) . "common" . $dirSeparator;
答案 2 :(得分:0)
在可避免的情况下,不建议将“ stfu 运算符”(@
)与end()
一起使用。
我可能会推荐字符串函数而不是临时数组操作:
代码:(Demo)
$document_roots = [
"C:\Server\Sites\site1.dev",
"C:/Server/Sites/site1",
"/var/www/html/site1.dev"
];
foreach ($document_roots as $document_root) {
$prepared = str_replace("\\","/",$document_root);
echo substr($prepared,0,strrpos($prepared,"/"));
echo " or ";
echo preg_replace("~/[^/]*$~","",$prepared);
echo "\n";
}
输出:
C:/Server/Sites or C:/Server/Sites
C:/Server/Sites or C:/Server/Sites
/var/www/html or /var/www/html