PHP dahil oluyor nereden olursa olsun göreceli dizin almak nasıl?

2 Cevap php

Bu ise Path_To_DocumentRoot/a/b/c.php, her zaman olmalıdır /a/b.

Ben bunu kullanın:

dirname($_SERVER["PHP_SELF"])

Farklı bir dizinde başka bir dosya ile dahil oluyor ama ne zaman işe yaramaz.

EDIT

Ben belge köküne göreli bir yol gerekir. Bu web uygulamasında kullanılır.

Ben aynı sorun başka bir soru, ama henüz hiçbir kabul cevabı orada bulmak.

http://stackoverflow.com/questions/1240462/php-convert-file-system-path-to-url

2 Cevap

Eğer $_SERVER['SCRIPT_NAME'] erişimi var mı? Bunu yaparsanız, yapıyor:

dirname($_SERVER['SCRIPT_NAME']);

Çalışmalıdır. Aksi takdirde bu do:

In PHP < 5.3:

substr(dirname(__FILE__), strlen($_SERVER['DOCUMENT_ROOT']));

Or PHP >= 5.3:

substr(__DIR__, strlen($_SERVER['DOCUMENT_ROOT']));

Sen realpath() gerekiyor ve bunun gibi str_replace() Tüm \ / tamamen taşınabilir yapmak için, olabilir:

substr(str_replace('\\', '/', realpath(dirname(__FILE__))), strlen(str_replace('\\', '/', realpath($_SERVER['DOCUMENT_ROOT']))));

PHP < 5.3:

dirname(__FILE__)

PHP> = 5.3:

__DIR__

EDIT:

İşte php dosyası çalışan yoluna dahil dosya göreli yolunu almak için kod:

    $thispath = explode('\\', str_replace('/','\\', dirname(__FILE__)));
    $rootpath = explode('\\', str_replace('/','\\', dirname($_SERVER["SCRIPT_FILENAME"])));
    $relpath = array();
    $dotted = 0;
    for ($i = 0; $i < count($rootpath); $i++) {
        if ($i >= count($thispath)) {
            $dotted++;
        }
        elseif ($thispath[$i] != $rootpath[$i]) {
            $relpath[] = $thispath[$i]; 
            $dotted++;
        }
    }
    print str_repeat('../', $dotted) . implode('/', array_merge($relpath, array_slice($thispath, count($rootpath))));