Bruger selv denne, som kan optimeres, men som virker:
<?php
// Kun localhost kan oprette vhosts
if($_SERVER["REMOTE_ADDR"] == "127.0.0.1") {
// START SETTINGS /////////////////////////////////////////////////////////////////////////////////
// Sti til httpd.conf
$vhost_fil = "C:/Apache/conf/extra/httpd-vhosts.conf";
// Sti til filen hosts
$hosts_path = "C:/WINDOWS/system32/drivers/etc/hosts";
// Stien til apache exe-fil. For apache2 ( httpd.exe ) ligger den i bin, for version 1.3.* ligger den i Apache
// Skal bruges til restart af apache, ( hvis safe_mode IKKE er on ), efter oprettelse af en vhost
// Husk at escape \ samt navngivning af servicen, her "Apache 2.2"
$apache_exe = "C:\\Apache\\bin\\httpd.exe -w -n \"Apache2.2\" -k restart";
// Evt. sti til hvor alle hosts er placeret
// Bruges som "value" i tekstfeltet for "DocumentRoot" i form til oprettelse af ny vhost
// Samt til directory-blok i textarea. ( Se $default_dir_value )
$default_path = "F:/www/";
// For Apache 2.2.8 ( og tidligere 2'er ver. mener jeg ) SKAL man ha' en directoryblok
// som tillader visning af dir hvor vhost ligger
$default_dir_value = "<Directory \"".$default_path."\">
Options FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>";
// Start streng til en vhost
// tidligere ver. behøvede ikke at have :80 med
$vhost_start = "<VirtualHost *:80>";
// Hvis vhosts defineres i httpd.conf, så skriv linie nummer hvor første vhost container findes
// For at scriptet ikke skal læse hele filen igennem.
$startline = 27;
// END SETTINGS ///////////////////////////////////////////////////////////////////////////////////
if(!is_file($vhost_fil)) {
echo"Forkert sti-angivelse til vhosts-fil: <span style='color: #C00000; font-weight: bold;'>". $vhost_fil ."</span>";
exit;
}
if(!is_writable($vhost_fil)) {
echo"Der er ikke skriverettigheder til filen: <span style='color: #C00000; font-weight: bold;'>". $vhost_fil ."</span>";
exit;
}
$tjekstr = file_get_contents($vhost_fil);
$tjek = strpos($tjekstr, "NameVirtualHost *");
if($tjek === false) {
echo"Der skal bruges NameVirtualHost * i din vhost fil!";
exit;
}
if(!is_file($hosts_path)) {
echo"Forkert sti-angivelse til hosts filen: <span style='color: #C00000; font-weight: bold;'>". $hosts_path ."</span>";
exit;
}
if(basename($hosts_path) != "hosts") {
echo"Forkert navn på filen \"hosts\": <span style='color: #C00000; font-weight: bold;'>". basename($hosts_path) ."</span>";
exit;
}
if(!is_writable($hosts_path)) {
echo"Der er ikke skriverettigheder til filen \"hosts\": <span style='color: #C00000; font-weight: bold;'>". $hosts_path ."</span>";
exit;
}
$safe = ini_get('safe_mode');
$allhosts = array();
$gethosts = file($vhost_fil);
$line_nr = ((int)$startline != false ? $startline : 0);
// Finder hosts i $vhost_fil
for($i = $line_nr; $i < count($gethosts); $i++) {
$gethosts[$i] = trim($gethosts[$i]);
if(substr($gethosts[$i], 0, 10) == "ServerName") {
$allhosts[] = trim(strtolower(substr($gethosts[$i], 10)));
}
}
// BLIVER DER POSTET ??????? ////////////////////////////////////////
if(isset($_POST["host_name"]) && trim($_POST["host_name"]) != "") {
$back = "<a href=\"java script:history.go(-1);\">Tilbage</a>";
$domain = strtolower(trim($_POST["host_name"]));
if (!preg_match("/^[a-zæøå0-9.]+$/", $domain)) {
echo "Kun bogstaver og tal samt punktum kan bruges som domainnavn! ".$back;
exit;
}
if(in_array($domain, $allhosts)) {
echo"Domainnavn findes i forvejen! ".$back;
exit;
}
$new_dir = trim($_POST["host_path"]);
if(!is_dir($new_dir)) {
if(false == @mkdir($new_dir, 0777)) {
echo"Kunne ikke oprette dir! ".$back;
exit;
}
}
$conf_str = "\r\n# ". strtoupper($domain) ."\r\n";
$conf_str .= $vhost_start."\r\n\r\n";
$conf_str .= "ServerName ".$domain."\r\n";
$conf_str .= "DocumentRoot \"".$new_dir."\"\r\n\r\n";
$conf_str .= (get_magic_quotes_gpc() ? stripslashes($_POST["host_param"]) : $_POST["host_param"])."\r\n\r\n";
$conf_str .= "</VirtualHost>\r\n";
$skriv = fopen($vhost_fil, "ab");
if($skriv) {
fwrite($skriv, $conf_str);
fclose($skriv);
$hosts_str = "\r\n127.0.0.1 ".$domain;
$tohosts = fopen($hosts_path, "ab");
fwrite($tohosts, $hosts_str);
fclose($tohosts);
if($safe == false) {
exec($apache_exe);
}
}else{
echo"Kunne åbne vhosts fil? ".$back;
exit;
}
header("Location:".$_SERVER["PHP_SELF"]);
}
// END TJEK PÅ POST /////////////////////////////////////////////////
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html><head><title>Apache Vhosts</title>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<style type="text/css">
body {
font-family: arial, verdana;
color: black;
font-size: 0.9em;
margin: 0px;
background-color: white;
}
td, th {
font-family: arial, verdana;
color: black;
font-size: 0.8em;
}
a:link {
color: #404040;
text-decoration: underline;
}
a:visited {
color: #404040;
text-decoration: underline;
}
a:hover {
color: #4f0000;
text-decoration: none;
}
.input {
color: black;
background-color: #ffffff;
font-family: arial;
font-size: 0.9em;
border-color: black;
border-width: 1px;
}
.submit {
font-size: 0.8em;
border-width: 1px;
border-color: black;
}
.green {
background-color: #006600;
padding: 3px;
color: #FEFAE4;
font-size: 1.4em;
border-bottom: solid #C0C0C0;
border-width: 6px;
}
.top {
font-size: 0.8em;
padding: 8px;
}
.error {
color: #C00000;
font-weight: bold;
}
</style>
</head>
<body>
<div style="text-align: center;">
<div class="green">Vhosts i Apache</div>
<div class="top">
Scriptet er lavet med udgangspunkt i <a href="
http://www.eksperten.dk/artikler/218">http://www.eksperten.dk/artikler/218</a> </div>
<table cellspacing="12" align="center"><tr>
<td colspan="2" style="font-size: 0.7em; text-align: center;"><?php echo $_SERVER["SERVER_SOFTWARE"]; ?></td>
</tr><tr>
<td style=" vertical-align: top;"><span style="font-weight: bold;">vhosts oprettet:</span><br />
<?php
$antal = count($allhosts);
if($antal > 0) {
$a = 1;
echo"\r\n\t<table cellspacing=\"8\"><tr>\r\n\r\n";
for($v = 0; $v < $antal; $v++) {
echo"\t\t<td><a href=\"
http://".$allhosts[$v]."\">".$allhosts[$v]."</a></td>\r\n\r\n"; if($a%2 == 0 && $a != $antal) {
echo"\t</tr><tr>\r\n\r\n";
}
$a++;
}
echo"\t</tr></table>";
}else{
echo"<span class=\"error\">Ingen vhosts oprettet!</span>";
}
?></td>
<td style=" vertical-align: top;"><span style="font-weight: bold;">Oprettelse af vhost:</span>
<form action="<?php echo basename($_SERVER["PHP_SELF"]); ?>" method="post" style="display: inline;">
<div style="padding-left: 8px;">
Hostnavn: <small>(f.eks. nythost.localhost)</small><br />
<input type="text" name="host_name" class="input" size="24"><br />
Sti til DocumentRoot: <small>(f.eks. c:/www/nythost)</small><br />
<input type="text" name="host_path" class="input" size="40" value="<?php echo $default_path; ?>"><br />
Directory-blok for nyt vhost:<br />
<textarea name="host_param" class="input" cols="60" rows="12"><?php echo htmlspecialchars($default_dir_value); ?></textarea><center><br />
<input type="submit" value="Opret vhost" class="submit">
<?php
if($safe == true) {
?>
<div class="top">Safemode er On, så Apache skal genstartes manuelt!</div>
<?php
}
?>
</div>
</form></td>
</tr><table>
<?php
$hosts_file = file($hosts_path);
$inhost = array();
for($h = 0; $h < count($hosts_file); $h++) {
if(substr($hosts_file[$h], 0, 9) == "127.0.0.1") {
$inhost[] = trim(substr($hosts_file[$h], 9));
}
}
$different = array_diff($allhosts, $inhost);
if(!empty($different)) {
echo"Vhost som ikke er defineret i hosts filen:\r\n";
echo"<div class=\"top\">".implode(", ", $different)."</div>";
}
?>
</div>
</body></html><?php
} // END if(localhost.......
?>