PHPでは、wwwルートに関連する現在実行中のスクリプトの親ディレクトリを取得する最もクリーンな方法は何ですか?私が持っていると仮定します:
_$_SERVER['SCRIPT_NAME'] == '/relative/path/to/script/index.php'
_
あるいは単に:
_$something_else == '/relative/path/to/script/'
_
そして、スラッシュが正しく挿入された_/relative/path/to/
_を取得する必要があります。何を提案しますか? 1つのライナーが好ましい。
[〜#〜] edit [〜#〜]
Wwwルートへの相対パスを取得する必要があります。dirname(__FILE__)
はファイルシステム内の絶対パスを提供するため、機能しません。 _$_SERVER['SCRIPT_NAME']
_一方、wwwルートで「開始」します。
スクリプトが_/var/www/dir/index.php
_にある場合、次が返されます。
_dirname(__FILE__); // /var/www/dir
_
または
_dirname( dirname(__FILE__) ); // /var/www
_
これは、多くのフレームワークでapp_rootからの相対パスを決定するために使用される手法です。
ファイル構造:
/var/ www / index.php subdir / library.php
index.phpは、すべてのリクエストがルーティングされるディスパッチャ/ブーストファイルです。
_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()
よりも相対パスを計算する方が良い方法はありますが、アイデアは得られます。
PHP 5.3.0では、__DIR__
この目的のために。
ファイルのディレクトリ。インクルード内で使用される場合、インクルードされたファイルのディレクトリが返されます。これは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
現在のスクリプトのparentdirを取得します。
$parent_dir = dirname(__DIR__);
あなたの質問を適切に理解していれば、実行中のスクリプトは
/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/'
Fuいが、これはそれを行います:
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で示唆されているように、ファイルのあるdirnameをダブルクリックし、その構文を1回使用するだけで現在のディレクトリを見つけます。
この関数はNAMEのみを返すことに注意してください。その後にスラッシュを追加する必要があります。
これがお役に立てば幸いです。
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
これを試して。 両方のWindowsまたはLinuxサーバーで動作します。
str_replace( '\\'、 '/'、dirname(dirname(__ FILE__)))
これが役立つことを願っています
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;
これも可能な解決策です
$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."";
}