Эта тема на forum.dklab.ru


Дмитрий Бойков: Навигация по Денверовским проектам
Пользуюсь Денвером уже 2 года. Нравится. Хотелось бы поинтересоваться, возможно ли получить страницу со списком доменов и субдоменов примерно следующего вида:


[*:c3abd4928c]localhost

[*:c3abd4928c]subdomain.localhost

[*:c3abd4928c]test1.ru

[*:c3abd4928c]subdomain.test1.ru

[*:c3abd4928c]test2.ru
[*:c3abd4928c]krisha.ru

[*:c3abd4928c]vasha.krisha.ru
[*:c3abd4928c]nasha.krisha.ru
[*:c3abd4928c]edet.krisha.ru
[*:c3abd4928c]protekla.krisha.ru


Понятно, что руками состряпать такую страницу не составит труда, но хотелось бы, что бы такая навигационная страничка генерилась на основе доменов и субдоменов созданных в Денвере. Было бы очень удобно. :) Можно ли это сделать с помощью скриптов?

И еще маленький вопрос не в тему.
Если в каталоге нет файла index.***, то окрывается список папок и файлов с колонками Name, Last modified, Size и Description. Полагаю, что для того чтобы у папки появился этот самый Description в ней должно что-то лежать (как файл readme.txt, например). Что это должно быть?
Спасибо.
Ant:
Можно такое дело сделать — оно, собственно, уже готово — Денвер в hosts автоматически заносит все домены и поддомены, присутствующие в папке home. Осталось только приспособить это дело для вывода в браузер.

Можно вопрос — а зачем это надо?
Дмитрий Котеров:
Можно ли это сделать с помощью скриптов?
Надо парсить файл /usr/local/apache/conf/vhosts.conf, который создается при запуске Денвера. Никаких особых сложностей быть тут не должно, что у Вас не получается?

Полагаю, что для того чтобы у папки появился этот самый Description в ней должно что-то лежать (как файл readme.txt, например). Что это должно быть?
Точно не знаю. Попробуйте поискать ответ в документации Apache - модуль называется autoindex, кажется.
Дмитрий Бойков:
Никаких особых сложностей быть тут не должно, что у Вас не получается?Все получилось, спасибо. Просто я почему-то решил, что из ... /home/site.ru будет не дотянуться до более высокого уровня. К тому же не знал что парсить...

Что у меня в итоге получилось:
В каталоге /home/localhost/www/Tools/ можно создать новый каталог (у меня это sitelist) и поместить туда файл index.php следующего содержания:
<?$TITLE="Список зарегистрированных сайтов"; include "{$_SERVER['DOCUMENT_ROOT']}/_header.php"?>
<table width=70% cellpadding=5 cellspacing=2>
<tr valign=top>
<td>
<?
$file = file(substr($_SERVER['DOCUMENT_ROOT'],0,2).'/usr/local/apache/conf/vhosts.conf');
for($i=0; $i < count($file); $i++){
if(ereg('^.*ServerName.*"(.*)".*$', $file[$i], $mas)){
if(!(false === strpos($mas[1], "www."))){
$domains[] = str_replace("www.","",$mas[1]);
} else {
$subdomains[] = $mas[1];
}
}
}
sort($domains);
sort($subdomains);
for($i=0; $i < count($domains); $i++){
print "<a href=http://{$domains[$i]}><b>{$domains[$i]}</b></a></br>";
for($j=0; $j < count($subdomains); $j++){
if(!(false === strpos($subdomains[$j], $domains[$i]))){
print "<dd><a href=http://{$subdomains[$j]}>{$subdomains[$j]}</a></br>";
}
}
}
?>
</td>
</tr>
</table>
<?include "{$_SERVER['DOCUMENT_ROOT']}/_footer.php"?> тогда в списке утилит http://localhost появится новый пункт. Код далек от совершенства, т.к я пока делетант в этом деле, но работает! :)

Можно вопрос — а зачем это надо?Когда накапливается достаточное количество сайтов можно запутаться в названиях... В общем я собираюсь использовать это так: Сделать ярлык (в Виндах, на рабочем столе) на страницу со списком сайтов а от туда по линкам уже добираться до самих сайтов. (Ну, лень мне адрес рукой бить. 8) )
Константин Жинько [tIT]:
Дмитрий Бойков
+1 =)
Полезная мулька... ИМХО, стоит включить в базовый пакет, только может код отредактировать %
Дмитрий Котеров:
Ну, тогда уж вот так:

<?$TITLE="Список зарегистрированных сайтов"; include "{$_SERVER['DOCUMENT_ROOT']}/_header.php"?>
<?
// Original idea by: Dmitry Boykov (http://forum.dklab.ru/users/DmitryBoykov/)
$file = file('/usr/local/apache/conf/vhosts.conf');
foreach ($file as $line) {
if (preg_match('/^[^#]* ServerName \s+ "?([^"]*)"?/six', $line, $p)){
$dom = preg_replace('/^www\./si', '', $p[1]);
$domains[$dom] = join(".", array_reverse(preg_split('/\./', $dom)));
}
}
asort($domains);

$prev = false;
foreach ($domains as $dom=>$parts) {
if (!$prev || !preg_match('/'.preg_quote($prev, '/').'$/si', $dom)) {
echo "<a href=\"http://{$dom}\"><b>{$dom}</b></a></br>";
$prev = $dom;
} else {
print "<dd><a href=\"http://{$dom}\">{$dom}</a></br></dd>";
}
}
?>
<?include "{$_SERVER['DOCUMENT_ROOT']}/_footer.php"?>

В новой версии будет.

Кстати, по-хорошему надо бы добавить и парсинг httpd.conf, т.к. там тоже могут домены быть. Ну и парсинг портов для тех сайтов, которые висят на других портах (если они есть).
Дмитрий Котеров:
Перенесено из форума: Базовый пакет :: Денвер.
Перенесено в форум: Полезные советы :: Денвер.

Эта тема на forum.dklab.ru