Главная страница статей --> Советы по фотошопу, графике и хитрости в построении php кода

Представление в Internet содержимого каталога средствами ASP

Источник: realcoding.net

В этой статье я на примере расскажу, как используя ASP (Active Server Pages) можно построить содержимое каталога Web аналогично тому, как это выглядит на FTP сервере.

Постановка задачи: На Web-сервере есть каталог, например: C:\\InetPub\\wwwroot\\user1. Пусть данный каталог имеет несколько вложенных каталогов и набор файлов в этих каталогах.

В каждом из каталогов может находиться неограниченное количество файлов, либо некоторые из каталогов могут быть пустыми. Необходимо представить содержимое папки user1 на Web-странице в дружественном для пользователя виде.

Интересной особенностью скрипта является то, что применяя страницу с фреймами (кадрами), можно построить меню пользователя.

Результат должен выглядеть примерно следующим образом:

Находимся в папке C:\\Inetpub\\wwwroot\\user1\\folder1\\subfolder2:

На данном скриншоте показан пример меню. Страница menu.htm разделена на два фрейма. В левом фрейме находится файл list_files.asp, а правый фрейм используется для отображения файлов, ссылки на которые находятся в левом фрейме. В левом фрейме можно свободно перемещаться по папкам. Т.о. можно организовать меню пользователя.

Решение: Ключ к решению данной задачи - это использование MicrosoftR Scripting Library. Нас будет интересовать такой объект этой библиотеки, как FileSystemObject. FileSystemObject предоставляет объектную модель доступа к файловой системе. Далее, пользуясь средствами языка написания сценариев VBScript, выполняемого на Web-сервере, можно написать одну ASP-страницу, которая будет выполнять всю работу. Итак, приступим.

Листинг файла list_files.asp:

<%Response.Expires=0%> Отключаем кэширование страницы
<HTML>
<BODY>
<!-Серверный сценарий a
<%
Dim root_folder, root_vfolder, curr_dir, curr_dir2, temp_arr
root_folder - переменная для хранения физического пути к корневой папке USER1
root_folder = "c:\\inetpub\\wwwroot\\user1"
root_vfolder - переменная для хранения виртуального пути к папке USER1
localhost - имя Вашего сервера
root_vfolder = "http://localhost/user1"
curr_dir2 - имя текущей (активной) папки
curr_dir2 = Request.QueryString("dir") Имя получаем из URL
curr_dir - полный физический путь к текущей папке. Получается конкатенацией строк,
содержащихся в переменных root_folder и curr_dir2.
curr_dir = root_folder & curr_dir2
temp_arr - временный массив
Получаем массив, содержащий названия каталогов текущей папки.
temp_arr = ShowDirList(curr_dir)
Сортируем массив строк
temp_arr = SortStr(temp_arr)
%>
<table border=0>
<%
Вызов процедуры, осуществляющей вывод названий подкаталогов текущего каталога.
Call Main_Print(temp_arr,1)
Получаем массив, содержащий имена файлов текущей папки.
temp_arr = ShowFilesList(curr_dir)
Сортируем массив строк
temp_arr = SortStr(temp_arr)
Вызов процедуры, осуществляющей вывод имен файлов текущего каталога.
Call Main_Print(temp_arr,0)
%>
</table>
<%
Очистка содержимого массива
Erase temp_arr

Далее следует текст функций и процедур, используемых в сценарии.

Функции:


  • ShowFilesList - возвращает массив, содержащий имена файлов текущей папки.
  • ShowDirList - возвращает массив, содержащий названия каталогов текущей папки.
  • SortStr - сортирует массив строк.

Процедура: Main_Print - осуществляет вывод в HTML-формате содержимое текущего каталога.

Продолжение листинга файла list_files.asp:

Function ShowFilesList(folder)
Dim fs, f, f1, fc, i
Определяем динамический массив для хранения имен файлов
ReDim farr(0)
Создаем объект FileSystemObject
Set fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.GetFolder(folder)
Set fc = f.Files
i=0
В цикле заполняем массив именами файлов текущей папки
For Each f1 In fc
farr(i) = LCase(CStr(f1.Name)) Преобразуем имя к нижнему регистру символов
i = i + 1
Увеличение размера массива
ReDim Preserve farr(i)
Next
Возвращаем результат
ShowFilesList = farr
End Function


Function ShowDirList(folder)
Dim fs, f, f1, fc, i
Определяем динамический массив для хранения названий каталогов
ReDim dirarr(0)
Set fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.GetFolder(folder)
Set fc = f.SubFolders
i=0
В цикле заполняем массив именами каталогов текущей папки
For Each f1 In fc
dirarr(i) = LCase(CStr(f1.Name))
i = i + 1
ReDim Preserve dirarr(i)
Next
Возвращаем результат
ShowDirList = dirarr
End Function


Function SortStr(arr)
Dim t,i,j
Сортировка методом "пузырька"
UBound - возвращает верхний индекс массива
For j = 0 To UBound(arr)-1
For i = j + 1 To UBound(arr)-1
StrComp - сравнивает две строки
Возвращает "-1", если строка1 < строка2;"0", если строка1=строка2;"1",если строка1>
строка2.
If StrComp(CStr(arr(i)), CStr(arr(j)), vbTextCompare) < 0 Then
t = arr(j)
arr(j) = arr(i)
arr(i) = t
End If
Next
Next
Возвращаем результат
SortStr = arr
End Function

Sub Main_Print(arr,flag)
flag = 1 - вывод для каталогов
flag = 0 - вывод для файлов
Dim i,k,tmp
i = 0
Select Case flag
Case 1
Если находимся в подкаталоге, то надо предусмотреть возможность вернуться
на уровень выше
If curr_dir2 <> "" Then
Ищем последнее вхождение символа разделителя каталогов "\\"
k = InStrRev(curr_dir2,"\\")
If k <> 0 Then
Получаем имя каталога верхнего уровня
tmp = Mid(curr_dir2,1,k-1)
Response.Write "<tr>" Вывод HTML
Для украшения используем графический файл open.gif - изображение открытой папки.
Response.Write "<td><img src=open.gif></td>"
Формируем ссылку на верхний каталог
Response.Write "<td><a href=list_files.asp?dir="
Response.Write  tmp & ">" & " .. " & "</a></td></tr>"
End If
End If
Основной цикл вывода названий каталогов
For i = 0 To UBound(arr)-1
Response.Write "<tr>"
Response.Write "<td><img src=close.gif></td>"
Response.Write "<td><a href= list_files.asp?dir="
Response.Write curr_dir2 & "\\" & arr(i) & ">" & arr(i) & _
"</a></td></tr>"
Next
Вывод имен файлов
Case 0
Основной цикл вывода имен файлов
For i = 0 To UBound(arr)-1
Response.Write "<tr>"
Response.Write "<td><img src=doc.gif></td>"
Заменяем "\\" на "/" для использования в URL
Атрибут target нужен для указания ссылки на фрейм
Response.Write "<td><a href=" & root_vfolder & Replace(curr_dir2,"\\","/")
Response.Write "/" & arr(i) & _
" target=main>" & arr(i) & "</a></td></tr>"
Next
End Select
End Sub
%>
</BODY>
</HTML>

Далее необходимо написать страницу menu.htm, содержащую два фрейма, как было показано выше. Листинг приведен ниже:

<HTML>
<HEAD>
</HEAD>
<FRAMESET COLS="150,*">
<FRAME NAME="contents" SRC="list_files.asp">
<FRAME NAME="main" SRC="empty.htm">
</FRAMESET>
</HTML>

Файл empty.htm представляет собой пустой файл-заглушку для корректного отображения страницы в браузере Netscape Navigator.

<!-- empty.htm -->
<HTML>
</HTML>

Файлы list_files.asp, menu.htm, empty.htm необходимо поместить в каталог на Web-сервере с правом Script.

Далее в браузере набираем, например, http://localhost/scripts/menu.htm



Похожие статьи:
- Несколько слов о том, как работают роботы поисковых машин
- Повышаем Индекс Цитирования
- Мелкие черты вашего сайта
- Как уменьшить исходящий траффик?
- Проверка хостинг провайдера
- Знакомство с ASP. Счетчик...
- Мультибраузерный сайт или как его сделать
- Определение IP-адреса с помощью Perl
- Подключение к базе данных с помощью JDBC
- PHP-работа с файлами
- Модуль mod_rewrite. Часть 2.
- Использование JS для создания «умных» форм
- Первоначальная настройка MySQL


Оглавление | Обсудить на форуме | Главная страница сайта | Карта сайта |

Контакты
Редакция:
[0.001]