获取正在运行的脚本的父目录

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了获取正在运行的脚本的父目录相关的知识,希望对你有一定的参考价值。

php中,获取当前运行脚本的父目录相对于www根目录的最简洁方法是什么?假设我有:

$_SERVER['SCRIPT_NAME'] == '/relative/path/to/script/index.php'

要不就:

$something_else == '/relative/path/to/script/'

我需要让正确插入斜线的/relative/path/to/。你会建议什么?一个衬垫是优选的。

编辑

我需要获得相对于www根的路径,dirname(__FILE__)在文件系统中给我一个绝对路径,这样就行不通了。另一方面,$_SERVER['SCRIPT_NAME']在www根处'开始'。

答案

如果您的脚本位于/var/www/dir/index.php,则以下内容将返回:

dirname(__FILE__); // /var/www/dir

要么

dirname( dirname(__FILE__) ); // /var/www

Edit

这是一种在许多框架中用于确定app_root的相对路径的技术。

文件结构:

 /var/
      www/
          index.php
          subdir/
                 library.php

index.php是我的调度程序/ bootstrap文件,所有请求都被路由到:

define(ROOT_PATH, dirname(__FILE__) ); // /var/www

library.php是一个位于额外目录下的文件,我需要确定相对于应用程序根目录的路径(/ var / www /)。

$path_current = dirname( __FILE__ ); // /var/www/subdir
$path_relative = str_replace(ROOT_PATH, '', $path_current); // /subdir

可能有更好的方法来计算相对路径然后str_replace(),但你明白了。

另一答案

这也是一种可能的解决方案

$relative = '/relative/path/to/script/';
$absolute = __DIR__. '/../' .$relative;
另一答案

这是我使用的功能。创建一次所以我总是有这个功能:

function getDir(){
    $directory = dirname(__FILE__);
    $directory = explode("/",$directory);
    $findTarget = 0;
    $targetPath = "";
    foreach($directory as $dir){
        if($findTarget == 1){
            $targetPath = "".$targetPath."/".$dir."";
        }
        if($dir == "public_html"){
            $findTarget = 1;
        }
    }
    return "http://www.".$_SERVER['SERVER_NAME']."".$targetPath."";
}
另一答案

我希望这个能帮上忙

function get_directory(){
    $s = empty($_SERVER["HTTPS"]) ? '' : ($_SERVER["HTTPS"] == "on") ? "s" : "";
    $protocol = substr(strtolower($_SERVER["SERVER_PROTOCOL"]), 0, strpos(strtolower($_SERVER["SERVER_PROTOCOL"]), "/")) . $s;
    $port = ($_SERVER["SERVER_PORT"] == "80") ? "" : (":".$_SERVER["SERVER_PORT"]);
return $protocol . "://" . $_SERVER['SERVER_NAME'] . dirname($_SERVER['PHP_SELF']);
}
define("ROOT_PATH", get_directory()."/" );
echo ROOT_PATH;
另一答案

得到它自己,它有点kludgy但它的工作原理:

substr(dirname($_SERVER['SCRIPT_NAME']), 0, strrpos(dirname($_SERVER['SCRIPT_NAME']), '/') + 1)

所以,如果我有/path/to/folder/index.php,这会产生/path/to/

另一答案

从PHP 5.3.0开始,您可以使用__DIR__来实现此目的。

该文件的目录。如果在include中使用,则返回包含文件的目录。这相当于dirname(__ FILE__)。

PHP Magic constants

C:www>php --version
PHP 5.5.6 (cli) (built: Nov 12 2013 11:33:44)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2013 Zend Technologies

C:www>php -r "echo __DIR__;"
C:www
另一答案

如果我正确理解了您的问题,请假设您正在运行的脚本

/relative/path/to/script/index.php

这将为您提供相对于文档www的运行脚本的父目录:

$parent_dir = dirname(dirname($_SERVER['SCRIPT_NAME'])) . '/';
//$parent_dir will be '/relative/path/to/'

如果您希望正在运行的脚本的父目录相对于服务器根目录:

$parent_dir = dirname(dirname($_SERVER['SCRIPT_FILENAME'])) . '/';
//$parent_dir will be '/root/some/path/relative/path/to/'
另一答案

获取当前脚本的parentdir。

$parent_dir = dirname(__DIR__);
另一答案

很难过,但这样做会:

substr($_SERVER['SCRIPT_NAME'], 0, strpos($_SERVER['SCRIPT_NAME'],basename($_SERVER['SCRIPT_NAME'])))
另一答案
$dir = dirname($file) . DIRECTORY_SEPARATOR;
另一答案

我希望这能帮到您。

echo getcwd().'<br>'; // getcwd() will return current working directory
echo dirname(getcwd(),1).'<br>';
echo dirname(getcwd(),2).'<br>';
echo dirname(getcwd(),3).'<br>';

输出:

C:wamp64wwwpublic_htmlstep
C:wamp64wwwpublic_html
C:wamp64www
C:wamp64
另一答案

这是我使用的,因为我没有运行> 5.2

function getCurrentOrParentDirectory($type='current')
{
    if ($type == 'current') {
        $path = dirname(__FILE__);  
    } else {
        $path = dirname(dirname(__FILE__));
    }
    $position = strrpos($path, '/') + 1;
    return substr($path, $position);
}

带有@mike b为父目录建议的文件的双dirname,只使用该语法一次找到当前目录。

注意这个函数只返回NAME,之后必须添加斜杠。

另一答案

试试这个。适用于Windows或Linux服务器..

str_replace函数( '\', '/',目录名(目录名(__ FILE__)))

以上是关于获取正在运行的脚本的父目录的主要内容,如果未能解决你的问题,请参考以下文章

获取shell脚本目录的父目录[重复]

常用python日期日志获取内容循环的代码片段

如何将值从子脚本传递给同时运行的父脚本?

android使用片段从相机或画廊获取照片[重复]

linux命令工作总结01

以编程方式嵌套的片段不反映导航上的父生命周期