Гостевая книга
Открываемый файл может располагаться и на удаленном сервере – в этом случае он будет доступен только для чтения независимо от параметров открытия файла. Путь к файлу в таком случае следует указывать полностью – начиная с http://muftp://.
(В нашем случае можно также использовать параметр а+ – различие этих двух параметров, заключающееся в том, что fopen с параметром w+ очищает все содержимое открываемого файла, a fopen с параметром а+ нет, несущественно, так как файл все равно создается новый):
$hd1 = fopen("$dirct/$otznam", "w+");
Проводить операции записи или чтения из файла средствами РНР можно только через дескриптор этого файла – некое "внутреннее имя", "поток вывода данных". Именно дескриптор, а не имя файла, придется указывать в функциях, совершающих эти действия. Дескриптор создается при открытии файла функцией fopen, которая его и возвращает – в данном случае он записывается в переменную Shdl.
Теперь запишем в открытый файл отзыв (находящийся в переменной Sotziv – именно такое имя имело поле ввода отзыва в форме для его ввода), предварительно убрав из него специальной командой, возможно, содержащиеся в нем тэги HTML и команды РНР – дабы обезопасить сайт от действий злоумышленников:
fwrite($hdl,strip_tags($otziv));
Примечание
Команда fwrite (дескриптор файла, записываемая в файл строка) записывает указанную во втором параметре строку в файл, дескриптор которого указан в ее первом параметре.
То место в файле, с которого совершается чтение данных и в которое осуществляется запись, называется указателем файла. (Если файл представить как тетрадь, то указатель – это открытая страница, вернее, номер открытой страницы.) При открытии файла командой fopen с параметрами r, r+, w или w+ указатель файла ставится на его начало, а при открытии с параметром а или а + – в самый конец.
При записи в файл командой fwrite в том случае, если указатель находится не в конце файла, записываемые данные пишутся поверх имеющихся. Если же файл был открыт командой fopen с параметром а или a +, то вне зависимости от позиции указателя запись в файл идет в его конец, т. е. – после всех данных файла.
Функция strip tags (строка) вырезает из строки, указанной в ее параметрах, все тэги – т. е. "все в угловых скобках", как HTML, так и РНР, ASP и другие, возвращая эту строку с вырезанными тэгами. Если какие-либо тэги вырезать не следует, то их можно перечислить во втором параметре данной функции – команда:
strip_tags (строка, ' <a><b><ixu> ');
…вырежет из указанной в первом параметре строки все тэги, кроме <а>, <Ь>, </>, <и>, т. е. оставит посетителю возможность оформлять ими свой текст.
В результате злоумышленник не сможет разместить в гостевой книге ни HTML-текст, ни PHP-программу, а значит, не сможет ни испортить дизайн сайта, ни выполнить на нем какие-либо свои команды РНР.
Вместо полного удаления всех тэгов из отзыва можно провести конвертацию содержащихся в нем специальных символов – угловых скобок, кавычек, амперсандов – в их эквиваленты, просто отображающие эти символы на экране. Это делает команда htmlspecialchars:
fwrite($hdl, htmlspecialchars($otziv));
Примечание
Функция htmlspecialchars (строка) конвертирует все "специальные символы" в указанной в ее параметре строке в так называемые "мнемоники HTML", которые отображаются браузером на странице как эти самые символы. Конвертация происходит следующим образом:
- & (амперсанд) заменяется на сочетание символов &аmp;
- (двойная кавычка) заменяется на сочетание символов "
- < (меньше) заменяется на сочетание символов < /;
- > (больше) заменяется на сочетание cимволов >
Сочетания символов "&аmp;", """, "<", ">" отображаются в браузере как амперсанд, двойная кавычка, знаки "меньше" и "больше" соответственно.