X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

Открыть тему
Тема закрыта
> Написал скрипт на VBS для управления Apache'м. Доработаем?
pavelsc
pavelsc
Topic Starter сообщение 29.8.2011, 14:06; Ответить: pavelsc
Сообщение #1


Если вы ставили в отдельности Apache, PHP и MySQL, то эта тема для вас. После Denwer, который работал между прочим нормально, прочитав о веб-серверах (имеются ввиду сборки типа Denwer и XAMPP) все-таки решился на то, чтобы поставить все в отдельности. Экспу надо получать ежедневно.
В общем стало нехватать функции остановки сервера, обновления хостов по папкам с сайтами.
Решил сделать все труЪ способом через VBS скрипты. Вот что вышло:
[JS]
'Option Explicit

Function RegExpTest(patrn, strng)

Dim regEx

Set regEx = New RegExp
regEx.Pattern = patrn
regEx.IgnoreCase = False

RegExpTest = regEx.Test(strng)

End Function

strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set objShell = createObject("WScript.Shell")
set objFSO = createObject("Scripting.FileSystemObject")
HostsFilePath = objFSO.getSpecialFolder(1) & "\drivers\etc\hosts"


Sub UpdateHosts()

Dim arrFileLines(), arrVirtualHostsList(), badLine, i, objHostsFile, serverFolder

set objHostsFile = objFSO.openTextFile(HostsFilePath)

Set serverFolder = objFSO.GetFolder("D:\web\") 'заменить на каталог, где лежат сайты
Set virtualHostsList = serverFolder.SubFolders

i=0

Do Until objHostsFile.AtEndOfStream
Redim Preserve arrFileLines(i)
arrFileLines(i) = objHostsFile.ReadLine
i = i + 1
Loop

objHostsFile.Close

i=0

For each virtualHost In virtualHostsList
Redim Preserve arrVirtualHostsList(i)
arrVirtualHostsList(i) = virtualHost.Name
i = i + 1
Next

For l = Lbound(arrFileLines) to UBound(arrFileLines)
If RegExpTest("#webserver", arrFileLines(l))=True Then
badLine = True
For k = Lbound(arrVirtualHostsList) to UBound(arrVirtualHostsList)
If RegExpTest(arrVirtualHostsList(k), arrFileLines(l)) = True Then
arrVirtualHostsList(k)="$del"
badLine = False
End If
Next
If badLine = True Then arrFileLines(l) = "$del"
End If
Next

For l = Lbound(arrVirtualHostsList) to UBound(arrVirtualHostsList)
If Not arrVirtualHostsList(l)="$del" Then
Redim Preserve arrFileLines(UBound(arrFileLines)+1)
arrFileLines(UBound(arrFileLines)) = "127.0.0.1 " & arrVirtualHostsList(l) & " #webserver"
End If
Next

objFSO.deleteFile(HostsFilePath)
set objHostsFile = objFSO.createTextFile(HostsFilePath)

For l = Lbound(arrFileLines) to UBound(arrFileLines)
If Not arrFileLines(l)="$del" Then objHostsFile.writeLine(arrFileLines(l))
Next

objHostsFile.Close

End Sub

Sub DisableHosts()

Dim arrFileLines(), i, objHostsFile


set objHostsFile = objFSO.openTextFile(HostsFilePath)


i=0

Do Until objHostsFile.AtEndOfStream
Redim Preserve arrFileLines(i)
arrFileLines(i) = objHostsFile.ReadLine
i = i + 1
Loop

objHostsFile.Close

i=0


For l = Lbound(arrFileLines) to UBound(arrFileLines)
If RegExpTest("#webserver", arrFileLines(l))=True Then
If InStr(arrFileLines(l), "#") > 10 Then
arrFileLines(l)="#" & arrFileLines(l)
End If
End If
Next

objFSO.deleteFile(HostsFilePath)

set objHostsFile = objFSO.createTextFile(HostsFilePath)

For l = Lbound(arrFileLines) to UBound(arrFileLines)
objHostsFile.writeLine(arrFileLines(l))
Next


objHostsFile.Close

End Sub


Private Sub EnableHosts()

Dim arrFileLines(), i, objHostsFile


set objHostsFile = objFSO.openTextFile(HostsFilePath)


i=0

Do Until objHostsFile.AtEndOfStream
Redim Preserve arrFileLines(i)
arrFileLines(i) = objHostsFile.ReadLine
i = i + 1
Loop

objHostsFile.Close

i=0


For l = Lbound(arrFileLines) to UBound(arrFileLines)
If RegExpTest("#webserver", arrFileLines(l))=True Then
If InStr(arrFileLines(l), "#") < 10 Then
arrFileLines(l) = Replace(arrFileLines(l),"#","",1,1)
End If
End If
Next

objFSO.deleteFile(HostsFilePath)

set objHostsFile = objFSO.createTextFile(HostsFilePath)

For l = Lbound(arrFileLines) to UBound(arrFileLines)
objHostsFile.writeLine(arrFileLines(l))
Next


objHostsFile.Close

End Sub

Sub StartApache
Set colListOfServices = objWMIService.ExecQuery _
("Select * from Win32_Service Where Name = 'Apache2'")
For Each objService in colListOfServices
objService.StartService()
Next
End Sub

Sub StopApache
Set colListOfServices = objWMIService.ExecQuery _
("Select * from Win32_Service Where Name = 'Apache2'")
For Each objService in colListOfServices
objService.StopService()
Next
End Sub



If Wscript.Arguments.Count = 0 Then

Else

If Wscript.Arguments(0)="/restart" Then
StopApache()
WScript.Sleep 1000
UpdateHosts()
WScript.Sleep 1000
StartApache()
End If
If Wscript.Arguments(0)="/start" Then
StartApache()
EnableHosts()
End If
If Wscript.Arguments(0)="/stop" Then
StopApache()
DisableHosts()
End If

End If
[/JS]

Указываем папку в скрипте со своими сайтами (по умолчанию D:/web/) и кидаем скрипт в системную папку. Скрипт сохраняем как apache.vbs. Запускаем из командной строки так - apache /ключ
Поддерживаются следующие ключи:
/stop
/start
/restart

Помимо управления службой apache2 скрипт вносит изменения в hosts файл. При ключе /restart cкрипт смотрит содержимое папки с сайтами и прописывает их на 127.0.0.1. Неактуальные записи удаляет оттуда, если появилась новая папка - добавляет. Иными словами автоматизирует работу с файлом hosts. При запуске с ключами stop/start скрпит закомментирует/раскомментирует строчки с нашими сайтами чтобы можно было получать доступ к реальному сайту.

В дальнейшем планирую на свободном времени довести автоматизацию до изменения httpd.conf чтобы еще и виртуальные хосты изменять не вручную.

Замечание модератора:
Эта тема была закрыта автоматически ввиду отсутствия активности в ней на протяжении 100+ дней.
Если Вы считаете ее актуальной и хотите оставить сообщение, то воспользуйтесь кнопкой
или обратитесь к любому из модераторов.
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) Партнерская программа для Эзотерики, Магии, Таро
партнерка для эзотерики
0 LiveExpert 363 Вчера, 15:13
автор: LiveExpert
Открытая тема (нет новых ответов) Партнерская программа для Эзотерики, Магии, Таро
партнерка для эзотерики
0 LiveExpert 336 Вчера, 15:13
автор: LiveExpert
Горячая тема (нет новых ответов) Тема имеет прикрепленные файлыAzinomoney.com - гемблинг-партнерка с 65%RS для каждого
Гарантированный заработок на гемблинг-трафике
65 AzinoMoney 29197 27.3.2024, 19:10
автор: AzinoMoney
Горячая тема (нет новых ответов) Делаю полностью уникальный дизайн для сайтов!
46 AlexDIZ 93503 26.3.2024, 20:03
автор: AlexDIZ
Открытая тема (нет новых ответов) Большие ставки для кликов в Я.Директ. Как удешевить?
2 rownong27 1122 26.3.2024, 14:13
автор: knezevolk


 



RSS Текстовая версия Сейчас: 29.3.2024, 9:00
Дизайн