Гуру | У меня есть такой скрипт, писал для себя. В txt-шник забиваются названия доменов (можно как с www, так и без) и путь до SERVER_ROOT, где начинаются виртуальные хосты. Скрипт сам создает папки, смотрит, есть ли такие записи в httpd.conf, перезапускает сервак, смотрит ли все правильно поставилось. Вечером выложу, скриптик дома остался :) Bump: PHP код: <?php
$SERVER_ROOT = '/var/www';
$APACHE_CONFIG = '/etc/httpd/conf/httpd.conf';
#$APACHE_CONFIG = '/etc/apache2/httpd.conf';
$DOMAINS_FILE = './domains.txt';
if ( ! file_exists($SERVER_ROOT) )
{
echo 'Missing SERVER_ROOT: ' . $SERVER_ROOT;
die();
}
if ( ! file_exists($APACHE_CONFIG) )
{
echo 'Missing Apache congif: ' . $APACHE_CONFIG;
die();
}
if ( ! file_exists($DOMAINS_FILE) )
{
echo 'Missing domains list: ' . $DOMAINS_FILE;
die();
}
$domains = array_values($domains);
foreach ( $domains as $k=>$v )
{
$res = add_site($v);
if ( FALSE === $res )
echo '~~Can\'t add ' . $v . '~~' . PHP_EOL;
else if ( TRUE === $res )
echo $v . ' was successfully added' . PHP_EOL;
else
echo '## ' . $res . ' ##' . PHP_EOL;
if ( restart_apache() )
echo '~~Apache was restarted~~' . PHP_EOL;
else
echo '~~Can\'t restart Apache~~' . PHP_EOL;
}
function add_site($site_url)
{
global $SERVER_ROOT, $APACHE_CONFIG;
$SERVER_ROOT = rtrim($SERVER_ROOT, '/');
// let's count dots '.'
$dots_cnt = substr_count($site_url, '.');
if ( ! in_array($dots_cnt, array(1,2)) )
return FALSE;
$subdomain = '';
if ( 1 == $dots_cnt ) // 2nd level domain
{
// make folders
if ( ! file_exists( $SERVER_ROOT . '/' . $site_url ) )
{
mkdir($SERVER_ROOT . '/' . $site_url);
mkdir($SERVER_ROOT . '/' . $site_url . '/htdocs', 0775);
if ( ! file_exists($SERVER_ROOT . '/' . $site_url) || ! file_exists($SERVER_ROOT . '/' . $site_url . '/htdocs'))
return FALSE;
}
}
else // 3rd level domain or SUBDOMAIN
{
$first_dot_position = strpos($site_url, '.');
if ( FALSE === $first_dot_position )
return FALSE;
$subdomain = '/' . substr($site_url, 0, $first_dot_position);
$site_url = substr($site_url, strlen($subdomain));
// domain
if ( ! file_exists( $SERVER_ROOT . '/' . $site_url ) )
{
mkdir($SERVER_ROOT . '/' . $site_url); // domain
}
if ( ! file_exists( $SERVER_ROOT . '/' . $site_url . '/htdocs' ) )
{
mkdir($SERVER_ROOT . '/' . $site_url . '/htdocs');
}
if ( ! file_exists( $SERVER_ROOT . '/' . $site_url . '/htdocs' . $subdomain ) )
{
mkdir($SERVER_ROOT . '/' . $site_url . '/htdocs' . $subdomain); // subdomain
}
if ( ! file_exists($SERVER_ROOT . '/' . $site_url) || ! file_exists($SERVER_ROOT . '/' . $site_url . '/htdocs') || ! file_exists($SERVER_ROOT . '/' . $site_url . '/htdocs' . $subdomain) )
return FALSE;
}
// if httpd.conf already has this VirtualHost
$httpd_conf = file_get_contents($APACHE_CONFIG);
if ( ! strlen($subdomain) )
$pattern = '~\s+'.preg_quote($site_url).'\s+~is';
else
$pattern = '~\s+'.preg_quote(trim($subdomain,'/').'.'.$site_url).'\s+~is';
if ( preg_match($pattern, $httpd_conf) )
return $site_url . $subdomain . ' is already exists in httpd.conf';
// lets's open httpd.conf
$conf = fopen($APACHE_CONFIG, 'a+');
if ( ! $conf )
{
echo 'Cant\'t open httpd.conf in ' . $APACHE_CONFIG . '<br />';
return FALSE;
}
$message = '<VirtualHost *:80>' . PHP_EOL;
$message .= ' ServerAdmin webmaster@dummy-host.example.com' . PHP_EOL;
$message .= ' DocumentRoot /var/www/' . $site_url . '/htdocs' . $subdomain . PHP_EOL;
if ( strlen($subdomain) )
{
$message .= ' ServerName ' . trim($subdomain, '/') . '.' . $site_url . PHP_EOL;
$message .= ' ServerAlias www.' . trim($subdomain, '/') . '.' . $site_url . PHP_EOL;
}
else
{
$message .= ' ServerName ' . $site_url . PHP_EOL;
$message .= ' ServerAlias www.' . $site_url . PHP_EOL;
}
$message .= ' ErrorLog /var/www/' . $site_url . '/' . strtoupper(trim($subdomain, '/')) .'error_log' . PHP_EOL;
$message .= ' CustomLog /var/www/' . $site_url . '/' . strtoupper(trim($subdomain, '/')) .'access_log common' . PHP_EOL;
$message .= '</VirtualHost>' . PHP_EOL . PHP_EOL;
fwrite($conf, $message);
fclose($conf);
return TRUE;
}
function restart_apache($command = '/etc/rc.d/init.d/httpd restart')
{
if ( exec($command) )
return TRUE;
return FALSE;
}
function xmp($arr)
{
echo '<xmp>';
print_r($arr);
echo '</xmp>';
}
?>
Если я не ошибаюсь, то это последняя редакция скрипта. Если кто будет пробовать и не получится - пишите в личку, разберемся :) |
|