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

Reply
 
Thread Tools

How to get www root directory using PHP code?
Old 28.12.2006, 13:37   #1
Ego coder
 
AvDav's Avatar
 
Join Date: 07 2004
Location: Yerevan, Armenia
Age: 44
Posts: 3,738
Rep Power: 5
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[...]) --> сетнут, тока пусто. В добавок покопался в инете - говорят что такой способ получения полного пути ввв фолдера не надежен и не всегда срабатывает, но и не говорят какой именно надежен.
Другой чуть геморный вариант - поискать в системе все хттпд.конф файлы и парсать чтоб узнать где рут фолдер, это может не всегда сработать так как могут быть нескока конфиг файлов, который брать? Да и не очень мне это нравится, должен же быть короткий и железный вариант? Кто нить в курсе?
П.С. Знаю что многие инстал-пхп скрипты требуют ручной установки тех или иных директорий, к сожалению тут я так делать не могу, тот кто будет пользовать скрипт может не обладать этими навыками, так что мне надо получить путь этого фолдера программно.
Заранее спасибо.
__________________
Каждый сам кузнец своего счастья, и несчастья тоже.

Old 28.12.2006, 14:20   #2
Академик
 
W_z_rd's Avatar
 
Join Date: 08 2002
Location: Yerevan, Armenia
Age: 53
Posts: 4,854
Rep Power: 5
Default

if(!isset($_SERVER["DOCUMENT_ROOT"]))
{
$_SERVER["DOCUMENT_ROOT"] = substr($_SERVER['SCRIPT_FILENAME'] , 0 , -strlen($_SERVER['PHP_SELF']) );
}
__________________
Женщин не надо понимать, их надо любить!

Old 28.12.2006, 14:28   #3
Ego coder
 
AvDav's Avatar
 
Join Date: 07 2004
Location: Yerevan, Armenia
Age: 44
Posts: 3,738
Rep Power: 5
Default

этот скрипт тоже дает пустую строку, к тому же не понял логику...
в общем случае скрипт может срабатывать где угодно - не обязательно в самом ввв руте.
__________________
Каждый сам кузнец своего счастья, и несчастья тоже.

Old 28.12.2006, 15:30   #4
Академик
 
W_z_rd's Avatar
 
Join Date: 08 2002
Location: Yerevan, Armenia
Age: 53
Posts: 4,854
Rep Power: 5
Default

Script rabotaet v lyuboy direktorii, ne tolko v root. Vidimo, u tebya neverno nastroen PHP.
__________________
Женщин не надо понимать, их надо любить!

Old 28.12.2006, 15:38   #5
Ego coder
 
AvDav's Avatar
 
Join Date: 07 2004
Location: Yerevan, Armenia
Age: 44
Posts: 3,738
Rep Power: 5
Default

php verno nastroen, po kraineir mere php stranichki normalno zagrujayutsya cherez browser...a v chem mojet bit problema?
__________________
Каждый сам кузнец своего счастья, и несчастья тоже.

Old 28.12.2006, 16:24   #6
Академик
 
W_z_rd's Avatar
 
Join Date: 08 2002
Location: Yerevan, Armenia
Age: 53
Posts: 4,854
Rep Power: 5
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.
__________________
Женщин не надо понимать, их надо любить!

Old 28.12.2006, 17:39   #7
Ego coder
 
AvDav's Avatar
 
Join Date: 07 2004
Location: Yerevan, Armenia
Age: 44
Posts: 3,738
Rep Power: 5
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()); 
должно работать, тока есть сомнения что не баг-фри
__________________
Каждый сам кузнец своего счастья, и несчастья тоже.

Old 28.12.2006, 17:49   #8
Грустно...
 
Agregat's Avatar
 
Join Date: 08 2002
Location: Там, где всегда идут дожди
Age: 43
Posts: 21,717
Rep Power: 9
Default

часто-ли вы будете вызывать эту функцию, Давид?
__________________
http://аvitya.livejournal.com
Хотели, как лучше, а получилось даже хуже...
Лозунг шахматиста: На каждый шах - ответим матом!

Old 28.12.2006, 17:52   #9
Ego coder
 
AvDav's Avatar
 
Join Date: 07 2004
Location: Yerevan, Armenia
Age: 44
Posts: 3,738
Rep Power: 5
Default

адзин раз
__________________
Каждый сам кузнец своего счастья, и несчастья тоже.

Old 28.10.2008, 15:46   #10
Младенец
 
Join Date: 10 2008
Location: Saint-Petersburg, Russia
Posts: 2
Rep Power: 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']) );


Old 28.10.2008, 15:48   #11
Младенец
 
Join Date: 10 2008
Location: Saint-Petersburg, Russia
Posts: 2
Rep Power: 0
Talking

oops...this branch is 2 years old...yeah, whatever =)

RE :
Old 24.11.2008, 13:24   #12
Младенец
 
Join Date: 11 2008
Location: sandypeter111
Posts: 3
Rep Power: 0
Thumbs up RE :

which language u r ask this ques...

Old 24.11.2008, 16:51   #13
Ego coder
 
AvDav's Avatar
 
Join Date: 07 2004
Location: Yerevan, Armenia
Age: 44
Posts: 3,738
Rep Power: 5
Default

the great and mighty Russian
__________________
Каждый сам кузнец своего счастья, и несчастья тоже.

Old 20.05.2020, 22:02   #14
Ego coder
 
AvDav's Avatar
 
Join Date: 07 2004
Location: Yerevan, Armenia
Age: 44
Posts: 3,738
Rep Power: 5
Default

PHP Code:
function getDocRoots() {
    
$ret = array();
    
$dcstr "DocumentRoot";
    
$dcLen strlen(dcstr);
    
exec("slocate -r \\httpd.conf\$"$confFiles);
    
$fileCount count($confFiles);
    for(
$i 0$i $fileCount$i++) {
        
exec("cat ".$confFiles[$i]." | grep ".dcstr$foundMatches);
        
$matchCount count($foundMatches);
        for(
$j 0$j $matchCount$j++) {
            
//if not a comment, obtain wwwroot
            
if(strlen(strchr($foundMatches[$j], '#')) < 2) {
                
$path "";
                for(
$k dcLen+1$len strlen($foundMatches[$j]); $k $len$k++) {
                    if(
$foundMatches[$j][$k] != "\"")
                    
$path .= $foundMatches[$j][$k];
                }
                
array_push($rettrim($path" \t"));
            }
        }
    }
    return 
$ret;
}
print_r(getDocRoots()); 
Скорректировал код.
__________________
Каждый сам кузнец своего счастья, и несчастья тоже.
Reply




Реклама:
реклама
Buy text link .

All times are GMT. The time now is 04:30.
Top

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