Приемы безопасного программирования веб-приложений на PHP
Данная статья не претендует на роль всеобъемлющего руководства на тему “как сделать так, чтоб меня никто не поломал”. Так не бывает. Единственная цель этой статьи - показать некоторые используемые мной приемы для защиты веб-приложений типа WWW-чатов, гостевых книг, веб-форумов и других приложений подобного рода. Итак, давайте рассмотрим некоторые приемы программирования на примере некоей гостевой книги, написанной на PHP.
Дальше »
Развитие объектной ориентированности PHP
Одной из главных составляющих планируемой 5-й версии PHP станет Zend Engine 2.0, поддерживающий совершенно новую модель объектно-ориентированного программирования. Эта статья описывает развитие поддержки объектно-ориентированного программирования в PHP, включая новые возможности и изменения, запланированные в PHP 5.
Дальше »
Графический счётчик на PHP
Создавая текстовый счетчик, мы ограничены свойствами текста в браузере. Если же Вы хотите чегото из ряда вон выходящего, удовлетворяющего Вашему полету фантазии, то Вам подойдет как раз описываемая тема.
Данный пример демонстрирует работу простого графического счетчика. По функциональности он совершенно идентичен текстовому счетчику.
Для работы этого счетчика необходимо создать графическое изображение, которое послужит базой для счетчика.
Это изображение надо сохранить под именем counter.png
В скрипте использована библиотека GD, перед тем как пользоваться этой библиотекой, узнайте у хостера, подключена ли эта библиотека. Теперь сам скрипт:
<?php
$dat_file="counter.dat"; // Файл счетчика
$log_file="counter.log"; // Файл списка IP
// Открывем файл счетчика и считываем текущий счет
// в переменную $count
$f=fopen($dat_file,"r");
$count=fgets($f,100);
fclose($f);
$count=ereg_replace(" ","",$count); // Удаляем символ конца строки
$count++; // Увеличиваем счетчик
// Записываем данные обратно в файл
$f=fopen($dat_file,"w");
fputs($f,"$count ");
fclose($f);
// Создаем новое изображение из файла
$im = ImageCreateFromPNG('counter.png');
// Назначаем черный цвет
$black = ImagecolorAllocate($im,0,0,0);
// Выводим счет на изображение
Imagestring($im,1,5,20,$count,$black);
// Выводим изображение в стандартный поток вывода
Header("Content-type: image/png");
ImagePng($im);
// Записываем IP посетителя
$f=fopen($log_file,"a+");
$ip=getenv("REMOTE_ADDR");
fputs($f,"$ip ");
fclose($f);
?>
Для работы этого скрипта необходимо создать два файла, для ведения счета и для списка IP. В файле счета необходимо установить начальное значение счетчика, сделать это можно в любом текстовом редакторе.
Для вывода счётчика в html используйте :
<IMG src="counter.php" WIDTH="88" HEIGHT="31" BORDER=0>
Вот вам и готов счётчик
Скрипт формы обратной связи на PHP v3.0

Рад вам представить новую версию скрипта формы обратной связи. В данной версии были сделаны следующие изменения, для корректной работы скрипта почти на всех хостинг площадках:
-Скрипт теперь работает даже, если registr_global=off, что очень хорошо(безопасность выше)
-Немного переписан скрипт
-Таблица стилей css вынесена в отдельный файл
-В файл config Добавлена новая переменная $statusSuccess = “”;
-Теперь ошибки, например: Введите свое имя выделяются красным цветом, а удачная отправка письма обозначается зеленным цветом
-Немного переписана проверка captcha(защитного кода)
Обо всех найденных ошибках в работе скрипта пожалуйста пишите в комментариях. Также свои предложения насчёт улучшения тоже пишите в комментариях.
Размер архива со скриптом: 158kb
Автор скрипта: FlashRipper
Главное примечание: Скрипт качайте только с официального сайта, т.к на других сайтах в архив могут положить специально испорченный код или еще что-нибудь плохое. Так как заметил в сети много испорченных архивов с моим скриптом.
Если вы хотите отблагодарить меня(за скрипт), то вы можете это сделать по средствам WebMoney, буду рад любой сумме. Также вы можете писать в комментариях к платежу ваше имя и ваш сайт, все имена будут опубликованы на этой странице, а также ссылка на ваш сайт:
Реквизиты WebMoney
Z908077733771
R390179813821
Спасибо, вскорем выйдет новая версия скрипта. Если вы хотите разместить на своем сайте данный скрипт, оставьте все без изменения, тоесть оставьте активную ссылку на домашнюю страницу автора, а также в дистрибутив ничего не добавляйте.

Как и обещял новая версия. В ней был исправлен всего лишь небольшая часть кода, а именно теперь все настройки скрипта храняться в отдельном файле config.php
Демо можно посмотреть здесь(откроется в новом окне)
Автор: FlashRipper
Размер архива: 513kb
Скачать архив
Здесь я просто приведу пример кода, который выводит captcha примерно такой формы
Вот сам код:
<?php
session_start();
header(”Content-Type: image/jpeg”);
get_checkcode_picture($_SESSION[check_code]);
die;function get_checkcode_picture($code){
$img=imagecreatetruecolor(50, 30);
$x1=0;
$x2=60;
$y1=rand(0, 30);
$y2=rand(00, 30);
$textcolor = imagecolorallocate ( $img , 255, 255, 255);
imageline($img, $x1, $y1, $x2, $y2, $textcolor);
$x1=rand(0, 50);
$x2=rand(0, 50);
$y1=0;
$y2=30;
imageline($img, $x1, $y1, $x2, $y2, $textcolor);
imagestring($img, 4, 10, 7, $code, $textcolor);
imagejpeg($img);
}
?>
Если подойти с творческим подходом, можно встроить такую captcha в форму отправки письма на e-mail с сайта. Напоминаю здесь только приведен код, который будет выводить примерно такую captcha(см. рисунок).
В данной версии был убран только визуальный редактор, никаких важных функций убрано не было.
Демо можно посмотреть здесь(откроется в новом окне)
Размер архива: 25kb
На сегодняшний день музыкальные магазины online, наподобие Musikload[1], становятся все более распространенными и пользуются бешенной популярностью. В этой статье мы расскажем как можно читать мета-информацию mp3-файла средствами PHP, что поможет вам в создании каталога музыки. Это очень просто, поддержка базы данных не нужна.
Откуда знает MP3-Player, например Winamp информацию об исполнителе или названии композиции, которую он проигрывает? Может быть, он сам каким-то чудным образом узнает название песни и альбома? Нет, здесь нет никакого волшебства! Подобная информация содержится в самих файлах. Музыкальные файлы других форматов таких как WMA или Ogg Vorbis также содержат подобную информацию, но здесь речь пойдет о файлах в формате mp3.
Дальше »
PHP.Первые шаги. Действительно легкая смена дизайна
NAS, Webscript.ru
Предупреждение
Данный текст ни на что не претендует. Надеюсь, что-то из описанного поможет Вам в освоении PHP и использовании его в повседневной практике.
Сразу оговорюсь, что я не только мало смыслю в программировании вообще, но и в PHP в частности. Соответственно и статья писалась для такой же аудитории. Ламер -ламеру. Или дилетант-дилетанту, как угодно. Большинство информации можно найти в форумах или на англоязычных сайтах.
Краткая аннотация:
После прочтения статьи вы сможете использовать только один файл для внесения в него изменений дизайна и навигации. Содержимое сайта при этом не нужно будет даже трогать!
Легкая смена дизайна
Итак, у вас уже что то есть. Какой то информационный web проект. Серия статей, он-лайн книга, просто страничка.
Хорошо, если у вас все в порядке с проектом на диске. Каждый раздел в своем каталоге, скрипты отлажены и жужжат, дизайн закреплен навеки.
У меня такого не было.
То есть порядок то был, а вот с дизайном - полный завал. Плюс я постоянно что то прикручиваю, балуюсь с содержимым. Что же я сделал?
Мне надо было : легко и безболезненно менять дизайн, навигацию, ссылки и баннеры, вставлять новые разделы и все это должно проходить с минимальными телодвижениями .
Я вовсю использовал SSI. Вы знаете что это такое ? Грубо говоря, у меня был шаблон хтмл, в него я вставлял меняющиеся элемнты типа меню навигации, баннеров и так далее. Но само содержание этого уже наполненного шаблона - не менялось! То есть для каждой странички в шаблон вставлял информацию, и сохранял на сервере. После этого, чтобы изменить цвет таблицы, мне пришлось бы заново делать шаблон, выдергивать информацию из старого и вставлять в новый. Можно, конечно, использовать CSS, фреймы, что там еще. Но меня все это по разным причинам не удовлетворяло
Еще, как выход, мне мерещилось использование программы, которая заменяла бы во всех файлах одни строки на другие. Ни то, господа, ни то! Если что то сложное в плане хтмл, да еще написанного вручную, то все это адский труд. Только не подумайте, что я писал на хтмл.
Бывало, конечно, несколько строк накропаю, но я же ленивый. За меня все делало FrontPage 98. Охаиваемое всеми чудо.
Что же делать с этой кучей файлов с расширением *.shtml и невозможностью сменить дизайн так, то бы это не отозвалось болезненным перелопачиванием всей этой кучи? Я ленив, и в своих поисках я набрел на лучшее решение - PHP.
Возможность, которую он дает - один хтмл-шаблон плюс файлы только с содержимым раздела я очень быстро оценил!
Быстренько и монотонно освободив свои shtml ки от разных табличек, вставок, картинок, и другой мутотени я вытер пот со лба. Убрал расширения файлов. Дело в том, что мой хостер хитро сделал-поздней ночью их скрипт вставляет во все файлы с расширением *.html код баннера.
Вот оно ! Стройный ряд файлов выстроился перед моим взором. Умытые, похудевшие и почистившиеся они требовали новой одежки-дизайна.
Я сваял новый шаблон: index.php3.
<HTML>
<HEAD>
</HEAD>
<BODY>
<?php
function foo ($in) {
< !–если не вызывается просто index.php3 то происходит вставка вызываемого файла–>
if ($in != “”) {$out=$in;}
< !– если происходит вызов index.php3 без имени файла, то по умолчанию, вставляется файл main–>
else {$out=”main”;} return $out;}?><!–Мой дизайн и навигация–>
<!–Вызов функции с аргументом - именем файла, запрашиваемым пользователем–>
<?php include (foo($QUERY_STRING)); ?><!–Мой дизайн и навигация–>
</BODY>
</HTML>
Теперь я вызываю странички так
http://myserver.ru/index.php3?news
http://myserver.ru/index.php3?links
http://myserver.ru/index.php3?about
А можно и просто
http://myserver.ru/?news
http://myserver.ru/?links
http://myserver.ru/?about
Отсутствие расширений не является критическим требованием. Если у вас набор файлов с расширениями, это не послужит препятствием. Можно вызывать для вставки любые файлы в каталоге раздела.
Например :
http://myserver.ru/index.php3?news.shtml
http://myserver.ru/index.php3?links.txt
http://myserver.ru/index.php3?about.htm
Конечно, если надо вносить изменения в содержимое (новости подновить, новый линк добавить), то приходится открывать файлы news и link и уже там что-то менять.
Минусы подхода:
1) Таги <meta> и <title> распространяются на все страницы раздела, объединенных общим index.php3.
2) Если поисковая система некорректно обрабатывает сайты, использующие PHP, то пользователь может и не найти Ваш сайт.
Введение в PHP
“CHIP / Россия”
Как и любую вещь в этом мире, сайт можно автоматизировать. И не просто автоматизировать, а дать самому себе возможность, больше никогда не заглядывать в его FTP-недры, и лишить процесс администрирования веб-сайта большинства затрачиваемых физических усилий. Язык PHP в дает, просто, огромные возможности по созданию “движка” для веб-сайта, и при этом, его синтаксис очень прост. Впрочем, обо всем по порядку.
Что, собственно, требуется для создания хорошей системы администрирования веб-сайта? Совсем немного – сервер, который бы разрешал использование PHP-скриптов, и знание самого языка PHP, на котором мы и будем писать “информационный двигатель”.
Так же, желательно иметь в своем распоряжении сервер Apache (http://apache.org), и интерпретатор PHP (http://www.php.org) - и то и другое, распространяется совершенно бесплатно, и свободно доступно для загрузки из сети.
Итак, начнем?
Введение в PHP
Сам язык программирования PHP, без интернета существовать не может. Он попросту не нужен на обычном компьютере – второй Windows на нем не напишешь, и ничего вразумительного и полезного – тоже. Разве что, чат для внутренней сети – это да. Но за то в интернете, PHP считается одним из самых мощных языков, который стоит на одной линейке, с тем же Perl’ом.
PHP является удобным, и в то же время достаточно простым языком. И уж если вам доводилось писать программы на С или C++, c изучением PHP у вас и вовсе не возникнет трудностей, так как синтаксис очень похож.
Любая (даже самая маленькая) программа на PHP, должна начинаться с оператора
<?php
и заканчиваться оператором
?>
Если эти операторы не будут проставлены в начале и конце программы, сервер который будет обрабатывать запросы, не распознает код.
В PHP, как и в любом другом языке программирования, присутствует возможность вставки комментариев – без этого никак. Комментарии порой выручают самого же разработчика, не говоря уже о пользователях, которые возможно, будут конфигурировать готовую программу - они не дают запутаться в структуре программного кода, и делают его более читаемым. Текст комментариев в программах на PHP существует двух видов – однострочный, и многострочный. Соответственно, существует и два типа указания комментариев. Пример:
/* многострочный
комментарий */
и
// однострочный комментарий
В комментариях может находиться любой текст, будь то даже код PHP, или “китайские колы”. В любом случае – сервер при обработке программы опускает все строки, что отделены символами комментариев.
Переменные в программах на PHP, отделяются символами $. Например, в программе:
$name = “Мир”;
переменная $name будет равна значению Мир. А вывести значение переменной на экран можно двумя способами:
echo $name;
и
print $name;
Ну, а код программы, которая выводила бы что-нибудь, вроде “Привет Мир!”, будет выглядеть вот так:
$hello = “Привет”;
$spacer = ” “;
$name = “Мир”;
$din = “!”;
echo $hello;
echo $spacer;
echo $name;
echo $din;
Причем, как вы, наверное, уже догадались, имена переменных вещь совершенно не подчиненная логике – например, имя переменной $din совершенно не соответствует ее значению. Главное, не перепутать имена переменных при построении программы.
Основными элементами любой программы, являются переменные. Их иногда бывает даже больше чем исполняемого кода программы. А когда делается очень большой скрипт, который содержит большое количество файлов, часто приходится использовать одну и ту же переменную в каждом файле. А если значение этой переменной вдруг понадобится изменить, тогда придется перелопачивать каждый файл, редактируя его? Неплохо было бы, если бы можно было вывести все переменные в один конфигурационный файл, не так ли? Так и сделаем. На примере нашей программы, вынесем все переменные в файл configuration.php3. А в текущем файле, оставим только программу, которая теперь превратится в вот такой код:
require(“configuration.php3”);
echo $hello;
echo $spacer;
echo $name;
echo $din;
Теперь наша программа ищет в самой себе запрашиваемые переменные, а если таковых найдено не будет, она отправится в путешествие на указанный в первой строчке файл.
Но главным преимуществом PHP, является возможности вставки кода в web-страницу, наряду со стандартным HTML-кодом. Это делает язык PHP очень гибким, и в то же время необычайно удобным. В этом, он может соперничать разве что с технологией ASP (Active Server Pages), но она, в отличии от рассматриваемого языка, может использоваться только на серверах, базирующихся на основе Windows NT.
Первый движок
Теперь вы уже имеете представление о PHP, и можно сделать что-то более полезное, нежели программу, которая выводит банальное “Привет Мир!”. Займемся разработкой нашего движка.
Для начала, напишем программу, которая будет добавлять некоторые статьи в базу текстов, и выводить любой из указанных файлов в одном шаблоне. Все это выглядит очень сложным, но на самом деле очень просто. Сначала напишем на HTML форму, откуда введенные данные будут передаваться программе на обработку:
<form method=”POST” action=”add_text.php3″>
<p>Название текста:<br>
<input type=”text” name=”text_name” size=”20″><br>
Текст:<br>
<textarea rows=”12″ name=”text” cols=”53″></textarea><br>
<input type=”submit” value=”Submit” name=”Submit”></p>
</form>
Теперь напишем программу, которая введенные в форму данные обработает должным образом, и сохранит в папку texts:
<?php
$filename = “$name”; /* указываем с каким именем будет сохранен файл. Именем файла, будет служить название текста, введенное в соответствующее поле формы */
$fp = fopen(”texts/$text_name.txt”,”w+”) /* открываем файл, а если он не найден, директивой “w+” указываем что его надо создать */
fputs($fp, “<b>$text_name</b><br>$text”); /* сохраняем с учетом HTML-форматирования текст в базу текстов */
fclose($fp); /* закрываем файл по завершению всех работ */
?>
Вот и все – эта программа сохранит все введенные в форму данные. Теперь нам нужно их вывести. Здесь на помощь тоже приходит PHP. Зачем же нам создавать огромное количество веб-страниц, для каждого документа хранящегося в базе текстов, если любой из них можно вывести в одном шаблоне?
Создаем HTML-файл, и в месте, где предполагается вывод текстов, пишем следующий PHP-код:
<?
$filename = “read/”.$open .’.txt’; // открываем указанный текст
if (file_exists ($filename)): // если такой файл существует…
$fd = fopen ($filename, “r”); // …открываем его…
$showtext = fread ($fd, filesize ($filename)); // и считываем в переменную $showtext
fclose ($fd); // закрываем файл
echo ($content); // выводим текст если файл найден, а если нет…
else: echo (”Указанный текст отсутствует в базе текстов.”); // пишем что такого файла нету
endif; // конец цикла, и конец программы
?>
Все так – подумает читатель – но как же указать файл? Очень просто. Предположим, что приведенный выше код, находится в файле read.php3. В строке броузера, просто пишем read.php3?open=имя_файла_без_расширения.
Думаю, вряд ли кто-то станет спорить, что такой способ очень удобен. Интересно, что в файле может храниться не обязательно текст – это может быть и HTML-код, и какой-то другой скрипт… словом, все, что только может разобрать броузер или сервер.



(3 голосов, средний: 3.33 из 5)

