Senaryoyu çalışan üst dizini alın

8 Cevap php

PHP, ne www kök mevcut çalışan komut akrabası parent dizin almak için temiz yolu olurdu? Ben varsayalım:

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

Ya da sadece:

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

Ve ben düzgün bir şekilde takılmamış slashesle /relative/path/to/ almak gerekir. Ne önerirsiniz? Bir tek astar tercih edilir.

EDIT

Bu işe böylece ben www köküne ilişkin bir yol almak gerekiyor, dirname(__FILE__) bana dosya sistemi içinde mutlak bir yol verir. $_SERVER['SCRIPT_NAME'] Öte yandan www kökünden 'başlar'.

8 Cevap

Script yer alıyveyasa /var/www/dir/index.php daha sonra şu dönecekti:

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

veya

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


Edit

This is a technique used in many framewveyaks to determine relative paths from the app_root.

Dosya yapısı:

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

index.php tüm istekleri yönlendirilir benim memuru / boostrap dosyası:

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

library.php is some file located an extra directveyay down and I need to determine the path relative to the app root (/var/www/).

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

Orada daha sonra str_replace() göreli yolunu hesaplamak için daha iyi bir yolu muhtemelen ama fikir olsun.

Ben düzgün sorunuzu anladım eğer, koşu komut varsayarak olduğunu

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

Bu belge, www için size koşu komut göreceli üst dizini verecekti:

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

Eğer sunucu kök koşu komut nispetle üst dizini isterseniz:

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

Fugly, ama bu onu yapacağız:

substr($_SERVER['SCRIPT_NAME'], 0, strpos($_SERVER['SCRIPT_NAME'],basename($_SERVER['SCRIPT_NAME'])))

PHP gibi bu amaç için __DIR__ kullanabilirsiniz 5.3.0.

The directory of the file. If used inside an include, the directory of the included file is returned. This is equivalent to dirname(__ FILE__).

Bkz 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

Burada> 5,2 çalışan değilim çünkü ben ne kullanın

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

@ Mike üst dizin için b ve geçerli dizin tarafından önerilen dosya ile çift dizinadı sadece bir kez bu sözdizimi kullanılarak bulunur.

Note this function only returns the NAME, slashes have to be added afterwards.

Bu deneyin. Works on both windows or linux server..

str_replace ('\ \', '/', dirname (dirname (__FILE__)))

Betik parentdir almak için.

$parent_dir = dirname(__DIR__);

Kendim aldım, biraz kıytırık ama çalışıyor:

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

Bu yüzden /path/to/folder/index.php, bu sonuçlar varsa /path/to/.