подключение к mysql

<?php
/*
*Пример подключения к БД с установкой нужной кодировки
автор: nc_soft
*25.08.07
*/

$dblocation='localhost';
$dbname='имя базы';
$dbuser='имя юзера';
$dbpasswd='пароль';

//подключаемся
$dbcnx=mysql_connect($dblocation,$dbuser,$dbpasswd);

if (!$dbcnx)
die('база данных недоступна!');

//выбираем базу
mysql_select_db($dbname,$dbcnx);

//устанавливаем кодировку
mysql_unbuffered_query("SET `character_set_client` = 'utf8';"); 
mysql_unbuffered_query("SET `character_set_results` = 'utf8';");  
mysql_unbuffered_query("SET `collation_connection` = 'utf8_general_ci';");

/*
можно сохранить этот файл как mysql.php и подключать к файлам проекта, где требуется работа с БД
*/

?>
26 августа 2007, 00:13

email с любым обратным адресом

<?php
/*
*отправка письма с любым обратным адресом
*25.08.07
*/

if (!empty($_POST))
{
//От кого
$from=$_POST['from'];

//кому
$to=$_POST['to'];

//тема
$thm=$_POST['thm'];

//текст
$txt=$_POST['txt'];

//отправляем
mail($to,$thm,$txt,"From: <$from>\r\nContent-type:text/plain;charset=utf-8");

/*
*p.s Если внимательно рассмотреть заголовки в своем любимом почтовом клиенте, то такая подстава присекается довольно быстро
*/

header ('Location: '.$_SERVER['SCRIPT_NAME'].'?ok=1');
die();
}

if (isset($_GET['ok']))
echo '<p>письмо отправлено</p>';

//форма
?>
<form action="<?=$_SERVER['SCRIPT_NAME'];?>" method="post">
<p>
кому<br />
<input name="to" /><br />
от кого<br />
<input name="from" /><br />
тема<br />
<input name="thm" /><br />
текст<br />
<textarea name="txt" cols="20" rows="5"></textarea><br />
<input type="submit" value="отправить" />
</p>
</form>
26 августа 2007, 00:07

метод POST при помощи CURL

<?php
/*
*POST запрос при помощи CURL
*автор: nc_soft
*25.08.07
*/

//пост данные
$datastr='a=1&b=2';
//инициализируем сеанс curl (адрес обработчика)
$ch=curl_init("http://site.ru/request.php");

//включаем передачу данных методом POST
curl_setopt($ch, CURLOPT_POST, 1);

//настраиваем, чтобы сеанс выводился не в браузер, а в переменную
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

//указываем строку с  POST-данными
curl_setopt($ch, CURLOPT_POSTFIELDS, $datastr);

//выполняем запрос
$buf=curl_exec($ch);

//закрываем сеанс cURL
curl_close($ch);

//теперь можно вывести результат запроса, если это необходимо
echo $buf;
?>
25 августа 2007, 23:59

GET запрос при помощи CURL

<?php
/*
*GET запрос при помощи CURL
*автор: nc_soft
*25.08.07
*/


//инициализируем сеанс curl (адрес страницы)
$ch=curl_init("http://wen.ru");

//настраиваем, чтобы сеанс выводился не в браузер, а в переменную
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

//выполняем запрос
$buf=curl_exec($ch);

//закрываем сеанс cURL
curl_close($ch);

//теперь можно вывести результат запроса, если это необходимо
echo $buf;
?>
25 августа 2007, 23:58

подсветка php кода

<?php
/*
*подсветка кода
*автор: nc_soft
*25.08.07
*/

$num=30;
$i=100;
$rand='';
$mtrand='';
while ($i)
{
    $rand.=rand(0,100)."\n";
    $mtrand.=mt_rand(0,100)."\n";
    $i--;
}
//fwrite(fopen('rand.prn','w+'),$rand);
//fwrite(fopen('mtrand.prn','w+'),$mtrand);
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style type="text/css">
body {font-family:Arial, Helvetica, sans-serif; font-size:12px}
div.main {margin:1%}
div.code {border:1px solid black; background-color: #FFFFCC; padding:5px}
</style>
<title>Untitled Document</title>
</head>

<body>
<div class="main">
<div class="code">
<?
highlight_file('rand.php');
?>
</div>
</div>

</body>
</html>
25 августа 2007, 22:35

постраничная навигация

<?php
/*постраничная навигация
*автор: nc_soft
*25.08.07
*/

/*предположим, что у нас есть следующие данные:
$page=номер страницы
$all=общее количество выводимых единиц*/

$all=50; //для примера

//определяем номер страницы (если не задано, то естественно 1)
$page=(isset($_GET['page'])) ? (int)$_GET['page'] : 1;

//высчитываем общее число страниц (пусть разбивка по 5 элементов на страницу)
$num_pages=ceil($all/5);

//высчитываем с какой позиции надо выводить данные
$start=$page*5-5;

//обработка "дурацких" номеров страниц
if ($page > $num_pages || $page < 1)
{
    $page=1;
    $start=0;
}

//печатаем
echo '<p>';

for($pr = '', $i =1; $i <= $num_pages; $i++)
{
    echo $pr=(($i == 1 || $i == $num_pages || abs($i-$page) < 2) ? ($i == $page ? " [$i] " : ' <a href="'.$_SERVER['SCRIPT_NAME'].'?page='.$i.'">'.$i.'</a> ') : (($pr == ' ... ' || $pr == '')? '' : ' ... '));
}
echo '</p>';

//вот такая вот жесть :)

?>
25 августа 2007, 22:34

хранение изображений в mysql

<?php
/*
*хранение изображений в базе данных
*взято из книги "Головоломки на PHP для хакера"
*автор: http://softtime.ru
*25.08.07
*

//структура таблицы

CREATE TABLE image (
id_image int(11) NOT NULL auto_increment,
name tinytext NOT NULL,
content longblob NOT NULL,
PRIMARY KEY  (id_image)
) TYPE=MyISAM;

*/
?>
<form enctype='multipart/form-data' method=post>
<input type="file" name="image"><br>
<input type=submit value='Загрузить'>
</form>
<?php
// Число изображений на странице
$pnumber = 3;

// Устанавливаем соединение с базой данных

// Сетевой адрес MySQL-сервера
$dblocation = "localhost";
// Имя базы данных
$dbname = "book";
// Пользователь
$dbuser = "root";
// Его пароль
$dbpasswd = "";
// Устанавливаем соединение с базой данных
$dbcnx = mysql_connect($dblocation,$dbuser,$dbpasswd);
if (!$dbcnx) exit ("К сожалению, не доступен сервер MySQL : ".mysql_error());
// Выбираем базу данных
if (!@mysql_select_db($dbname,$dbcnx)) exit("К сожалению, не доступна база данных : ".mysql_error());

// Обработчик HTML-формы
if(!empty($_FILES))
{
    // Проверяем является ли переданный файл картинкой
    if(substr($_FILES['image']['type'],0,5) == 'image')
    {
        // Читаем содержимое файла
        $content = file_get_contents($_FILES['image']['tmp_name']);
        // Уничтожаем файл во временной директории
        unlink($_FILES['image']['tmp_name']);

        // Экранируем спец-символы в бинарном содержимом файла
        $content = mysql_escape_string($content);

        // Формируем запрос на добавление файла в таблицу
        $query = "INSERT INTO image VALUES(NULL, '".$_FILES['image']['name']."', '$content')";
        if(mysql_query($query))
        {
            // Осуществляем автоматическую перезагрузку страницы
            echo "<HTML><HEAD>
                <META HTTP-EQUIV='Refresh' CONTENT='0; URL=$_SERVER[PHP_SELF]'>
             </HEAD></HTML>";
        } else exit(mysql_error());
    }
}
?>

Для вывода файла можно воспользоваться таким скриптом:
<?php
// Устанавливаем соединение с базой данных
require_once("config.php");

// Провряем передан ли параметр id_image
// и является ли он целым числом, чтобы
// предотвратить SQL-инъекцию
if(!preg_match("|^[\d]+$|",$_GET['id_image']))
{
    exit("Недопустимый формат URL-запроса");
}

// Извлекаем файл из базы данных
$query = "SELECT * FROM image
            WHERE id_image = $_GET[id_image]";
$img = mysql_query($query);
if(!$img) exit(mysql_error());
$image = mysql_fetch_array($img);

// Отсылаем заголовки на загрузку файла
header("Content-type: image/*");
// Отправляем файл пользователю
echo $image['content'];
?>
25 августа 2007, 22:32

передача данных методом GET через socket

<?php
/*
*передача данных методом GET через сокет
*автор: nc_soft
*25.08.07
*/

//сайт
$host='wen.ru';

//скрипт-обработчик (получим главную страницу)
$path='/';

//открываем сокет
$fp = @fsockopen("tcp://".$host, 80, $errno, $errstr, 10);
if (!$fp)
{
    die($errstr.':'.$errno);
}
else
{
    $out  = "GET $path HTTP/1.0\r\n";
    $out .= "Host: $host\r\n";
    $out .= "Connection: Close\r\n\r\n";

    //посылаем данные
    fwrite($fp, $out.$data);

    $headers='';

    //читаем заголовки
    while ($str = trim(fgets($fp, 4096)))
    $headers .= "$str\n";

    $body='';

    //читаем ответ
    while (!feof($fp))
    $body.= fgets($fp, 4096);

    //закрываем сокет
    fclose($fp);
}

//выводим данные
echo $headers.'<hr/>'.$body;

?>
25 августа 2007, 22:15

передача данных методом POST через socket

<?php
/*
*передача данных методом POST через сокет
*автор: nc_soft
*25.08.07
*/

//сайт
$host='site.ru';

//скрипт-обработчик
$path='/index.php';

//данные
$data='a=1&b=2';

//открываем сокет
$fp = @fsockopen("tcp://".$host, 80, $errno, $errstr, 10);
if (!$fp)
{
    die($errstr.':'.$errno);
}
else
{
    $out  = "POST $path HTTP/1.0\r\n";
    $out .= "Host: $host\r\n";
    //указываем что это пост данные
    $out .= "Content-type: application/x-www-form-urlencoded\r\n";
    //указываем количество байт
    $out .= "Content-Length: ". strlen($data) ."\r\n";
    $out .= "Connection: Close\r\n\r\n";

    //посылаем данные
    fwrite($fp, $out.$data);

    $headers='';

    //читаем заголовки
    while ($str = trim(fgets($fp, 4096)))
    $headers .= "$str\n";

    $body='';

    //читаем ответ
    while (!feof($fp))
    $body.= fgets($fp, 4096);

    //закрываем сокет
    fclose($fp);
}

//выводим данные
echo $headers.'<hr/>'.$body;

?>
25 августа 2007, 22:15

транслит

<?php
/**
*
*Транслит
*автор: nc_soft
*25.08.07
*
Функция предусматривает обработку текста как с транслитерацией, так и без, в качестве управляющего символа выбран ~
*/

echo transl('yeto tekst tranlitom ~yeto beZ izmenenij');

function transl($string) {
    //проверка отсутствия русских букв

    if (preg_match("/[А-Яа-яЁё]+/su",$string))
    {
        return $string;
    }
    if ($string[0]=='~')
    return substr($string,1);

    $tran = array(
    "A"=>"А",
    "a"=>"а",
    "B"=>"Б",
    "b"=>"б",
    "V"=>"В",
    "v"=>"в",
    "G"=>"Г",
    "g"=>"г",
    "D"=>"Д",
    "d"=>"д",
    "E"=>"Е",
    "e"=>"е",
    "Zh"=>"Ж",
    "ZH"=>"Ж",
    "zh"=>"ж",
    "Z"=>"З",
    "z"=>"з",
    "I"=>"И",
    "i"=>"и",
    "J"=>"Й",
    "j"=>"й",
    "K"=>"К",
    "k"=>"к",
    "L"=>"Л",
    "l"=>"л",
    "M"=>"М",
    "m"=>"м",
    "N"=>"Н",
    "n"=>"н",
    "O"=>"О",
    "o"=>"о",
    "P"=>"П",
    "p"=>"п",
    "R"=>"Р",
    "r"=>"р",
    "S"=>"С",
    "s"=>"с",
    "T"=>"Т",
    "t"=>"т",
    "U"=>"У",
    "u"=>"у",
    "F"=>"Ф",
    "f"=>"ф",
    "H"=>"Х",
    "h"=>"х",
    "X"=>"Х",
    "x"=>"х",
    "C"=>"Ц",
    "c"=>"ц",
    "Ts"=>"Ц",
    "ts"=>"ц",
    "Ch"=>"Ч",
    "ch"=>"ч",
    "Sh"=>"Ш",
    "SH"=>"Ш",
    "sh"=>"ш",
    "Sch"=>"Щ",
    "SCH"=>"Щ",
    "sch"=>"щ",
    "''"=>"ъ",
    "Y"=>"Ы",
    "y"=>"ы",
    "'"=>"ь",
    "Ye"=>"Э",
    "YE"=>"Э",
    "ye"=>"э",
    "Yu"=>"Ю",
    "yu"=>"ю",
    "Ya"=>"Я",
    "ya"=>"я",
    "YU"=>"Ю",
    "YA"=>"Я",
    "Yo"=>"ё",
    "YO"=>"Ё",
    "W"=>"Ш",
    "w"=>"ш",
    'q'=>'ь'
    );

    $tran1= array(
    'нэ '=>'ные ',
    'нэ'=>'ные'
    );

    if (preg_match("/\~+/su",$string))
    {
        $pos=strpos($string,"~");
        $str=substr($string,0,$pos);
        $str=latrus($str,$tran,$tran1);
        $tok=strtok($string,"~");
        $k=3;
        while ($tok=strtok("~"))
        {


            if ($k%2==0)
            {
                $str.=latrus($tok,$tran,$tran1);
                $k++;
            }
            else {
                $str.=$tok;
                $k++;
            }
        }

    }
    else
    {
        return     latrus($string,$tran,$tran1);
    }
    return $str;
}

function latrus($str,$tran,$tran1)
{
    $str=strtr($str,$tran);
    $str=str_replace("_"," ",$str);
    return strtr($str,$tran1);
}

?>
25 августа 2007, 22:14

антимат

<?php
# 25.08.07
##################################################################
#            Скрипт diktator_antimat v1.1_alfa                   #
#           Автор Дмитрий Перов method_05@list.ru                #
#                                                                #
#   Скрипт Распостраняется бесплатно , ссылка                    #
#   На Автора - по желанию...(знаю о чём вы сейчас подумали=))   #
#                                                                #
#   Обработал этим скриптом большой объём текста, вот            #
#  слова которые распознаются как маты:грёбля, грёбаный, глухую ,#
#  ХЛЕБАЛО,ХЛЕБАЛЬНИК,хулиган...                                 #
#                                                                #
#            Сложно просмотреть и предусмотреть Всё...           #
#                Так что о багах - мне на мыло...                #
#                                                                #
#       Всякого рода Модификации скрипта без согласования        #
#                      с Автором запрещены!                      #
#                                                   Удачи!       #
##################################################################


@setlocale(LC_ALL, array ('ru_RU.CP1251', 'rus_RUS.1251'));

$pattern = "/\w{0,5}[хx]([хx\s\!@#\$%\^&*+-\|\/]{0,6})[уy]([уy\s\!@#\$%\^&*+-\|\/]{0,6})[ёiлeеюийя]\w{0,7}|\w{0,6}[пp]([пp\s\!@#\$%\^&*+-\|\/]{0,6})[iие]([iие\s\!@#\$%\^&*+-\|\/]{0,6})[3зс]([3зс\s\!@#\$%\^&*+-\|\/]{0,6})[дd]\w{0,10}|[сcs][уy]([уy\!@#\$%\^&*+-\|\/]{0,6})[4чkк]\w{1,3}|\w{0,4}[bб]([bб\s\!@#\$%\^&*+-\|\/]{0,6})[lл]([lл\s\!@#\$%\^&*+-\|\/]{0,6})[yя]\w{0,10}|\w{0,8}[её][bб][лске@eыиаa][наи@йвл]\w{0,8}|\w{0,4}[еe]([еe\s\!@#\$%\^&*+-\|\/]{0,6})[бb]([бb\s\!@#\$%\^&*+-\|\/]{0,6})[uу]([uу\s\!@#\$%\^&*+-\|\/]{0,6})[н4ч]\w{0,4}|\w{0,4}[еeё]([еeё\s\!@#\$%\^&*+-\|\/]{0,6})[бb]([бb\s\!@#\$%\^&*+-\|\/]{0,6})[нn]([нn\s\!@#\$%\^&*+-\|\/]{0,6})[уy]\w{0,4}|\w{0,4}[еe]([еe\s\!@#\$%\^&*+-\|\/]{0,6})[бb]([бb\s\!@#\$%\^&*+-\|\/]{0,6})[оoаa@]([оoаa@\s\!@#\$%\^&*+-\|\/]{0,6})[тnнt]\w{0,4}|\w{0,10}[ё]([ё\!@#\$%\^&*+-\|\/]{0,6})[б]\w{0,6}|\w{0,4}[pп]([pп\s\!@#\$%\^&*+-\|\/]{0,6})[иeеi]([иeеi\s\!@#\$%\^&*+-\|\/]{0,6})[дd]([дd\s\!@#\$%\^&*+-\|\/]{0,6})[oоаa@еeиi]([oоаa@еeиi\s\!@#\$%\^&*+-\|\/]{0,6})[рr]\w{0,12}/i";

$replacement = "Цензура";
 $text='здесь в качестве примера идет жеский мат, который я не буду применять на страницах snippets :)';
$text = preg_replace($pattern, $replacement, $text);
 echo $text;

/*
$pattern - то что ищем

$replacement - то чем заменяем

$text - то что обрабатываем
*/

?>
25 августа 2007, 22:14

запись файла по ftp через fopen()

<?php
/*
запись файла по ftp через fopen()
*автор: nc_soft
*25.08.07
*/

$user='test.wen.ru'; //юзер
$pass='xxxxxxxxxx'; //пароль
$host='wen.ru'; //хост без префикса
$file='new_file.html'; //имя файла (не должен существовать)

$f=fopen("ftp://$user:$pass@$host/$file",'w'); //открываем в режиме w (с w+ не получится), если предполагается записывать данные, то лучше открывать в режиме wb (бинарный)
fwrite($f,'<html><body>тестовая страница</body></html>'); //запишем тестовую страницу
fclose($f); //закрываем

/*если такой файл уже существует, то запись не произойдет*/
?>
25 августа 2007, 22:13

простой текстовый счетчик на файле

<?php
/*
простой текстовый счетчик на файле
*автор: nc_soft
16.06.07
*/

$ua=$_SERVER['HTTP_USER_AGENT']; //браузер
$ip=$_SERVER['REMOTE_ADDR']; //ip

$uniq=serialize(array($ip,$ua))."\n"; //упакованные данные

$store='./counter/counter.dat'; //файл-хранилище, права 666 и выше

$offset=8*3600; //смещение по времени в секундах (у моего хостера +8 часов от Москвы)
$date_now=date('d',time()+$offset); //сегодняшнее число
$date_access=date('d',filemtime($store)+$offset); //время последней модификации файла

if ($date_now!=$date_access && file_exists($store))
{
    //если даты не совпадают, то пора обнулить счетчик, удаляем файл (для директории надо выставить права 766)
    unlink($store);
}

if (!file_exists($store))
{
    //если файла данных не существует

    $hit=1;
    $host=1;
}
else
{
    //получаем стоки из файла
    $data=file($store);
    $data[]=$uniq; //добавляем к данным текущего юзера

    $hit=count($data); //сколько строк, столько и хитов

    //считаем хосты
    $ip_ua=array();
    $ip_ua[]=$uniq; //запихиваем текущего юзера

    foreach ($data as $v)
    {
        if (!in_array($v,$ip_ua)) //если такой комбинации нет, то
        $ip_ua[]=$v; //увеличиваем уникальные записи
    }

    $host=count($ip_ua); //число уникальных строк

}

//теперь записываем все в файл
$f=fopen($store,'a+'); //создаем/открываем
flock($f,2); //блокируем
fwrite($f,$uniq); //записываем упакованный массив
fclose($f); //закрываем (блокировка снимется сама)

echo $host;
echo '/';
echo $hit;

?>
25 августа 2007, 22:10