 |
How to get www root directory using PHP code? |
 |
28.12.2006, 13:37
|
#1
|
Ego coder
Join Date: 07 2004
Location: Yerevan, Armenia
Age: 44
Posts: 3,738
Rep Power: 5
|
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[...]) --> сетнут, тока пусто. В добавок покопался в инете - говорят что такой способ получения полного пути ввв фолдера не надежен и не всегда срабатывает, но и не говорят какой именно надежен.
Другой чуть геморный вариант - поискать в системе все хттпд.конф файлы и парсать чтоб узнать где рут фолдер, это может не всегда сработать так как могут быть нескока конфиг файлов, который брать? Да и не очень мне это нравится, должен же быть короткий и железный вариант? Кто нить в курсе?
П.С. Знаю что многие инстал-пхп скрипты требуют ручной установки тех или иных директорий, к сожалению тут я так делать не могу, тот кто будет пользовать скрипт может не обладать этими навыками, так что мне надо получить путь этого фолдера программно.
Заранее спасибо.
__________________
Каждый сам кузнец своего счастья, и несчастья тоже.
|
|
|
 |
28.12.2006, 14:20
|
#2
|
Академик
Join Date: 08 2002
Location: Yerevan, Armenia
Age: 53
Posts: 4,854
Rep Power: 5
|
if(!isset($_SERVER["DOCUMENT_ROOT"]))
{
$_SERVER["DOCUMENT_ROOT"] = substr($_SERVER['SCRIPT_FILENAME'] , 0 , -strlen($_SERVER['PHP_SELF']) );
}
__________________
Женщин не надо понимать, их надо любить!
|
|
|
28.12.2006, 14:28
|
#3
|
Ego coder
Join Date: 07 2004
Location: Yerevan, Armenia
Age: 44
Posts: 3,738
Rep Power: 5
|
этот скрипт тоже дает пустую строку, к тому же не понял логику...
в общем случае скрипт может срабатывать где угодно - не обязательно в самом ввв руте.
__________________
Каждый сам кузнец своего счастья, и несчастья тоже.
|
|
|
28.12.2006, 15:30
|
#4
|
Академик
Join Date: 08 2002
Location: Yerevan, Armenia
Age: 53
Posts: 4,854
Rep Power: 5
|
Script rabotaet v lyuboy direktorii, ne tolko v root. Vidimo, u tebya neverno nastroen PHP.
__________________
Женщин не надо понимать, их надо любить!
|
|
|
28.12.2006, 15:38
|
#5
|
Ego coder
Join Date: 07 2004
Location: Yerevan, Armenia
Age: 44
Posts: 3,738
Rep Power: 5
|
php verno nastroen, po kraineir mere php stranichki normalno zagrujayutsya cherez browser...a v chem mojet bit problema?
__________________
Каждый сам кузнец своего счастья, и несчастья тоже.
|
|
|
28.12.2006, 16:24
|
#6
|
Академик
Join Date: 08 2002
Location: Yerevan, Armenia
Age: 53
Posts: 4,854
Rep Power: 5
|
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.
__________________
Женщин не надо понимать, их надо любить!
|
|
|
28.12.2006, 17:39
|
#7
|
Ego coder
Join Date: 07 2004
Location: Yerevan, Armenia
Age: 44
Posts: 3,738
Rep Power: 5
|
вобщем пришлось писать самому, вариант для юниксов такой:
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($ret, trim($path, " \t"));
}
}
}
return $ret;
}
print_r(getDocRoots());
должно работать, тока есть сомнения что не баг-фри
__________________
Каждый сам кузнец своего счастья, и несчастья тоже.
|
|
|
28.12.2006, 17:49
|
#8
|
Грустно...
Join Date: 08 2002
Location: Там, где всегда идут дожди
Age: 43
Posts: 21,717
Rep Power: 9
|
часто-ли вы будете вызывать эту функцию, Давид?
|
|
|
28.12.2006, 17:52
|
#9
|
Ego coder
Join Date: 07 2004
Location: Yerevan, Armenia
Age: 44
Posts: 3,738
Rep Power: 5
|
адзин раз
__________________
Каждый сам кузнец своего счастья, и несчастья тоже.
|
|
|
28.10.2008, 15:46
|
#10
|
Младенец
Join Date: 10 2008
Location: Saint-Petersburg, Russia
Posts: 2
Rep Power: 0
|
Quote:
Originally Posted by W_z_rd
if(!isset($_SERVER["DOCUMENT_ROOT"]))
{
$_SERVER["DOCUMENT_ROOT"] = substr($_SERVER['SCRIPT_FILENAME'] , 0 , -strlen($_SERVER['PHP_SELF']) );
}
|
Ну и зачем ты так невнимательно читаешь?
Quote:
Originally Posted by AvDav
...также я проверил на isset($_SERVER[...]) --> сетнут, тока пусто...
|
W_z_rd, попробуй так:
PHP Code:
if( strlen($_SERVER["DOCUMENT_ROOT"]) === 0 ) { $_SERVER["DOCUMENT_ROOT"] = substr($_SERVER['SCRIPT_FILENAME'] , 0 , -strlen($_SERVER['PHP_SELF']) ); }
|
|
|
28.10.2008, 15:48
|
#11
|
Младенец
Join Date: 10 2008
Location: Saint-Petersburg, Russia
Posts: 2
Rep Power: 0
|
oops...this branch is 2 years old...yeah, whatever =)
|
|
|
 |
RE : |
 |
24.11.2008, 13:24
|
#12
|
Младенец
Join Date: 11 2008
Location: sandypeter111
Posts: 3
Rep Power: 0
|
RE :
which language u r ask this ques...
|
|
|
24.11.2008, 16:51
|
#13
|
Ego coder
Join Date: 07 2004
Location: Yerevan, Armenia
Age: 44
Posts: 3,738
Rep Power: 5
|
the great and mighty Russian
__________________
Каждый сам кузнец своего счастья, и несчастья тоже.
|
|
|
20.05.2020, 22:02
|
#14
|
Ego coder
Join Date: 07 2004
Location: Yerevan, Armenia
Age: 44
Posts: 3,738
Rep Power: 5
|
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($ret, trim($path, " \t")); } } } return $ret; } print_r(getDocRoots());
Скорректировал код.
__________________
Каждый сам кузнец своего счастья, и несчастья тоже.
|
|
|
All times are GMT. The time now is 04:30. |
|
|