Все для Веб мастера и создания сайта

Блог о дизайне и программировании. Помощь разработчикам сайтов и веб дизайнерам. Статьи по программированию, оптимизации и раскрутке сайта. Все для Adobe Photoshop, уроки графики и веб дизайна, иконки, шрифты, исходники и.т.п

Данная статья не претендует на роль всеобъемлющего руководства на тему “как сделать так, чтоб меня никто не поломал”. Так не бывает. Единственная цель этой статьи - показать некоторые используемые мной приемы для защиты веб-приложений типа WWW-чатов, гостевых книг, веб-форумов и других приложений подобного рода. Итак, давайте рассмотрим некоторые приемы программирования на примере некоей гостевой книги, написанной на PHP.
Дальше »

Одной из главных составляющих планируемой 5-й версии PHP станет Zend Engine 2.0, поддерживающий совершенно новую модель объектно-ориентированного программирования. Эта статья описывает развитие поддержки объектно-ориентированного программирования в PHP, включая новые возможности и изменения, запланированные в PHP 5.
Дальше »

Создавая текстовый счетчик, мы ограничены свойствами текста в браузере. Если же Вы хотите чегото из ряда вон выходящего, удовлетворяющего Вашему полету фантазии, то Вам подойдет как раз описываемая тема.

Данный пример демонстрирует работу простого графического счетчика. По функциональности он совершенно идентичен текстовому счетчику.

Для работы этого счетчика необходимо создать графическое изображение, которое послужит базой для счетчика.

Это изображение надо сохранить под именем 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>

Вот вам и готов счётчик

Здесь я просто приведу пример кода, который выводит captcha примерно такой формы
captcha.PNG
Вот сам код:

<?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(см. рисунок).

Если вам на сайте нужно вывести запись такого содержания:
Сегодня: Среда, 24 Октября 2007 г.
То пожалуйста читайте эту статью. Итак, для начало создайте файл index.php и вставьте в него следующий код:

<htmL>
<head>
<title>Делаем вывод даты на PHP</title>
</head>
<body>
<?php

$month[1] = “Январ”;
$month[2] = “Феврал”;
$month[3] = “Март”;
$month[4] = “Апрел”;
$month[5] = “Ма”;
$month[6] = “Июн”;
$month[7] = “Июл”;
$month[8] = “Август”;
$month[9] = “Сентябр”;
$month[10] = “Октябр”;
$month[11] = “Декабр”;
$month[12] = “Январ”;

$day[0] = “Воскресенье”;
$day[1] = “Понедельник”;
$day[2] = “Вторник”;
$day[3] = “Среда”;
$day[4] = “Четверг”;
$day[5] = “Пятница”;
$day[6] = “Суббота”;

$dnum = date(”w”);
$mnum = date(”n”);
$daym = date(”d”);
$year = date(”Y”);

$textday = $day[$dnum];
$monthm = $month[$mnum];

if ($mnum==3||$mnum==8)
{
$k=”а”;
}
else
{
$k=”я”;
}
echo “Сегодня: $textday, $daym $monthm$k $year г.”;
?>
</body>
</html>

Все на этом разработка скрипта закончена, теперь вам осталось его проверить!

Дополнительно:

Например, у вас есть сайт и на сайте есть мини блок где вы показываете картинки, и вы постоянно(например: раз в день) обновляете html файл в который каждый раз вставляете новую картинку. Согласитесь это очень не удобно, ну так вот в данном примере мы решим эту проблему. Пример вы можете посмотреть здесь , потом обновите страницу, для этого нажмите F5 и вы увидите, что картинка стала совершенно другой.
Для начала создайте файл index.php и вставьте в него следующий код:

<?
$imgdir=”img/”;

$ext=”jpg”;

$mode=2;

$error=”Мало картинок.”;

$errorfile=”error/error_001.jpg”;

$NoCacheMode=1;

function NoCache()
{
header(”Cache-Control: no-store, no-cache, must-revalidate”);
header(”Pragma: no-cache”);
header(”Last-Modified: “.gmdate(”D, d m y H:i:s”).”GMT”);
}
function FileCount($imgdir)
{
$files=0;
$cfile=opendir(”$imgdir”);
while(($e=readdir($cfile))!==false)
{
$files++;
}
$files-=3;
return $files;
}

function filetest($ranfile)
{global $imagelist;
$status = false;
if (IsSet($imagelist))
{
foreach ($imagelist as $occu)
{
$occu=trim($occu);
if ($ranfile==$occu)
{
$status=true;
return $status;
}
}
}
return $status;
}

function ImgWrite($ranfile)
{global $imagelist;
$ranfile=trim($ranfile);
$imagelist[]=$ranfile;
}

function ImgRandom($files)
{global $ext, $imgdir, $imgcounter, $mode, $error, $errorfile;
$ranfile= mt_rand(1, $files);
$ranfile= sprintf(”%03d”, $ranfile);
if (!filetest($ranfile))
{
ImgWrite($ranfile);
Echo “<img src=\”$imgdir$ranfile.”.$ext.”\”>”;
$imgcounter++;
}
else
{
if ($imgcounter<$files)
{
ImgRandom($files);
}
else
{
if ($mode==1)
{
Echo $error.”<br>”;
}
elseif ($mode==2)
{
Echo “<img src=\”$imgdir$errorfile.”.$ext.”\”>”;
}
}
}
}

if ($NoCacheMode==1)
{
NoCache();
}
$imgcounter=0;
print “<title>Случайный вывод картинок</title><br>”;
ImgRandom(FileCount($imgdir));
?>

Разберём код немного подробнее

$imgdir=”img/”;

Данная строчка отвечает откуда будут грузится картинки, в данном случае картинки будут загружаться из папки img.
———————————

$ext=”jpg”;

Данная строчка отвечает за расширение картинок, которые будут выводится, в данном случае картинки будут грузится только с расширением jpg
———————————

$error=”Мало картинок.”;

$errorfile=”error/error_001.jpg”;

Данная строчка отвечает за то, что если в папке img не будет ни одной картинки, на экран пользователя будет выведена картинка, можете в данную папку поместить свою собственную картинку.

Теперь когда будете загружать картинки в папку img не забудьте переименовать все картинки в названия такого типа 001.jp; 002.jpg; 003.jpg; 010.jpg и.т.д
Папку img надо класть в ту директорию куда вы положили файл index.php или переназначьте путь откуда будут грузится картинки.

Дополнительно:

Если вам нужна форма для загрузки файлов с компьютера к себе на сервер, то этот урок(пример) для вас. Создайте файл index.php и вставьте в него следующий код:

<?
$path=GetCWD().”/files”;
if(!file_exists($path))
die(”<b>Пожалуйста, создайте папку <font color=red>”.$path.”</font> и <a href=?>повторите попытку загрузить файл</a>.</b>”);
if(empty($_FILES['UserFile']['tmp_name']))
echo
“<form method=post enctype=multipart/form-data>
Выберите файл: <input type=file name=UserFile>
<input type=submit value=Отправить>
</form>”;
elseif(!is_uploaded_file($_FILES['UserFile']['tmp_name']))
die(”<b><font color=red>Файл не был загружен! Попробуйте <a href=?>повторить попытку</a>!</font></b>”);
else
{
if(@!copy($_FILES['UserFile']['tmp_name'],$path.chr(47).$_FILES['UserFile']['name']))
die(”<b><font color=red>Файл не был загружен! Попробуйте <a href=?>повторить попытку</a>!</font></b>”);
else
echo
“<center><b>Файл \”<font color=red>”.$_FILES['UserFile']['name'].”\”</font> успешно загружён на сервер!</font></b></center>”.
“<hr>”.
“Тип файла: <b>”.$_FILES['UserFile']['type'].”</b><br>”.
“Размер файла: <b>”.round($_FILES['UserFile']['size']/1024,2).” кб.</b>”.
“<hr><center><a href=?>Загрузить ещё один файл!</a></center>”;
}
?>

Потом создайте папку files там где вы поместили файл index.php и поставьте папке files CHMOD равный 777 или 0777. Готово, теперь можете экспериментировать с дизайном и со всем остальным.

Скриншоты:

Дополнительно:

Во многих WEB приложениях требуется подсветить php код, такая задача возникает при динамическом отображении php скриптов на странице сайта, в форумам посвящённых php и.т.п. Подсветка осуществляется при помощи стандартной функции php: highlight_string()
Итак, создайте файл, например index.php и вставьте в него следующий код:

<html>
<head>
<title>Подсветка кода с помощью стандартной функции PHP</title>
</head>
<body>
//PHP Скрипт
<?php
$code = ‘<?php
if(!$flag)
{
echo(”FlashRipper”);
$var = 1;
}
else break;
?>’;

highlight_string($code)
?>
</body>
</html>

Дополнительно:

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

Создайте файл code.php, который будет генерировать число, которое пользователю нужно будет ввести в поле. И вставьте в него следующий код:

<?php
Header(”Pragma: no-cache”);
$fp = fopen(’code.txt’,'w’);
fclose($fp);
$fp = fopen(’code.txt’,'a’);
$code=”;
for ($i=1;$i<5;$i++)
fwrite($fp,mt_rand(0,9));
fclose($fp);
$fp = fopen(’code.txt’,'r’);
$code = fread($fp,4);
fclose($fp);
$pic = ImageCreateFromgif(”image.gif”);
Header(”Content-type: image/gif”);
$color=ImageColorAllocate($pic, 0, 0, 0);
ImageString($pic,5,70,60,$code,$color);
Imagegif($pic);
ImageDestroy($pic);
?>

Затем создайте файл code.txt в который будет записываться и читаться код. В него ничего не надо вставлять. Когда загрузите его к себе на сервер поставьте ему CHMOD 777 или 0777.
После этого нам нужна форма из, которой будет происходить отправка письма на e-mail, для этого создайте файл, например: antispam2.php и вставьте в него следующий код:

<?php
Header(”Pragma: no-cache”);
echo “<form action=antispam2.php method=POST>”;
echo “<textarea rows=4 cols=40 name=message>Текст письма</textarea>”;
echo “<p><img src=code.php><p>”;
echo “Введите цифры с картинки: <input type=text value=’0000′ name=code><p>”;
echo ‘<p><input type=\’submit\’>’;
echo ‘</form>’;
if (isset($_POST['message']))
{
$fp = fopen(’code.txt’,'r’);
$realcode = fread($fp,4);
fclose($fp);
if ($_POST['code'] === $realcode)
{
mail(’flashripper@yandex.ru’,'FlashRipper.Net’,$_POST['message']);
echo “Ваше письмо было успешно отправлено”;
$fp = fopen(’code.txt’,'w’);
for ($i=1;$i<5;$i++)
fwrite($fp,mt_rand(0,9));
fclose($fp);
}
else
echo “<br>Неверный код!<br>”;
}

?>

Осталось только вставить изображение на котором будет выводится код. Я взял вот такое изображение(первое попавшиеся мне под руку), взять его можно здесь. Изображение должно быть с расширением gif, если вам нужно другое расширение или название, вам нужно открыть файл code.php и найти там строчку

$pic = ImageCreateFromgif(”image.gif”);
Header(”Content-type: image/gif”);

И соответственно поменять на нужные вам параметры
image.gif - название файла
image/gif - поменяйте только второе значение
Не забудьте картинке тоже поставьте CHMOD 777 или 0777
В этом примере вместо gif файла у меня png файл:

$pic = ImageCreateFromgif(”image.png”);
Header(”Content-type: image/png”);

Дополнительно: