1. Задавайте здесь вопросы о коде, которые не подходят в другие разделы, такие как:
    Дизайн > Верстка
    PHP > Как сделать на PHP
    Скрыть объявление

Apache как Denwer

Тема в разделе "Web Coding", создана пользователем lolshik, 7 мар 2008.

Статус темы:
Закрыта.
Модераторы: latteo
  1. lolshik

    lolshik

    Регистр.:
    21 фев 2008
    Сообщения:
    316
    Симпатии:
    127
    Народ, нужна помощь.
    Пользовался раньше Денвером, так вот когда создаёшь в www какую то папку (test1.ru), то автоматом можно в адресной строке её набирать и юудет ходить (http://localhost/test1.ru).

    Как тоже самое сделать на Apach`е. Чтобы на автомате, сделал новую директорию - он вешает новую строчку в hosts (я так понимаю работает Денвер)
     
  2. Dogmat

    Dogmat Постоялец

    Регистр.:
    16 фев 2007
    Сообщения:
    122
    Симпатии:
    38
    это не есть прописывание hosts

    это элементарно ватсон - это значит папочку test1.ru ты создал в http_dir сервера.
    т.е. для при апаче можешь по умолчанию создавать такие папочки примерно там ... C:/Program Files/Apache .../Apache 2/htdocs/ - вот примерно тут. И они также будут доступны по тому же принципу и файл hosts тут не причем
     
  3. lolshik

    lolshik

    Регистр.:
    21 фев 2008
    Сообщения:
    316
    Симпатии:
    127
    Возможно не так построил предложение.
    Нужно чтобы открывался по http://test1.ru
    http://test2.ru

    и т.д.
    Как в Денвере.
     
  4. bueno

    bueno Читатель

    Заблокирован
    Регистр.:
    7 май 2007
    Сообщения:
    236
    Симпатии:
    69
    в денвере есть отдельный скрипт, сканирующий папку home на передмет подпапок - из их имен (а так же их подпапок), по шаблону, создает хосты в конфигах апача и добавляет их в виндовый host файл..
     
  5. lolshik

    lolshik

    Регистр.:
    21 фев 2008
    Сообщения:
    316
    Симпатии:
    127
    А в Apche так кто-нибудь делал? Может есть готовое решение?
     
  6. ZCFD

    ZCFD

    Регистр.:
    16 янв 2008
    Сообщения:
    989
    Симпатии:
    437
    файл /etc/scripts/hosts.pl прописывает hosts в винде
    Код:
    #!perl -w
    # +-------------------------------------------------------------------------+
    # | ─цхэЄы№ьхэёъшщ эрсюЁ Web-ЁрчЁрсюЄўшър                                   |
    # | ┬хЁёш*: ─хэтхЁ-2 2006-04-25                                             |
    # +-------------------------------------------------------------------------+
    # | Copyright (C) 2001-2004 ─ьшЄЁшщ ╩юЄхЁют.                                |
    # +-------------------------------------------------------------------------+
    # | ─рээ√щ Їрщы *ты*хЄё* ўрёЄ№■ ъюьяыхъёр яЁюуЁрьь "─хэтхЁ-2". ┬√ эх ьюцхЄх |
    # | шёяюы№чютрЄ№  хую т ъюььхЁўхёъшї  Ўхы*ї.  ═шъръшх фЁєушх юуЁрэшўхэш* эх |
    # | эръырф√тр■Єё*.  ┼ёыш т√ їюЄшЄх тэхёЄш шчьхэхэш* т шёїюфэ√щ ъюф,  ртЄюЁ√ |
    # | сєфєЄ Ёрф√ яюыєўшЄ№ юЄ трё ъюььхэЄрЁшш ш чрьхўрэш*. ╧Ёш*Єэющ ЁрсюЄ√!    |
    # +-------------------------------------------------------------------------+
    # | ─юьр°э** ёЄЁрэшЎр: http://denwer.ru                                     |
    # | ╩юэЄръЄ√: http://forum.dklab.ru/denwer                                  |
    # +-------------------------------------------------------------------------+
    package Starters::Hosts;
    BEGIN { unshift @INC, "../_lib"; }
    
    use Tools;
    use Installer;
    use ParseHosts;
    use VhostTemplate;
    use StartManager;
    use Starters_Conf;
    
    # Path to hosts file.
    my $hostsPath=getHostsPath();
    
    # Read hosts.
    my $h=readBinFile($hostsPath);
    
    # First delete hosts which was added before.
    # We need it in case of doubled script running.
    my %log=readHostsLog();
    
    
    StartManager::action 
    	$ARGV[0],
    	PATH => [
    	],
    	start => sub {
    		###
    		### START.
    		###
    		print "Обновляем $hostsPath...\n";
    		chmod(0666, $hostsPath);
    
    		# Check if we running under Administrator.
    		if(!open(local *F, ">>$hostsPath")) {
    			print "\n";
    			message qq{
    				Внимание! Для работы системы виртуальных хостов вы должны 
    				находиться в режиме Администратора. Сейчас у вас нет необходимых
    				привилегий, поэтому работать будет только localhost.
    			
    				Эта ошибка также может возникнуть в случае, если файл
    				$hostsPath имеет атрибут "только чтение".
    				Вы должны снять этот атрибут для продолжения работы.
    			};
    			waitEnter();
    			return;
    		}
    
    		if(scalar(keys %log)) {
    			print "  Откат предыдущих изменений... ";
    			my %del=deleteHosts($h,%log);
    			writeHostsLog(); # чистим журнал
    			print "отменено хостов: ".scalar(keys %del)."\n";
    		}
    
    		# Add hosts from /home.
    		my %dom = VhostTemplate::getAllVHosts_forHosts($Starters_Conf::HTTPD_CONF);
    		my %added = insertHosts($h,%dom);
    #		warn join(", ", keys %added);
    
    		# Add really added hosts to log.
    		writeHostsLog(%added);
    
    		# Save hosts.
    		writeBinFile($hostsPath,$h);
    
    		print "  Добавлено хостов: ".scalar(keys %added)."\n";
    	},
    	stop => sub {
    		###
    		### STOP.
    		###
    		print "Восстанавливаем $hostsPath...\n";
    
    		my %del=deleteHosts($h,%log);
    		writeHostsLog(); # clear log
    
    		# Save hosts.
    		if(eval { writeBinFile($hostsPath,$h); 1 }) {
    			print "  Готово. Отключено хостов: ".scalar(keys %del)."\n";
    		} else {
    			print "  Недостаточно привилегий, пропущено.\n";
    		}
    
    	},
    ;
    
    return 1 if caller;
    и файл apache.pl прописывает домены в конфиге апача
    Код:
    #!perl -w
    # +-------------------------------------------------------------------------+
    # | Джентльменский набор Web-разработчика                                   |
    # | Версия: Денвер-2 2006-04-25                                             |
    # +-------------------------------------------------------------------------+
    # | Copyright (C) 2001-2004 Дмитрий Котеров.                                |
    # +-------------------------------------------------------------------------+
    # | Данный файл является частью комплекса программ "Денвер-2". Вы не можете |
    # | использовать  его в коммерческих  целях.  Никакие другие ограничения не |
    # | накладываются.  Если вы хотите внести изменения в исходный код,  авторы |
    # | будут рады получить от вас комментарии и замечания. Приятной работы!    |
    # +-------------------------------------------------------------------------+
    # | Домашняя страница: http://denwer.ru                                     |
    # | Контакты: http://forum.dklab.ru/denwer                                  |
    # +-------------------------------------------------------------------------+
    
    package Starters::Apache;
    BEGIN { unshift @INC, "../_lib"; }
    
    use Tools;
    use Installer;
    use ParseHosts;
    use VhostTemplate;
    use StartManager;
    
    # Seconds to wait apache stop while restart is active.
    my $timeout = 10;
    
    # Get common pathes.
    my $basedir     = $CNF{apache_dir};
    my $exe         = fsgrep { /\Q$CNF{apache_exe}\E/i } $basedir;
    die "  Could not find $CNF{apache_exe} inside $basedir\n" if !$exe;
    my $httpd_conf  = "$basedir/conf/httpd.conf";
    my $vhosts_conf = "$basedir/conf/vhosts.conf";
    my $httpd_pid   = "$basedir/logs/httpd.pid";
    
    
    # Additional PATH entries.
    my @addPath = ();
    
    # Autoconfigure PHP - detect basedir from LoadModule in httpd.conf file.
    my $phpdir = undef;
    my $httpdCont = readBinFile($httpd_conf) or die "  Could not read $httpd_conf\n";
    if ($httpdCont =~ /^[ \t]* LoadModule [ \t]+ php\S*_module [ \t]+ (?: "([^"\r\n]*)" | (\S+) )/mix) {
      my $path = dirname($1 || $2);
      if (my $p1 = dirgrep { /^php.ts\.dll$/i } $path) {
        $phpdir = dirname($p1);
      } elsif (my $p2 = dirgrep { /^php.ts\.dll$/i } "$path/..") {
        $phpdir = dirname($p2);
      }
    }
    if ($phpdir) {
      # PHP configuration file location.
      $ENV{PHPRC} = $phpdir;
      # For OpenSSL module in PHP.
      if (my $p = fsgrep { /^openssl.cnf$/i } $phpdir) {
        $ENV{OPENSSL_CONF} = $p;
      }
      # Set PATH.
      push @addPath, ($phpdir, fsgrep { /^extensions$/i || /^dlls$/i } $phpdir);
    }
    
    
    StartManager::action 
      $ARGV[0],
      PATH => [
      	'\usr\local\ImageMagick',
      	@addPath,
      ],
      start => sub {
        ###
        ### START.
        ###
        processVHosts();
        print "‡*ЇгбЄ*Ґ¬ Apache...\n";
        if(checkApacheIfRunning()) {
          print "  Apache 㦥 §*ЇгйҐ*.\n";
        } else {
          chdir($basedir);
          my $exe = $exe;
          if(!-f $exe) {
            die "  ЌҐ г¤*Ґвбп **©вЁ $exe.\n";
          } else {
            # Clean global error.log to avoid stupid PHP "C:\mysql" binding.
            unlink("$basedir/logs/error.log");
            # Start apache.
            system("start $exe -w");
            print "  ѓ®в®ў®.\n";
          }
        }
      },
      stop => sub {
        ###
        ### STOP.
        ###
        print "‡*ўҐаи*Ґ¬ а*Ў®вг Apache...\n";
        my $exe = $exe;
        if(!-f $exe) {
          print "  ЌҐ г¤*Ґвбп **©вЁ $exe.\n";
        } else {
          my $was = checkApacheIfRunning();
          # ’гЇ®© Apache2 *Ґ 㬥Ґв §*ўҐаи*вмбп Ї® -k shutdown!
          # Џ®н⮬㠯аЁе®¤Ёвбп ЇаЁЎЁў*вм ўагз*го. ѓап§*®, Є®*Ґз*®.
          # Љбв*вЁ, Parent ID г Їа®жҐбб* *Ґ«м§п Ї®«гзЁвм ў Windows NT Workststion.
          my $ps = getPs(1);
          if ($ps) {
            foreach (@$ps) {
              next if $_->{exe} !~ /apache\.exe$/is;
              kill 9, $_->{pid};
            }
          } else {
            print "  ЌҐ г¤*Ґвбп **©вЁ гвЁ«Ёвг ps.exe.\n";
          }
    #      system("\"$exe\" -k shutdown");
          if($was) {
            unlink($httpd_pid);     
            print "  ѓ®в®ў®.\n";
          } else {
            print "  Apache *Ґ §*ЇгйҐ*.\n";
          }
        }
      },
      _middle => sub {
        my $tm = time();
        if(checkApacheIfRunning()) {
          print "Ћ¦Ё¤*Ґ¬ §*ўҐаиҐ*Ёп Apache (¬*ЄбЁ¬г¬ $timeout ᥪг*¤) ";
          while(time() - $tm < $timeout) {
            print ". ";
            if(!checkApacheIfRunning()) {
              print "\n";
              return;
            }
            sleep(1);
          }
          print "\n";
          print "  ЌҐ г¤*Ґвбп ¤®¦¤*вмбп §*ўҐаиҐ*Ёп!\n";
        }
      },
    ;
    
    
    sub processVHosts {
      my $VHOSTS = $vhosts_conf;
      my $HTTPD = $httpd_conf;
    
      print "‘®§¤*Ґ¬ Ў«®ЄЁ ўЁавг*«м*ле е®бв®ў...\n";
    
      if(!-e $HTTPD) {
        die "  ЌҐ г¤*Ґвбп **©вЁ $HTTPD\n";
      }
    
      # Add comments.
      my $vhosts = '';
      $vhosts .= clean qq{
        #
        # ВНИМАНИЕ!
        #
        # Данный файл был сгенерирован автоматически. Любые изменения, внесенные в 
        # него, потеряются после перезапуска комплекса. Если вы хотите изменить
        # параметры какого-то отдельного хоста, вам необходимо перенести 
        # соответствующий блок <VirtualHost> в httpd.conf (там написано, куда именно).
        #
        # Пожалуйста, не изменяйте этот файл.
        #
      };
    
      # Read Vhost template
      my $num = 1;
      foreach my $host (VhostTemplate::getAllVHosts($HTTPD)) {
    #    use Data::Dumper; print Dumper($host);
        $vhosts .= "\n\n# Host ".$host->{path}." ($num): \n";
    
        my $s = $host->{vhost};
        # Delete comments.
        $s=~s/#.*//mg if $num!=1;
        $s=~s/^[ \t]*[\r\n]+//mgx;    # delete empty lines
    
        # ‚бв*ў«пҐ¬ ЎгЄўг ¤ЁбЄ* - Їа®Є«пвлҐ а*§а*Ў®взЁЄЁ PHP ЎҐ§ нв®Ј® *Ґ ¬®Јгв *ЁЄ*Є!
        $s=~s{^(\s* DocumentRoot \s+ "?)(/)}{$1$CNF{subst_drive}$2}mgxi;
    
        $vhosts .= $s;
      } continue {
        $num++;
      }
    
      # Remove duplicate Listen directives.
      my %dup = ();
      $vhosts =~ s{^\s* Listen \s+ "? ([^\s"]+) "?}{ ($dup{lc $1}++)? '#'.$& : $& }megx;
    
      # Remove duplicate NameVirtualHost.
      %dup = ();
      $vhosts =~ s{^\s* NameVirtualHost \s+ "? ([^\s"]+) "?}{ ($dup{lc $1}++)? '#'.$& : $& }megx;
      
      # Open output file.
      if(!open(local *F, ">$VHOSTS")) {
        out qq{
          ‚Ќ€ЊЂЌ€…!
          ЌҐ г¤*Ґвбп ®вЄалвм д*©« $VHOSTS ** §*ЇЁбм. 
          Џа®¤®«¦Ґ*ЁҐ а*Ў®вл *Ґў®§¬®¦*®.
        };
        waitEnter();
        die "\n";
      }
    	print F $vhosts;
    	close F;
      
      print "  „®Ў*ў«Ґ*® е®бв®ў: ".($num-1)."\n";
    }
    
    sub checkApacheIfRunning {
    	my ($exe) = $CNF{apache_exe} =~ /^(\S+)/sg;
    	my $name = $basedir . '\\' . $exe;
      return !open(local *F, ">>$name");
    }
    
    return 1 if caller;
    
     
  7. Genie

    Genie Прохожие

    Привет!
    для того, чтобы "Нужно чтобы открывался по http://test1.ru
    http://test2.ru"

    Впиши в файл httpd.conf такое:

    Код:
    Listen 127.0.0.1:80
    <VirtualHost *:*>
      DocumentRoot "C:/путь_к_папке_test1_ru_для_htdocs"
      ServerName "[URL="HTTP://www.nulled.WS/redirector.php?url=http%3A%2F%2Fwww.test1.ru%2F"]test1.ru[/URL]"
      ServerAlias "[URL="HTTP://www.nulled.WS/redirector.php?url=http%3A%2F%2Fwww.test1.ru"]www.[URL="HTTP://www.nulled.WS/redirector.php?url=http%3A%2F%2Fwww.test1.ru%2F"]test1.ru[/URL][/URL]"
      ScriptAlias /cgi/ "C:/путь_к_папке_test1_ru_для_cgi/cgi-bin/"
      ScriptAlias /cgi-bin/ "C:/путь_к_папке_test1_ru_для_cgi/cgi-bin/"
      ErrorLog "C:/путь_к_папке_test1_ru/error.log"
    </VirtualHost>
    
    То есть там тебе нужно указать "к чему прислушываться" апачу. Он "ловит" запросы с IP 127.0.0.1 на 80 порту. Так по умолчанию, лучше ничего не менять. Закачивай свои PHP скрипты и прочее в папку "C:/путь_к_папке_test1_ru_для_htdocs/"

    Дале тебе нужно в файл C:\WINDOWS\system32\drivers\etc\hosts
    дописать строки:

    Код:
    127.0.0.1 <A href="http://www.test1.ru/">www.[URL="HTTP://www.nulled.WS/redirector.php?url=http%3A%2F%2Fwww.test1.ru%2F"]test1.ru[/URL]
    127.0.0.1 [URL="HTTP://www.nulled.WS/redirector.php?url=http%3A%2F%2Fwww.test1.ru%2F"]test1.ru[/URL]
    
    Перезапусти апач. Открывай в бровзере test1.ru. Будет работать. Можешь в hosts вписать другой IP. Тогда его нужно вписать такой же в файл httpd.conf

    Аналогично для test2.ru.

    PS. в hosts писать без а хреф=...
    функции форума что-то глюканули
     
  8. T-Rex

    T-Rex Постоялец

    Регистр.:
    29 янв 2008
    Сообщения:
    67
    Симпатии:
    7
    в денвере за автосоздание хостов отвечает скрипт на перл.
    напишите себе подобное и будет вам счастье
     
Статус темы:
Закрыта.