AutoWEB 1.0 - HTTP-Server in AutoIT mit PHP-CGI-Unterstützung.

  • Spoiler anzeigen
    [autoit]

    #include <String.au3>
    #include <File.au3>
    #include <Date.au3>
    #include <Array.au3>
    ;===============================================================================
    ;
    ; Description: Mini-WebServer mit AutoIt
    ; Author(s): Prog@ndy, anhand von
    ; http://de.wikipedia.org/wiki/Hypertext…TTP-Statuscodes
    ; http://www.freevbcode.com/ShowCode.Asp?ID=1294
    ;
    ;MIME-TYPE Liste von http://www.feedforall.com/mime-types.htm
    ;
    ;===============================================================================
    ;
    ; Unterschied der Serverzeit zur GMT in Minuten
    Global Const $TIMEZONE = 60

    [/autoit] [autoit][/autoit] [autoit]

    ; Server-Root
    Global Const $SERVERPATH = "C:\Programme\xampp\htdocs"

    [/autoit] [autoit][/autoit] [autoit]

    ; PHP verwenden:
    Global Const $USEPHP = True
    ; PHP-Exe
    GLOBAL CONST $PHPCGIEXE = "C:\Programme\xampp\php\php-cgi.exe"
    ; Wenn php nicht ausgeführt wird, nicht den Quellcode anzeigen :)
    Global Const $HIDEPHPSOURCE = True

    [/autoit] [autoit][/autoit] [autoit]

    ; Verzeichnissübersicht, wenn kein Index.
    Global Const $AllowFileListing = 0

    [/autoit] [autoit][/autoit] [autoit]

    Global Const $IPADDRESS = @IPAddress1
    Global Const $PORT = 80 ;6667
    Global Const $CONNECTION_TIMEOUT = 1000

    [/autoit] [autoit][/autoit] [autoit]

    EnvSet("GATEWAY_INTERFACE","CGI/1.0")

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    EnvSet("SERVER_SOFTWARE","AutoWEB/10.7")
    EnvSet("SERVER_NAME",$IPADDRESS)
    EnvSet("SERVER_PORT",$PORT)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    GLOBAL $MIMETypes[200][2]
    Local $line
    $mime = FileOpen(@ScriptDir & "\MIMETypes.txt",0)
    For $i = 0 To 199
    $line = FileReadLine($mime)
    If @error = -1 Then ExitLoop
    $line = StringSplit($line,@TAB)
    $MIMETypes[$i][0] = $line[1]
    $MIMETypes[$i][1] = $line[2]
    Next
    FileClose($mime)
    _ArraySort($MIMETypes,0,0,0,2,0)
    TCPStartup()
    $x = ""
    $listen = TCPListen( $IPADDRESS, $PORT )
    Global $GLOBAL_OPENCONNECTIONS[1][2]

    [/autoit] [autoit][/autoit] [autoit]

    ;~ Doesn't work, but why?
    ;~ AdlibEnable("_CheckKeepAliveConn",100)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    While 1 ; Beliebigoft Seiten ausgeben :)
    $acc = -1
    Do
    $acc = TCPAccept( $listen )
    Until $acc <> -1
    Sleep( 50 )
    $r = TCPRecv( $acc, 2048 )
    Local $IP = SocketToIP($acc)
    Local $CloseAfter = False
    $x = _GetTextToSend($r,$IP,$CloseAfter)
    TCPSend($acc,$x)
    ;~ Followin doesn't work yet, but why???
    ;~ Switch $CloseAfter
    ;~ Case 1
    TCPCloseSocket($acc)
    ;~ Case Else
    ;~ $x = UBound($GLOBAL_OPENCONNECTIONS)
    ;~ ReDim $GLOBAL_OPENCONNECTIONS[$x+1][2]
    ;~ $GLOBAL_OPENCONNECTIONS[$x][0] = $acc
    ;~ ConsoleWrite("hh" & @LF)
    ;~ EndSwitch
    WEnd

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _CheckKeepAliveConn()
    Local $r, $number = UBound($GLOBAL_OPENCONNECTIONS)-1
    ConsoleWrite($number & @LF)
    For $i = 1 To $number
    $r = TCPRecv($GLOBAL_OPENCONNECTIONS[$i][0],2048)
    Select
    Case $r = ""
    $GLOBAL_OPENCONNECTIONS[$i][1] += 100
    If $GLOBAL_OPENCONNECTIONS[$i][1] > $CONNECTION_TIMEOUT Then
    TCPCloseSocket($GLOBAL_OPENCONNECTIONS[$i][0])
    _Array2DDelete($GLOBAL_OPENCONNECTIONS,$i)
    $number -= 1
    EndIf
    Case Else
    ConsoleWrite("huihoh" & @LF)
    Local $CloseAfter = False
    Local $x = _GetTextToSend($r,SocketToIP($GLOBAL_OPENCONNECTIONS[$i][0]),$CloseAfter)
    TCPSend($GLOBAL_OPENCONNECTIONS[$i][0],$x)
    Switch $CloseAfter
    Case 1
    TCPCloseSocket($acc)
    EndSwitch
    EndSelect
    Next
    EndFunc

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func OnAutoItExit() ; Beim Beenden von AutoIt
    TCPShutdown()
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _GetTextToSend(ByRef $r,$IP,ByRef $CloseAfter)
    Local $POSTData
    $path = _HeaderParts($r, $POSTData)
    $path[0] = _INetExplorerCapableBack($path[0])
    ;~ MsgBox(0, '', $path[0])
    ;~ $path = _StringBetween($r,'GET ', ' HTTP')
    Select
    Case $path[3] = "HTTP/1.1" And StringLower($path[13]) = "close"
    $CloseAfter = True
    Case $path[3] = "HTTP/1.1"
    $CloseAfter = False
    Case StringLower($path[13]) = "keep-alive"
    $CloseAfter = False
    Case Else
    $CloseAfter = True
    EndSelect
    Select
    Case @error
    Return ""
    Case StringRight($path[0],1) = '/' ;And Not StringInStr($path[0],'/index.')
    $x = _DirectoryListing($path[0])
    Switch @error
    Case 2
    $x = _Error403()
    Case 1
    $x = _Error404()
    EndSwitch
    Case StringInStr($path[0],'cats.loc')
    $x = 'HTTP/1.0 302 Moved Temporarily' & @CRLF & _
    'Date: Fri, 13 Jan 2006 15:12:44 GMT' & @CRLF & _
    'Location: http://de.wikipedia.org/wiki/Katzen' &@CRLF&@CRLF
    Case FileExists($SERVERPATH & $path[0])
    $x = 'HTTP/1.0 200 OK' & @CRLF & _
    'Date: Fri, 13 Jan 2006 15:12:48 GMT' & @CRLF & _
    'Last-Modified: ' & _DateHttp(FileGetTime($SERVERPATH & $path[0])) & @CRLF & _
    _GetMIME($path[0]) & @CRLF & @CRLF
    Switch Stringinstr(FileGetAttrib($SERVERPATH & $path[0]),"D")
    Case 1
    $x = 'HTTP/1.0 302 Moved Temporarily' & @CRLF & _
    'Date: Fri, 13 Jan 2006 15:12:44 GMT' & @CRLF & _
    'Location: '&$path[0] & "/" &@CRLF
    Case 0
    Select
    Case StringRight($path[0],4) = ".php" And $USEPHP
    $x = 'HTTP/1.0 200 OK' & @CRLF
    $x &= _PHPCGI($SERVERPATH & $path[0],$path,$POSTData,$IP)
    Case StringRight($path[0],4) = ".php" And $HIDEPHPSOURCE
    $i = _Error403()
    Case Else
    $x &= @CRLF & FileRead($SERVERPATH & $path[0])
    EndSelect
    EndSwitch
    Case Else
    $x = _Error404()
    EndSelect
    Return $x
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _DateHTTP($datetime)
    Local $asDatePart, $iTimePart

    Switch IsArray($datetime)
    Case 1
    $datetime = $datetime[0]&"/"& $datetime[1]&"/"& $datetime[2] & " " & $datetime[3] & ":"&$datetime[4] & ":"&$datetime[5]
    EndSwitch
    _DateAdd("n",$datetime,-$TIMEZONE)
    _DateTimeSplit($datetime, $asDatePart, $iTimePart)
    Select
    Case $iTimePart[0] = 0
    Dim $iTimePart[4] = [3,"00","00","00"]
    Case $iTimePart[0] = 2
    ReDim $iTimePart[4]
    $iTimePart[3] = "00"
    EndSelect
    Local $dayname = _DateDayOfWeek(_DateToDayOfWeek($asDatePart[1],$asDatePart[2],$asDatePart[3]),1)
    Local $monthname = _DateToMonth($asDatePart[2],1)
    Return $dayname & ", " & $asDatePart[3] & " " & $monthname & " " & $asDatePart[1] &" "& StringRight("0" & ($iTimePart[1]),2) &":"& StringRight("0" & ($iTimePart[2]),2) &":"& StringRight("0" & ($iTimePart[3]),2) & " GMT"
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _DateHTTPCalc($httpdate)
    Local $months[13] = ["", "Jan", "Feb", "Mar", "Apr", "May", "June", "July", "Aug", "Sept", "Oct", "Nov", "Dec"]
    $httpdate = StringSplit($httpdate," ")
    Local $day = $httpdate[2]
    Local $month = _ArraySearch($months,$httpdate[3])
    Local $year = $httpdate[4]
    Return _DateAdd("n",$TIMEZONE,$year &"/"& $month&"/"&$day & " " & $httpdate[5])
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _DirectoryListing($path)
    Local $x = 'HTTP/1.0 200 OK' & @CRLF & _
    'Date: Fri, 13 Jan 2006 15:12:48 GMT' & @CRLF & _
    'Last-Modified: Tue, 10 Jan 2006 11:18:20 GMT' & @CRLF & _
    'Content-Language: de' & @CRLF & _
    'Content-Type: text/html; charset=utf-8' & @CRLF & @CRLF
    Local $search = FileFindFirstFile($SERVERPATH & $path & "index.htm?")
    Switch $search
    Case -1
    FileClose($search)
    Case Else
    $x = 'HTTP/1.0 302 Moved Temporarily' & @CRLF & _
    'Date: Fri, 13 Jan 2006 15:12:44 GMT' & @CRLF & _
    'Location: ' & FileFindNextFile($search) &@CRLF &@CRLF
    FileClose($search)
    Return $x
    EndSwitch
    If Not $AllowFileListing Then Return SetError(2,0,0)
    $x = $x & '<html>' & @CRLF
    $x = $x & "" & @CRLF
    $x = $x & '<head>' & @CRLF
    $x = $x & '<style>' & @CRLF
    $x = $x & 'a:link {font:8pt/11pt verdana; color:red; text-decoration:none}' & @CRLF
    $x = $x & 'a:visited {font:8pt/11pt verdana; color:red; text-decoration:none}' & @CRLF
    $x = $x & 'a:hover {font:8pt/11pt verdana; color:red; text-decoration:underline}' & @CRLF
    $x = $x & '</style>' & @CRLF
    $x = $x & '<meta HTTP-EQUIV="Content-Type" Content="text-html; charset=Windows-1252">' & @CRLF
    $x = $x & '<title>Directory '& $path &'</title>' & @CRLF
    $x = $x & '</head>' & @CRLF
    $x = $x & "" & @CRLF
    $x = $x & '<body bgcolor="#FFFFFF">' & @CRLF
    $x = $x & '<hr>' & @CRLF
    $x = $x & '<a href="index.html"><font size="2"><b>Index</b></font></a>&nbsp;&nbsp;&nbsp;&nbsp;' & @CRLF
    $x = $x & '<a href="cats.loc"><font size="2"><b>Katzen</b></font></a>' & @CRLF
    $x = $x & '<hr><a href = "..">[..]</a><ol>' & @CRLF
    Local $list = _FileListToArray($SERVERPATH & $path)
    If @error = 1 Then Return SetError(1,0,"")
    For $i = 1 To $list[0]
    Select
    Case StringLeft($list[$i],1) = "."
    ContinueLoop
    Case StringInStr(FileGetAttrib($SERVERPATH & $path & $list[$i]),"D")
    $list[$i] &= "/"
    EndSelect
    $x &= "<li><a href='" & $list[$i] & "' >" & $list[$i] & "</a></li>"
    Next
    $x = $x & '</ol></body>' & @CRLF
    $x = $x & '</html>' & @CRLF
    Return $x
    EndFunc

    Func _Error404()
    Local $x = "HTTP/1.1 404 Not Found" & @CRLF & @CRLF
    $x = $x & '<html>' & @CRLF
    $x = $x & "" & @CRLF
    $x = $x & '<head>' & @CRLF
    $x = $x & '<style>' & @CRLF
    $x = $x & 'a:link {font:8pt/11pt verdana; color:red; text-decoration:none}' & @CRLF
    $x = $x & 'a:visited {font:8pt/11pt verdana; color:red; text-decoration:none}' & @CRLF
    $x = $x & 'a:hover {font:8pt/11pt verdana; color:red; text-decoration:underline}' & @CRLF
    $x = $x & '</style>' & @CRLF
    $x = $x & '<meta HTTP-EQUIV="Content-Type" Content="text-html; charset=Windows-1252">' & @CRLF
    $x = $x & '<title>HTTP 404 Not Found</title>' & @CRLF
    $x = $x & '</head>' & @CRLF
    $x = $x & "" & @CRLF
    $x = $x & '<body bgcolor="#FFFFFF">' & @CRLF
    $x = $x & '<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><b><font color="#FF0000">The' & @CRLF
    $x = $x & ' page cannot be found </font></b></font></p>' & @CRLF
    $x = $x & '<p>&nbsp;</p>' & @CRLF
    $x = $x & '<p><font face="Verdana, Arial, Helvetica, sans-serif" size="1">The page you are' & @CRLF
    $x = $x & ' looking for might have been removed, had its name changed, or is temporarily' & @CRLF
    $x = $x & ' unavailable. </font></p>' & @CRLF
    $x = $x & '<p align="center">&nbsp;</p>' & @CRLF
    $x = $x & '<p align="center"><font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#0000FF"><i><font color="#000000">HTTP' & @CRLF
    $x = $x & ' 404 - File not found</font></i></font></p>' & @CRLF
    $x = $x & '</body>' & @CRLF
    $x = $x & '</html>' & @CRLF & @CRLF & @CRLF
    Return $x
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _Error403()
    Local $x = "HTTP/1.1 403 Forbidden" & @CRLF & @CRLF
    $x = $x & '<html>' & @CRLF
    $x = $x & "" & @CRLF
    $x = $x & '<head>' & @CRLF
    $x = $x & '<style>' & @CRLF
    $x = $x & 'a:link {font:8pt/11pt verdana; color:red; text-decoration:none}' & @CRLF
    $x = $x & 'a:visited {font:8pt/11pt verdana; color:red; text-decoration:none}' & @CRLF
    $x = $x & 'a:hover {font:8pt/11pt verdana; color:red; text-decoration:underline}' & @CRLF
    $x = $x & '</style>' & @CRLF
    $x = $x & '<meta HTTP-EQUIV="Content-Type" Content="text-html; charset=Windows-1252">' & @CRLF
    $x = $x & '<title>HTTP 403 Forbidden</title>' & @CRLF
    $x = $x & '</head>' & @CRLF
    $x = $x & "" & @CRLF
    $x = $x & '<body bgcolor="#FFFFFF">' & @CRLF
    $x = $x & '<p><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><b><font color="#FF0000">Access' & @CRLF
    $x = $x & ' denied </font></b></font></p>' & @CRLF
    $x = $x & '<p>&nbsp;</p>' & @CRLF
    $x = $x & '<p><font face="Verdana, Arial, Helvetica, sans-serif" size="1">You have not' & @CRLF
    $x = $x & ' the rights to view this page.' & @CRLF
    $x = $x & '</font></p>' & @CRLF
    $x = $x & '<p align="center">&nbsp;</p>' & @CRLF
    $x = $x & '<p align="center"><font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#0000FF"><i><font color="#000000">HTTP' & @CRLF
    $x = $x & ' 403 - Forbidden</font></i></font></p>' & @CRLF
    $x = $x & '</body>' & @CRLF
    $x = $x & '</html>' & @CRLF & @CRLF & @CRLF
    Return $x
    EndFunc

    ;===============================================================================
    ;
    ; Function Name: _ArrayBinarySearch()
    ; Description: Uses the binary search algorithm to search through a
    ; 1-dimensional array.
    ; Author(s): Jos van der Zande <jdeb at autoitscript dot com>
    ;
    ;===============================================================================
    Func _ArrayBinarySearch2D(ByRef $avArray, $sKey, $i_Base = 0, $Column = 0)
    Local $iLwrLimit = $i_Base
    Local $iUprLimit
    Local $iMidElement
    If (Not IsArray($avArray)) Or UBound($avArray,0) <> 2 Then
    SetError(1)
    Return ""
    EndIf
    $iUprLimit = UBound($avArray) - 1
    $iMidElement = Int(($iUprLimit + $iLwrLimit) / 2)
    ; sKey is smaller than the first entry
    If $avArray[$iLwrLimit][$Column] > $sKey Or $avArray[$iUprLimit][$Column] < $sKey Then
    SetError(2)
    Return ""
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    While $iLwrLimit <= $iMidElement And $sKey <> $avArray[$iMidElement][$Column]
    If $sKey < $avArray[$iMidElement][$Column] Then
    $iUprLimit = $iMidElement - 1
    Else
    $iLwrLimit = $iMidElement + 1
    EndIf
    $iMidElement = Int(($iUprLimit + $iLwrLimit) / 2)
    WEnd
    If $iLwrLimit > $iUprLimit Then
    ; Entry not found
    SetError(3)
    Return ""
    Else
    ;Entry found , return the index
    SetError(0)
    Return $iMidElement
    EndIf
    EndFunc ;==>_ArrayBinarySearch

    [/autoit] [autoit][/autoit] [autoit]

    Func _GetMIME($path)
    Local $szDrive, $szDir, $szFName, $szExt
    _PathSplit($path, $szDrive, $szDir, $szFName, $szExt)
    Local $mimeid = _ArrayBinarySearch2D($MIMETypes,$szExt)
    If @error Then Return SetError(1,0,"")
    Return "Content-Type: " & $MIMETypes[$mimeid][1]
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _PHPCGI($path, ByRef $request,ByRef $POSTData,ByRef $IP)

    EnvSet("REQUEST_METHOD",$request[2])
    EnvSet("PATH_INFO",$request[0])
    EnvSet("PATH_TRANSLATED",$path)
    EnvSet("HTTP_ACCEPT",$request[4])
    EnvSet("SCRIPT_NAME",_FilePathToName($request[0]))
    EnvSet("QUERY_STRING",$request[1])
    EnvSet("HTTP_USER_AGENT",$request[10])
    EnvSet("REMOTE_ADDR",$IP)
    Select
    Case StringUpper($request[2]) = "POST"
    ;~ MsgBox(0, StringLen($POSTData),$request[12] )
    EnvSet("CONTENT_TYPE",$request[11])
    EnvSet("CONTENT_LENGTH",$request[12])
    EndSelect

    [/autoit] [autoit][/autoit] [autoit]

    EnvSet("PHP_SECURE_REDIRECT",1)
    Local $foo = Run('"' & $PHPCGIEXE & '"', _FilePathToFolder($path),@SW_HIDE,3)
    StdinWrite($foo,$POSTData)
    Local $lines
    While 1
    $lines &= StdoutRead($foo)
    If @error Then ExitLoop
    ;~ MsgBox(0, "STDOUT read:", $lines)
    Wend
    ;~ MsgBox(0, '', $lines)
    EnvSet("PHP_SECURE_REDIRECT")
    EnvSet("REMOTE_ADDR")
    EnvSet("HTTP_ACCEPT")
    EnvSet("REQUEST_METHOD")
    EnvSet("PATH_INFO")
    EnvSet("PATH_TRANSLATED")
    EnvSet("SCRIPT_NAME")
    EnvSet("QUERY_STRING")
    EnvSet("CONTENT_TYPE")
    EnvSet("CONTENT_LENGTH")
    EnvSet("HTTP_USER_AGENT")

    Return $lines
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _FilePathToFolder($path)
    Local $szDrive, $szDir, $szFName, $szExt
    _PathSplit($path, $szDrive, $szDir, $szFName, $szExt)
    Return $szDrive & "\" & $szDir
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _FilePathToName($path)
    Local $szDrive, $szDir, $szFName, $szExt
    _PathSplit($path, $szDrive, $szDir, $szFName, $szExt)
    Return $szFName & $szExt
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    ;===============================================================================
    ;
    ; Function Name: _INetExplorerCapableBack()
    ; Description: Convert a string back from IE capable line
    ; Parameter(s): $s_IEString - IE capable line to convert to a normal String
    ; Requirement(s): None
    ; Return Value(s): On Success - Returns the converted string
    ; On Failure - Blank String and @error = 1
    ; Author(s): Prog@ndy
    ;
    ;===============================================================================
    ;
    Func _INetExplorerCapableBack($s_IEString)
    If StringLen($s_IEString) <= 0 Then
    Return ''
    SetError(1)
    Else
    Local $s_IEReturn
    Local $i_IECount
    Local $n_IEChar
    Local $n_RealChar
    While 1
    Local $found = StringInStr($s_IEString,"%",1)
    If Not $found Then ExitLoop
    $n_IEChar = StringMid($s_IEString,$found+1,2)
    $n_RealChar = Chr(Dec($n_IEChar))
    $s_IEString = StringReplace($s_IEString,"%" & $n_IEChar,$n_RealChar)
    WEnd
    Return $s_IEString
    EndIf
    EndFunc ;==>_INetExplorerCapableBack

    [/autoit] [autoit][/autoit] [autoit]

    Func _HeaderParts(ByRef $requestall, ByRef $POSTData)
    Local $i, $result[14]
    $i = StringInStr($requestall,@CRLF&@CRLF)
    Local $spath = 3
    Switch $i
    Case 0
    $i = StringInStr($requestall,@LF&@LF)
    Local $spath = 1
    EndSwitch
    Switch $i
    Case 0
    Local $request = $requestall
    Case Else
    $POSTData = StringTrimLeft($requestall,$i+$spath)
    Local $request = StringLeft($requestall,$i)
    EndSwitch
    $request = StringReplace($request,@CRLF,@LF)
    $request = StringReplace($request,@CR,@LF)
    $request = StringReplace($request,@LF,@CRLF)
    Local $requestAr = StringSplit($request,@CRLF,1)
    Local $start = StringInStr($r," ",2,1)
    Local $ende = StringInStr($r," HTTP",1)
    Local $spath = StringMid($request,$start+1,($ende-$start-1))
    $i = StringInStr($spath,"?",1,1)
    Switch $i
    Case 0
    $result[0] = $spath
    Case Else
    $result[0] = StringLeft($spath,$i-1)
    $result[1] = StringMid($spath,$i+1)
    EndSwitch
    $result[2] = StringLeft($request,$start-1)
    $result[3] = StringMid($requestAr[1],$ende+1)
    For $i = 2 To $requestAr[0]
    Select
    Case StringInStr($requestAr[$i], "Accept: ") = 1
    $result[4] = StringTrimLeft($requestAr[$i],8)

    Case StringInStr($requestAr[$i], "Accept-Encoding: ") = 1
    $result[5] = StringTrimLeft($requestAr[$i],17)

    Case StringInStr($requestAr[$i], "Authorization: ") = 1
    $result[6] = StringTrimLeft($requestAr[$i],15)

    Case StringInStr($requestAr[$i], "Cookie: ") = 1
    $result[7] = StringTrimLeft($requestAr[$i],8)

    Case StringInStr($requestAr[$i], "Host: ") = 1
    $result[8] = StringTrimLeft($requestAr[$i],6)
    Case StringInStr($requestAr[$i], "Authorization: ") = 1
    $result[9] = StringTrimLeft($requestAr[$i],15)


    Case StringInStr($requestAr[$i], "User-Agent: ") = 1
    $result[10] = StringTrimLeft($requestAr[$i],12)
    Case StringInStr($requestAr[$i], "Content-Type: ") = 1
    $result[11] = StringTrimLeft($requestAr[$i],14)
    Case StringInStr($requestAr[$i], "Content-Length: ") = 1
    $result[12] = StringTrimLeft($requestAr[$i],16)
    Case StringInStr($requestAr[$i], "connection: ") = 1
    $result[13] = StringTrimLeft($requestAr[$i],12)
    Case $requestAr[$i] = ""
    ExitLoop
    EndSelect
    Next
    Return $result
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    ; Function to return IP Address from a connected socket.
    ;----------------------------------------------------------------------
    Func SocketToIP($SHOCKET)
    Local $sockaddr = DLLStructCreate("short;ushort;uint;char[8]")

    [/autoit] [autoit][/autoit] [autoit]

    Local $aRet = DLLCall("Ws2_32.dll","int","getpeername","int",$SHOCKET, _
    "ptr",DLLStructGetPtr($sockaddr),"int*",DLLStructGetSize($sockaddr))
    If Not @error And $aRet[0] = 0 Then
    $aRet = DLLCall("Ws2_32.dll","str","inet_ntoa","int",DLLStructGetData($sockaddr,3))
    If Not @error Then $aRet = $aRet[0]
    Else
    $aRet = 0
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    $sockaddr = 0

    [/autoit] [autoit][/autoit] [autoit]

    Return $aRet
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    ;----------------------------------------------------------------------------------------------------------------------
    ; Fuction _Array2DDelete(ByRef $ARRAY, $iDEL)
    ;
    ; Description Delete one row on a given index in an 1D/2D -Array
    ;
    ; Parameter $ARRAY the array, where one row will deleted
    ; $iDEL Row-Index to delete
    ;
    ; Return Succes -1 ByRef $ARRAY
    ; Failure 0 set @error = 1; given array are not array
    ; set @error = 2; index is out of range
    ;
    ; Author BugFix ([email='bugfix@autoit.de'][/email])
    ;----------------------------------------------------------------------------------------------------------------------
    Func _Array2DDelete(ByRef $ARRAY, $iDEL)
    If ( Not IsArray($ARRAY) ) Then
    SetError(1)
    Return 0
    EndIf
    If ( $iDEL < 0 ) Or ( $iDEL > UBound($ARRAY)-1 ) Then
    SetError(2)
    Return 0
    EndIf
    Local $UBound2nd = UBound($ARRAY,2)
    If @error = 2 Then
    Local $arTmp[UBound($ARRAY)-1]
    $k = 0
    For $i = 0 To UBound($ARRAY)-1
    If $i <> $iDEL Then
    $arTmp[$k] = $ARRAY[$i]
    $k += 1
    EndIf
    Next
    Else
    Local $arTmp[UBound($ARRAY)-1][$UBound2nd]
    $k = 0
    For $i = 0 To UBound($ARRAY)-1
    If $i <> $iDEL Then
    For $l = 0 To $UBound2nd-1
    $arTmp[$k][$l] = $ARRAY[$i][$l]
    Next
    $k += 1
    EndIf
    Next
    EndIf
    $ARRAY = $arTmp
    Return -1
    EndFunc

    [/autoit]


    php.ini im SERVERPATH:

    Code
    cgi.force_redirect = 1
    cgi.redirect_status_env = PHP_SECURE_REDIRECT
    cgi.fix_pathinfo = 1
    cgi.rfc2616_headers = 1
  • Hier mal die aktuelle Version (1.3)
    Vor allem am Directory Index wurde gearbeit :)

    PS: Sagt mal, wie findet ihr den Server? :D

    //Edit: Reupload, MIMETypes.txt hat gefehlt :(
    //Edit neue Version für 3.2.12.1 :)

    Bisher 29 mal heruntergeladen

    2 Mal editiert, zuletzt von progandy (26. Juli 2008 um 12:59)

  • "Line 323: (File webserver.au3)
    $MIMETypes[$i][i] = $line[2]

    Error: Array variable has incorrect number of subscripts or subscript dimension range exceeded."

    Wie darf man eigentlich die Funktion verstehen? Wenn ich in meinem Router Ports freischalte, dann kann theoretisch jeder auf meine freigegeben Dateien, wenn ich den Server gestartet habe?

  • So, uralt, trotzdem ausgegraben. Wie versprochen :D

    Angenommen, ich würde mir einen Webserver einrichten wollen: Was genau benötige ich dazu? Welche Funktionen bietet mir AutoWEB?

  • AutoWEB unterstützt GET und POST-Abfragen. Serverseitige Verarbeitung von Parametern kann über PHP erfolgen, das über CGI eingebunden wird.
    Einschränkungen:

    • Nur eine aktive Verbundung (es wird immer nur ein Dokument nach dem anderen verarbeitet/gesendet)
    • Fehlerseiten nicht konfigurierbar
    • keine .htaccess oder vergleichbare Funktionen
    • keine Verarbeitung von Accept-Ranges (also keine Wiederaufnahme von Downloads)
    • allgemein kaum Verarbeitung von headern, die spezielle Aktionen vom Server erfordern


    Ist jetzt sicher nicht vollständig, aber naja

    Zum Betrieb brauchst du auf jeden Fall den AutoWEB-Server. Optional ist PHP möglich.

  • Angenommen ich würde ein Intranet hier einrichten wollen. Ich brauche dazu dann einen Windows-Rechner, auf dem AutoWEB läuft. Wie siehts mit der Hardware aus? Wie steht es mit Vernetzung etc.?

  • Angenommen ich würde ein Intranet hier einrichten wollen. Ich brauche dazu dann einen Windows-Rechner, auf dem AutoWEB läuft. Wie siehts mit der Hardware aus? Wie steht es mit Vernetzung etc.?


    Der Server sollte wie ein normaler Webserver funktionieren ;) Du musst nur die passende IP-Adresse eintragen und den Port freigeben. Was für Hardware nötig ist? Keine Ahnung. Da aber keine parallele Verarbeitung von Anfragen möglich ist, ist schneller immer besser :D
    Sowieso ist es nicht sinnvoll, den Server einzusetzen, da ist jeder andere in einer nativen Programmiersprache geschriebene Server besser

  • Das lässt sich ja ausbauen! :)
    Ich habe vor hier ein Intranet zu bauen und über ein PHP-Portal sollen verschiedene Aktionen getätigt werden können. Jetzt überlege ich, ob ich einen Server einsetze, oder ob ich mir eine bessere Fritz!Box besorge (evtl. einen 1&1 Homeserver). Ich weiß leider nur nicht, ob ich dort mein Portal drauf stellen kann...

  • Das lässt sich ja ausbauen! :)
    Ich habe vor hier ein Intranet zu bauen und über ein PHP-Portal sollen verschiedene Aktionen getätigt werden können. Jetzt überlege ich, ob ich einen Server einsetze, oder ob ich mir eine bessere Fritz!Box besorge (evtl. einen 1&1 Homeserver). Ich weiß leider nur nicht, ob ich dort mein Portal drauf stellen kann...


    Man kann zwar Apache und PHP auf die Fitzbox laden, aber die dürfte zu schwach sein, um größere Seiten zu hosten. Ein Portal wird glaub ich zu groß sein, da brauchst du nen externen Server.
    Als Betriebssystem dann eventuell Ubuntu server

  • @progandy: Auf das Portal würden nur 2-3 Rechner zugreiffen, es bleibt ja intern. Schade, dass die Fritz!Box das nicht kann...
    alfred: XAMPP kenne ich und nutze es hier als lokalen Webserver, muss mich aber noch damit beschäftigen, wies dann im Intranet aussieht. :)