Иллюстрированный самоучитель по PHP

Гостевая книга

Открываемый файл может располагаться и на удаленном сервере – в этом случае он будет доступен только для чтения независимо от параметров открытия файла. Путь к файлу в таком случае следует указывать полностью – начиная с 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;
  • (двойная кавычка) заменяется на сочетание символов &quot;
  • < (меньше) заменяется на сочетание символов &lt /;
  • > (больше) заменяется на сочетание cимволов &gt;

Сочетания символов "&аmp;", "&quot;", "&lt;", "&gt;" отображаются в браузере как амперсанд, двойная кавычка, знаки "меньше" и "больше" соответственно.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.