获取运行脚本的父目录
在PHP中,获取当前运行脚本的父目录相对于www根的最简洁的方法是什么? 假设我有:
$_SERVER['SCRIPT_NAME'] == '/relative/path/to/script/index.php'
要不就:
$something_else == '/relative/path/to/script/'
我需要得到/relative/path/to/
正确插入斜线。 你会build议什么? 一个class轮是首选。
编辑
我需要得到一个相对于www根的path, dirname(__FILE__)
在文件系统中给了我一个绝对path,所以不起作用。 另一方面, $_SERVER['SCRIPT_NAME']
在www根开始。
如果您的脚本位于/var/www/dir/index.php
则以下内容将返回:
dirname(__FILE__); // /var/www/dir
要么
dirname( dirname(__FILE__) ); // /var/www
编辑
这是一个在许多框架中用来确定app_root的相对path的技术。
文件结构:
在/ var / 万维网/ 的index.php 子目录/ library.php
index.php是我的dispatcher / boostrap文件,所有请求都被路由到:
define(ROOT_PATH, dirname(__FILE__) ); // /var/www
library.php是一些文件位于一个额外的目录,我需要确定相对于应用程序根(/ var / www /)的path。
$path_current = dirname( __FILE__ ); // /var/www/subdir $path_relative = str_replace(ROOT_PATH, '', $path_current); // /subdir
可能有更好的方法来计算相对path,然后str_replace()
但你明白了。
从PHP 5.3.0开始,可以使用__DIR__
来达到这个目的。
文件的目录。 如果在include中使用,则返回包含文件的目录。 这相当于dirname(__ FILE__)。
看PHP魔术常量 。
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/'
如果您想要运行脚本的父目录相对于服务器root:
$parent_dir = dirname(dirname($_SERVER['SCRIPT_FILENAME'])) . '/'; //$parent_dir will be '/root/some/path/relative/path/to/'
获取当前脚本的parentdir。
$parent_dir = dirname(__DIR__);
Fugly,但这会做到这一点:
substr($_SERVER['SCRIPT_NAME'], 0, strpos($_SERVER['SCRIPT_NAME'],basename($_SERVER['SCRIPT_NAME'])))
$dir = dirname($file) . DIRECTORY_SEPARATOR;
这是我使用,因为我没有运行> 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为父目录build议的文件名为double dirname,使用该语法find当前目录一次。
注意这个函数只返回NAME,之后必须加斜线。
尝试这个。 适用于Windows或Linux服务器
str_replace函数( '\\', '/',目录名(目录名(__ FILE__)))
这也是一个可能的解决scheme
$relative = '/relative/path/to/script/'; $absolute = __DIR__. '/../' .$relative;
这是我使用的一个function。 创build一次,所以我总是有这个function:
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.""; }
我希望这能帮到您。
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:\wamp64\www\public_html\step C:\wamp64\www\public_html C:\wamp64\www C:\wamp64
有我自己,这有点kludgy,但它的作品:
substr(dirname($_SERVER['SCRIPT_NAME']), 0, strrpos(dirname($_SERVER['SCRIPT_NAME']), '/') + 1)
所以如果我有/path/to/folder/index.php
,这将导致/path/to/
。