Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] просмотр каталога на WEB сервере (http://forum.oszone.net/showthread.php?t=254101)

Дивер 15-02-2013 16:01 2091219

просмотр каталога на WEB сервере
 
Товарищи, сильно не пинайте если не туда пишу))) Нужна помощь специалиста.

Суть проблемы:
Есть файл default.asp. В этом файле код VBScript. Я заливаю этот файл в каталог на сервере IIS. Открываю ссылку в браузере и у меня отображается список файлов в текущей директории. Но! Помимо всего прочего, отображается сам файл default.asp и web.config. Хотелось бы сделать так, чтобы в этом файле можно было явно указывать какие расширения файлов не отображать в списке (например не отображать файлы *.asp, *.config и пр.).

сам файл default.asp


как это выглядит сейчас:
Смотреть

Iska 16-02-2013 05:35 2091702

Цитата:

Цитата Дивер
сам файл default.asp »

Ссылка недоступна.

Дивер 16-02-2013 10:23 2091761

Поправил. В ссылке по ошибке 2 раза http написал))

Iska 16-02-2013 15:48 2091947

1. «On Error Resume Next» — не самый правильный выбор. Обработки ошибок я нигде в коде не увидел. Тогда — смысл? Или выкиньте, или уж обрабатывайте возможные ошибки.

2. Например добавьте в код простейшее:
Код:


<%
  ''''''''''''''''''''''''''''''''''''''''
  ' output the file list
  ''''''''''''''''''''''''''''''''''''''''

  Set objCollection = objFolder.Files

  For Each objItem in objCollection
      strName = objItem.Name
     
      Select Case LCase(strName)
          Case "default.asp", "web.config"
              ' Nothing to do
          Case Else

              ' Здесь Ваш код по выводу файлов
                strFile = Server.HTMLEncode(Lcase(strName))
         
                intSizeB = objItem.Size
                intSizeK = Int((intSizeB/1024) + .5)
                intSizeM = Int((intSizeB/1024/1024) + .5)
                … и так далее
      End Select


Дивер 17-02-2013 12:28 2092477

код работает, но как-то странно.. "задваивает" другие файлы. Посмотреть.
В колонке тип файла все равно отображает тип файла asp и config, но вместо имени подставляет название предыдущего файла.

Вот кстати оригинал файла на сайте мелкомягких. В нем я поменял дизайн и выкинул пару колонок. Может конечно своими кривыми ручёнками еще что выкинул нужное))

Могу предоставить хост для теста файла если нужно.

Iska 17-02-2013 12:51 2092489

Цитата:

Цитата Дивер
Вот кстати оригинал файла на сайте мелкомягких. »

Теперь понятно, откуда «Resume Next», который они вставляют куда ни попадя, и своеобразная методика получения расширения файла.

Этот оригинальный файл нормально отрабатывал, без удвоения?

Попробуйте так:
читать дальше »
Код:

<%@LANGUAGE="VBSCRIPT"%>
<%
  Option Explicit
  On Error Resume Next

  ' this section is optional - it just denies anonymous access
  If Request.ServerVariables("LOGON_USER")="" Then
      Response.Status = "401 Access Denied"
  End If

  ' declare variables
  Dim objFSO, objFolder
  Dim objCollection, objItem

  Dim strPhysicalPath, strTitle, strServerName
  Dim strPath, strTemp
  Dim strName, strFile, strExt, strAttr
  Dim intSizeB, intSizeK, intAttr, dtmDate

  ' declare constants
  Const vbReadOnly = 1
  Const vbHidden = 2
  Const vbSystem = 4
  Const vbVolume = 8
  Const vbDirectory = 16
  Const vbArchive = 32
  Const vbAlias = 64
  Const vbCompressed = 128

  ' don't cache the page
  Response.AddHeader "Pragma", "No-Cache"
  Response.CacheControl = "Private"

  ' get the current folder URL path
  strTemp = Mid(Request.ServerVariables("URL"),2)
  strPath = ""

  Do While Instr(strTemp,"/")
      strPath = strPath & Left(strTemp,Instr(strTemp,"/"))
      strTemp = Mid(strTemp,Instr(strTemp,"/")+1)     
  Loop

  strPath = "/" & strPath

  ' build the page title
  strServerName = UCase(Request.ServerVariables("SERVER_NAME"))
  strTitle = "Contents of the " & strPath & " folder"

  ' create the file system objects
  strPhysicalPath = Server.MapPath(strPath)
  Set objFSO = Server.CreateObject("Scripting.FileSystemObject")
  Set objFolder = objFSO.GetFolder(strPhysicalPath)
%>
<html>
<head>
<title><%=strServerName%> - <%=strTitle%></title>
<meta name="GENERATOR" content="The Mighty Hand of Bob">
<style>
BODY  { BACKGROUND: #cccccc; COLOR: #000000;
        FONT-FAMILY: Arial; FONT-SIZE: 10pt; }
TABLE { BACKGROUND: #000000; COLOR: #ffffff; }
TH    { BACKGROUND: #0000ff; COLOR: #ffffff; }
TD    { BACKGROUND: #ffffff; COLOR: #000000; }
TT    { FONT-FAMILY: Courier; FONT-SIZE: 11pt; }
</style>
</head>
<body>

<h1 align="center"><%=strServerName%><br><%=strTitle%></h1>
<h4 align="center">Please choose a file/folder to view.</h4>

<div align="center"><center>
<table width="100%" border="0" cellspacing="1" cellpadding="2">
<tr>
  <th align="left">Name</th>
  <th align="left">Bytes</th>
  <th align="left">KB</th>
  <th align="left">Attributes</th>
  <th align="left">Ext</th>
  <th align="left">Type</th>
  <th align="left">Date</th>
  <th align="left">Time</th>
</tr>

<%
  ''''''''''''''''''''''''''''''''''''''''
  ' output the folder list
  ''''''''''''''''''''''''''''''''''''''''

  Set objCollection = objFolder.SubFolders

  For Each objItem in objCollection
      strName = objItem.Name
      strAttr = MakeAttr(objItem.Attributes)     
      dtmDate = CDate(objItem.DateLastModified)
%>
<tr>
  <td align="left"><b><a href="<%=strName%>"><%=strName%></a></b></td>
  <td align="right">N/A</td>
  <td align="right">N/A</td>
  <td align="left"><tt><%=strAttr%></tt></td>
  <td align="left"><b><DIR></b></td>
  <td align="left"><b>Directory</b></td>
  <td align="left"><%=FormatDateTime(dtmDate,vbShortDate)%></td>
  <td align="left"><%=FormatDateTime(dtmDate,vbLongTime)%></td>
</tr>
<% Next %>

<%
  ''''''''''''''''''''''''''''''''''''''''
  ' output the file list
  ''''''''''''''''''''''''''''''''''''''''

  Set objCollection = objFolder.Files

  For Each objItem in objCollection
      strName = objItem.Name
     
      Select Case LCase(strName)
          Case "default.asp", "web.config"
              ' Nothing to do
          Case Else
            strFile = Server.HTMLEncode(Lcase(strName))
           
            intSizeB = objItem.Size
            intSizeK = Int((intSizeB/1024) + .5)
            If intSizeK = 0 Then intSizeK = 1
           
            strAttr = MakeAttr(objItem.Attributes)
            strName = Ucase(objItem.ShortName)
            If Instr(strName,".") Then strExt = Right(strName,Len(strName)-Instr(strName,".")) Else strExt = ""
            dtmDate = CDate(objItem.DateLastModified)
%>
<tr>
  <td align="left"><a href="<%=strFile%>"><%=strFile%></a></td>
  <td align="right"><%=FormatNumber(intSizeB,0)%></td>
  <td align="right"><%=intSizeK%>K</td>
  <td align="left"><tt><%=strAttr%></tt></td>
  <td align="left"><%=strExt%></td>
  <td align="left"><%=objItem.Type%></td>
  <td align="left"><%=FormatDateTime(dtmDate,vbShortDate)%></td>
  <td align="left"><%=FormatDateTime(dtmDate,vbLongTime)%></td>
</tr>
<%      End Select
 Next %>

</table>
</center></div>

</body>
</html>
<%
  Set objFSO = Nothing
  Set objFolder = Nothing

  ' this adds the IIf() function to VBScript
  Function IIf(i,j,k)
      If i Then IIf = j Else IIf = k
  End Function

  ' this function creates a string from the file atttributes
  Function MakeAttr(intAttr)
      MakeAttr = MakeAttr & IIf(intAttr And vbArchive,"A","-")
      MakeAttr = MakeAttr & IIf(intAttr And vbSystem,"S","-")
      MakeAttr = MakeAttr & IIf(intAttr And vbHidden,"H","-")
      MakeAttr = MakeAttr & IIf(intAttr And vbReadOnly,"R","-")
  End Function
%>


Дивер 17-02-2013 20:56 2092936

Отлично! Работает! По Вашему примеру перенес "End Select" и в файле моей "редакции" тоже все заработало как надо!
Огромное Вам спасибо, что нашли время мне помочь! Очень выручили меня!

Iska 17-02-2013 21:26 2092961

Рад был помочь (в меру компетенции ;)). Заходите ещё.


Время: 18:02.

Время: 18:02.
© OSzone.net 2001-