Armenian Knowledge Base  

Go Back   Armenian Knowledge Base > Technical sections > Webmaster Zone > Web Development
Register

Reply
 
LinkBack Thread Tools
Old 28.12.2006, 13:37   #1
The splendid
 
AvDav's Avatar
 
Join Date: 07 2004
Location: Pure thoughts
Age: 36
Posts: 3,408
Downloads: 22
Uploads: 0
Reputation: 222 | 3
Default How to get www root directory using PHP code?

Я не имею особого опыта в пхп, но мне надо дописать мой скрипт чтоб он брал document root (e.g.: htdocs) автоматически. Стандартный способ это $_SERVER['DOCUMENT_ROOT']/$DOCUMENT_ROOT/getenv('DOCUMENT_ROOT'); только почему то это не всегда работает, скажем на моем линуксе с пхп 4.3.4 он выдает просто пустую строку, также я проверил на isset($_SERVER[...]) --> сетнут, тока пусто. В добавок покопался в инете - говорят что такой способ получения полного пути ввв фолдера не надежен и не всегда срабатывает, но и не говорят какой именно надежен.
Другой чуть геморный вариант - поискать в системе все хттпд.конф файлы и парсать чтоб узнать где рут фолдер, это может не всегда сработать так как могут быть нескока конфиг файлов, который брать? Да и не очень мне это нравится, должен же быть короткий и железный вариант? Кто нить в курсе?
П.С. Знаю что многие инстал-пхп скрипты требуют ручной установки тех или иных директорий, к сожалению тут я так делать не могу, тот кто будет пользовать скрипт может не обладать этими навыками, так что мне надо получить путь этого фолдера программно.
Заранее спасибо.
Reply With Quote
Old 28.12.2006, 14:20   #2
Академик
 
W_z_rd's Avatar
 
Join Date: 08 2002
Location: Yerevan, Armenia
Age: 45
Posts: 4,854
Downloads: 1
Uploads: 0
Reputation: 225 | 3
Default

if(!isset($_SERVER["DOCUMENT_ROOT"]))
{
$_SERVER["DOCUMENT_ROOT"] = substr($_SERVER['SCRIPT_FILENAME'] , 0 , -strlen($_SERVER['PHP_SELF']) );
}
Reply With Quote
Old 28.12.2006, 14:28   #3
The splendid
 
AvDav's Avatar
 
Join Date: 07 2004
Location: Pure thoughts
Age: 36
Posts: 3,408
Downloads: 22
Uploads: 0
Reputation: 222 | 3
Default

этот скрипт тоже дает пустую строку, к тому же не понял логику...
в общем случае скрипт может срабатывать где угодно - не обязательно в самом ввв руте.
Reply With Quote
Old 28.12.2006, 15:30   #4
Академик
 
W_z_rd's Avatar
 
Join Date: 08 2002
Location: Yerevan, Armenia
Age: 45
Posts: 4,854
Downloads: 1
Uploads: 0
Reputation: 225 | 3
Default

Script rabotaet v lyuboy direktorii, ne tolko v root. Vidimo, u tebya neverno nastroen PHP.
Reply With Quote
Old 28.12.2006, 15:38   #5
The splendid
 
AvDav's Avatar
 
Join Date: 07 2004
Location: Pure thoughts
Age: 36
Posts: 3,408
Downloads: 22
Uploads: 0
Reputation: 222 | 3
Default

php verno nastroen, po kraineir mere php stranichki normalno zagrujayutsya cherez browser...a v chem mojet bit problema?
Reply With Quote
Old 28.12.2006, 16:24   #6
Академик
 
W_z_rd's Avatar
 
Join Date: 08 2002
Location: Yerevan, Armenia
Age: 45
Posts: 4,854
Downloads: 1
Uploads: 0
Reputation: 225 | 3
Default

Mne trudno skazat`, u menya ogranichenniy opit s PHP. U nas byla poxozhaya problema na IIS i etot script pomog ee reschit`.
Vo vsyakom sluchae poprobuy zakinut` syuda vidachu phpinfo, mozhet che-nibud` i prisovetuem.
Reply With Quote
Old 28.12.2006, 17:39   #7
The splendid
 
AvDav's Avatar
 
Join Date: 07 2004
Location: Pure thoughts
Age: 36
Posts: 3,408
Downloads: 22
Uploads: 0
Reputation: 222 | 3
Default

вобщем пришлось писать самому, вариант для юниксов такой:
PHP Code:
function getDocRoots() {
    
$ret = array();
    
exec("slocate -r \\httpd.conf\$"$confFiles);
    
$fileCount count($confFiles);
    for(
$i 0$i $fileCount$i++) {
        
exec("cat ".$confFiles[$i]." | grep DocumentRoot"$foundMatches);
        
$matchCount count($foundMatches);
        for(
$j 0$j $matchCount$j++) {
            
//if not a comment, obtain wwwroot
            
if(strlen(strchr($foundMatches[$j], '#')) < 2) {
                
$path "";
                
$inside_quotes false;
                for(
$k strlen("DocumentRoot "), $len strlen($foundMatches[$j]); $k $len$k++) {
                    if(
$foundMatches[$j][$k] == "\""$inside_quotes = !$inside_quotes;
                    else 
$path .= $foundMatches[$j][$k];
                }
                
array_push($rettrim($path" \t"));
            }
        }
    }
    return 
$ret;
}
print_r(getDocRoots()); 
должно работать, тока есть сомнения что не баг-фри
Reply With Quote
Old 28.12.2006, 17:49   #8
Грустно...
 
Agregat's Avatar
 
Join Date: 08 2002
Location: Там, где всегда идут дожди
Age: 35
Posts: 21,717
Downloads: 2
Uploads: 0
Reputation: 250 | 7
Default

часто-ли вы будете вызывать эту функцию, Давид?
Reply With Quote
Old 28.12.2006, 17:52   #9
The splendid
 
AvDav's Avatar
 
Join Date: 07 2004
Location: Pure thoughts
Age: 36
Posts: 3,408
Downloads: 22
Uploads: 0
Reputation: 222 | 3
Default

адзин раз
Reply With Quote
Old 28.10.2008, 15:46   #10
Младенец
 
Join Date: 10 2008
Location: Saint-Petersburg, Russia
Posts: 2
Downloads: 0
Uploads: 0
Reputation: 0 | 0
Default

Quote:
Originally Posted by W_z_rd View Post
if(!isset($_SERVER["DOCUMENT_ROOT"]))
{
$_SERVER["DOCUMENT_ROOT"] = substr($_SERVER['SCRIPT_FILENAME'] , 0 , -strlen($_SERVER['PHP_SELF']) );
}
Ну и зачем ты так невнимательно читаешь?

Quote:
Originally Posted by AvDav View Post
...также я проверил на isset($_SERVER[...]) --> сетнут, тока пусто...

W_z_rd, попробуй так:
PHP Code:
if( strlen($_SERVER["DOCUMENT_ROOT"]) === )
{
    
$_SERVER["DOCUMENT_ROOT"] = substr($_SERVER['SCRIPT_FILENAME'] , , -strlen($_SERVER['PHP_SELF']) );

Reply With Quote
Old 28.10.2008, 15:48   #11
Младенец
 
Join Date: 10 2008
Location: Saint-Petersburg, Russia
Posts: 2
Downloads: 0
Uploads: 0
Reputation: 0 | 0
Talking

oops...this branch is 2 years old...yeah, whatever =)
Reply With Quote
Old 24.11.2008, 13:24   #12
Младенец
 
Join Date: 11 2008
Location: sandypeter111
Posts: 3
Downloads: 0
Uploads: 0
Reputation: 0 | 0
Thumbs up RE :

which language u r ask this ques...
Reply With Quote
Old 24.11.2008, 16:51   #13
The splendid
 
AvDav's Avatar
 
Join Date: 07 2004
Location: Pure thoughts
Age: 36
Posts: 3,408
Downloads: 22
Uploads: 0
Reputation: 222 | 3
Default

the great and mighty Russian
Reply With Quote
Sponsored Links
Reply

Thread Tools


На правах рекламы:
реклама

All times are GMT. The time now is 09:09.


Powered by vBulletin® Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.