Доступ к локальному диску
Будем называть локальным диском жесткий диск чужого компьютера, на котором читается ваша Web-страница (если же она читается на вашем компьютере, то тогда локальный диск – это жесткий диск вашего компьютера). Доступом к локальному диску будем называть возможность при помощи сценария вашей Web-страницы читать, стирать или записывать информацию в файлы локального диска (примерно так, как мы это делали в 19.2 с файлами на диске нашего компьютера), а также осуществлять все другие операции с файлами и папками.
Спрашивается, хорошо это или плохо – при помощи вашей Web-страницы иметь доступ к диску чужого компьютера? Это примерно то же самое, что спросить, хорошо это или плохо – прийти к незнакомому человеку в гости и, пользуясь его доверчивостью, иметь доступ ко всем вещам и секретным документам в его квартире. Если вы честный человек, то ничего не украдете и подглядывать не будете. Зачем же вам тогда доступ? Получается, что доступ – это плохо? Не всегда. Он часто бывает нужен в общении между знакомыми людьми, которые доверяют друг другу и которым было бы удобно считывать информацию с локальных дисков друг друга. Или возьмите ситуацию сохранения в играх. Пользователь, играющий на вашей страничке в «Угадай число» и желающий после 20-й попытки сохраниться, должен иметь возможность это сделать. Сделать же это проще всего на локальном диске. Но для этого нужен доступ к нему со стороны сценария игры. Выходит, что без доступа в некоторых случаях все-таки не обойтись.
VBScript предоставляет программистам и доступ к локальным дискам, и другие потенциально опасные возможности, но браузер обнаруживает опасные операторы в сценарии загружаемой странички и предупреждает пользователя об опасности.
Проиллюстрирую работу VBScript с локальным диском на одном-единственном примере. Пусть ваша страничка посвящена разведению слонов в Антарктиде J и она настолько интересна J, что побывавший на ней снова и снова туда возвращается. Вставим на страничку сценарий, единственная цель которого – напомнить пользователю, сколько раз он был на этой странице. Внешний вид странички после открытия вы видите на Рис. 23.5.
Рис. 23.5
Идея сценария такова. При первом открытии страницы на данном компьютере сценарий выдает на страницу сообщение "Вы на этой страничке ни разу не были", создает на локальном диске в корне диска С файл INFORMAT.TXT и записывает в него значение счетчика посещений – число 0.
При каждом открытии страницы сценарий ищет в корне диска С файл INFORMAT.TXT и если находит, то считывает с него значение счетчика, увеличивает его на 1 и отображает на странице в виде «Вы здесь были 5 раз». Если же файл не найден, сценарий делает вывод, что на этом компьютере страница еще не открывалась, и делает то, что я описал в предыдущем абзаце.
Вот HTML-документ нашей страницы со включенным в него сценарием:
<html>
<h2>Кое-что о разведении слонов в Антарктиде</h2>
<script language="VBScript"><!--
Dim objFs 'Объект - Файловая система локального диска
Dim objFile 'Объект - Файл
Dim sAdres 'Переменная - Адрес файла на диске
Dim intSchetchik 'Переменная - счетчик посещений страницы
sAdres="c:\INFORMAT.TXT"
Set objFs = CreateObject ("Scripting.FileSystemObject")
If objFs.FileExists (sAdres) Then
Set objFile = objFs.OpenTextFile(sAdres, 1)
intSchetchik = objFile.ReadLine
intSchetchik = intSchetchik + 1
Document.Write "Вы здесь были " & intSchetchik & " раз"
Else
Document.Write "Вы на этой страничке ни разу не были"
intSchetchik = 0
Set objFile = objFs.CreateTextFile (sAdres)
End If
objFile.Close
Set objFile = objFs.OpenTextFile(sAdres, 2)
objFile.WriteLine (intSchetchik)
objFile.Close
Set ObjFs = Nothing
--></script>
</html>
Пояснения: Прочтите строки объявлений. Далее рассмотрим строку
sAdres = "c:\INFORMAT.TXT"
Она задает адрес и имя текстового файла на локальном диске, в котором сценарий будет хранить счетчик посещений. Строка
Set objFs = CreateObject ("Scripting.FileSystemObject")
создает экземпляр объекта Файловая система. С этого мгновения вступают в действие меры безопасности. На экране компьютера, читающего вашу Web-страницу, возникает сообщение (Рис. 23.6), которое предупреждает пользователя, что программы на этой страничке могут быть опасными и не рекомендует разрешать их выполнение.
Рис. 23.6
У пользователя еще есть возможность нажать на No. Мой совет прост: Если эта страничка не принадлежит вашему самому надежному другу – жмите No.
Теперь рассмотрим строку
If objFs.FileExists (sAdres) Then
Здесь используется метод FileExists объекта objFs, который определяет, существует ли файл по указанному адресу sAdres. Смысл строки такой: Если файл c:\INFORMAT.TXT существует, то …
Строка
Set objFile = objFs.OpenTextFile(sAdres, 1)
открывает объект – текстовый файл – для чтения (потому что 1). Строка
intSchetchik = objFile.ReadLine
считывает из него строку и присваивает счетчику. Следующая строка увеличивает счетчик на 1, а строка
Document.Write "Вы здесь были " & intSchetchik & " раз"
записывает на страничку указанный текст.
Из дальнейших строк поясню следующие. Строка
Set objFile = objFs.CreateTextFile (sAdres)
создает на диске файл по указанному адресу. Строка
objFile.Close
закрывает файл, независимо от того, какая ветвь оператора If выполнялась – Then или Else. Строка
Set objFile = objFs.OpenTextFile(sAdres, 2)
открывает файл для записи (потому что 2). Строка
objFile.WriteLine (intSchetchik)
записывает в файл значение счетчика. Строка
Set ObjFs = Nothing
освобождает память компьютера от объекта Файловая система.