Если вы ставили в отдельности 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+ дней.
Если Вы считаете ее актуальной и хотите оставить сообщение, то воспользуйтесь кнопкой
или обратитесь к любому из модераторов.
|