Spoiler anzeigen
#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
; Server-Root
Global Const $SERVERPATH = "C:\Programme\xampp\htdocs"
; 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
; Verzeichnissübersicht, wenn kein Index.
Global Const $AllowFileListing = 0
Global Const $IPADDRESS = @IPAddress1
Global Const $PORT = 80 ;6667
Global Const $CONNECTION_TIMEOUT = 1000
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)
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]
;~ Doesn't work, but why?
;~ AdlibEnable("_CheckKeepAliveConn",100)
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
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
Func OnAutoItExit() ; Beim Beenden von AutoIt
TCPShutdown()
EndFunc
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
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
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
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> ' & @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> </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"> </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
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> </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"> </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
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
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
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
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
Func _FilePathToFolder($path)
Local $szDrive, $szDir, $szFName, $szExt
_PathSplit($path, $szDrive, $szDir, $szFName, $szExt)
Return $szDrive & "\" & $szDir
EndFunc
Func _FilePathToName($path)
Local $szDrive, $szDir, $szFName, $szExt
_PathSplit($path, $szDrive, $szDir, $szFName, $szExt)
Return $szFName & $szExt
EndFunc
;===============================================================================
;
; 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
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
; Function to return IP Address from a connected socket.
;----------------------------------------------------------------------
Func SocketToIP($SHOCKET)
Local $sockaddr = DLLStructCreate("short;ushort;uint;char[8]")
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
$sockaddr = 0
[/autoit] [autoit][/autoit] [autoit]Return $aRet
EndFunc
;----------------------------------------------------------------------------------------------------------------------
; 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
php.ini im SERVERPATH: