Записи помеченные ‘PHP’

Учимся работать с Redis в PHP.

5 Март 2010 // Комментарии (7) // Уроки PHP

У многих разработчиков highload веб-сервисов возникало желание отказаться от memcashed в связке с Mysql. Да и от MYSQL отказаться было бы тоже не плохо. Но как можно отказаться от Mysql скажете вы где тогда хранить данные? Встречайте, Redis – высокопроизводительное нереляционное распределённое хранилище данных. В отличие от memcashed вы не потеряете свои данные, Redis хранит свои данные постоянно. Так что не надо будет парится по поводу непредвиденных ситуаций. Redis позволяет хранить как строки, так и массивы, к которым можно применять атомарные операции pop / push, делать выборки из таких массивов, выполнять сортировку элементов, получать объединения и пересечения массивов.

Производительность базы данных Redis поражает разработчика веб-приложений. Только представьте себе 110000 set запросов и 81000 get запросов в секунду.  Redis сегодня уже используется многими крупными компаниями. Как думаете какими? Ну конечно же – это крупные социальные сети и микроблоги, точные имена компаний я не буду называть дабы не ошибиться, но скажу что Вконтакте и Twitter точно используют нереляционную базу данных, ибо если бы было что-то другое, то все бы повисло к чертям собачьим.

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

Это была лирика или рассказ о том что такое Redis и почему его стоит изучать. А теперь давайте опробуем работу Redis у себя на компьютере.

1. Установка Redis.

Я был опечален, когда узнал что Redis официально есть только под Linux. Но найти скомпилированный Redis под Windows мне все же удалось. Ура, товарсчи!

Установка проста. Достаем содержимое из архива куда-нибудь себе на диск и запускаем redis-server.exe Там есть еще два екзешника, один для проверки производительности, другой – клиент. Они нам не нужны. Внимание! После того как вы запустите redis-server не закрывайте окошечко консоли, иначе сервер редиса тоже выключится.

2. Запускаем уже установленный, любимый Денвер.

3. Для работы с Redis нам понадобится клиент на php. Я остановил свой выбор на php-redis. Клиент будет необходим для соединения с базой данных и записи и чтения данных из нее.

4. Устанавливаем клиент. Скачиваем архив. Папку php-redis вытаскиваем в localhost1/www/.  Проводим тест на работу с редиской=)  Запускаем тест http://localhost1/php-redis/tests/unit.all.php

Scalar tests ………. Increment/Decrement ……. Lists ……… Test summary Passed: 26 Failed: 0 Insert tests ……. Delete tests . Update tests …… Test summary Passed: 40 Failed: 0 Adding, reading ……………. Filtering ……………. Deleting …. Truncating …. Test summary Passed: 80 Failed: 0

ЙУХУ! Работает=)

5. Теперь давайте подключимся к редис и запишем что-нибудь и прочитаем. Создадим в корне(localhost1/www/) index.php куда разместим следующий код:


<?

$root=$_SERVER['DOCUMENT_ROOT'].'/php-redis/lib/';
//подгружаем необходимые классы для работы с редисом
require_once $root.'redis.php';
//подключаемся к редису
$r = new php_redis( '127.0.0.1', 6379 );
//Записываем в ячейку test привет редис)))
$r->set('test','Hello REDIS!');

//Получаем запись по keyvalue = test
$v = $r->get('test');

//выводим результат

echo $v;

?>

Теперь осталось запустить http://localhost1/

Видим Hello REDIS! Ура, получилось. Удалить запись можно с помощью метода delete();. Обновить значение можно с помощью update();

Для того, чтобы убедится сохранился ли наш “Привет” давайте закомментируем $r->set(‘test’,'Hello REDIS!’); и сохраним. Все работает запись выводиться. Теперь давайте перед $v = $r->get(‘test’); поставим $r->delete(‘test’); Вот теперь-то запись по ключу удалена.

На этом наше первое знакомство с Redis, к сожалению, подошло к концу. Надеюсь и у Вас все получится как у меня.

Файлы к статье.

Google Bookmarks Digg Reddit del.icio.us Ma.gnolia Technorati Slashdot Yahoo My Web News2.ru БобрДобр.ru RUmarkz Ваау! Memori.ru rucity.com МоёМесто.ru Mister Wong

301 редирект на php

5 Январь 2010 // Комментарии (2) // Уроки PHP

Иногда возникает необходимость перенаправить  все запросы с устаревшего сайта на другой. И тут на помощь приходит 301 Permanent Redirect. 301 редирект можно сделать несколькими способами, но сегодня речь пойдет о редиректе средствами php. Делается это просто, для этого есть замечательная функция header()  ей-то мы и воспользуемся для редиректа. Следующий код необходимо будет расположить в самом верху и до вывода html.


<?

header("HTTP/1.1 301 Moved Permanently");

//указываем способ

header("Location: http://www.namedomen.ru/page.htm");

//указываем странцу куда редиректить
exit();

//остальному выполнятся уже не нужно поэтому

//обрываем последующее выполнение кода

?>

Когда использовать 301 редирект?

1. Если у вас есть пиаристый домен, а делать с ним пока что нечего.

2. При переносе сайта на новый домен

3. Для слияния link popularity для домена с www и без.

Google Bookmarks Digg Reddit del.icio.us Ma.gnolia Technorati Slashdot Yahoo My Web News2.ru БобрДобр.ru RUmarkz Ваау! Memori.ru rucity.com МоёМесто.ru Mister Wong

Практика на PHP. Пишем скрипт, который сравнивает 2 текста на совпадение.

10 Ноябрь 2009 // Комментарии (2) // Уроки PHP

Долго не писал в своем блоге, был занят одной интересной задачкой. Родилась она из нечего делать. Я решил написать программу на PHP, которая бы сравнивала два текста на совпадение и в конце выдавала на сколько процентов два текста похожи. Прежде чем писать свой скрипт на PHP я погуглил, нашел не много вариантов решения этой задачи, больше было вопросов – “Как написать такой скрипт?”, что в принципе понятно – самому тоже лень было делать, но я все же смог=).

Я начал с поиска алгоритма, потому что для такого скрипта – это самое главное. Ничего внятного по этому вопросу не нашел, долго думал как сравнить два текста. Решил сделать так.

Мой алгоритм для сравнения двух текстов:

1. Делаем нижний регистр для всего текста.

2. Оставляем только слова, все остальные символы удаляем(кроме пробелов).

3. Превращаем оба текста в массивы из слов, теперь задача упростилась нужно сравнить уже два массива. После этого шага можно пойти разными путями, но вот как я решил сравнить эти два массива из слов.

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

5. Сравниванием число повторений для каждого слова из двух массивов.

6. Т.к. будут попадаться такие слова, которые единожды встречаются в тексте, придется их посчитать.

7. Считаем суммарное различие и подсчитываем процент совпадения.

8. Если один текст совсем отличен от другого или в каком-то слов больше, то результат будет отрицательным. Поэтому для такого случая будем говорить что один текст похож на другой на 0%.

(далее…)

Google Bookmarks Digg Reddit del.icio.us Ma.gnolia Technorati Slashdot Yahoo My Web News2.ru БобрДобр.ru RUmarkz Ваау! Memori.ru rucity.com МоёМесто.ru Mister Wong

Практика по PHP. Создаем ротатор баннеров.

21 Октябрь 2009 // Комментарии (1) // Уроки PHP

Что такое ротатор баннеров думаю известно всем – это скрипт который меняет баннер в определенном месте для каждого пользователя индивидуально. В этом уроке вы ознакомитесь с сессиями на практике. Итак, приступим.

У нас есть картинки для баннеров и ссылки. Все это мы объединяем в небольшие html блоки.


<a href="http://mind3.ru" target="_blank">

<img src="/banners/1.gif" border="0" />

</a>

<a href="http://domen1.ru" target="_blank">

<img src="/banners/2.gif" border="0" />

</a>

<a href="http://domen2.ru" target="_blank">

<img src="/banners/3.gif" border="0" />

</a>

Теперь собственно скрипт, который будет крутить наши баннеры назовем его rotator.php :


<?php
//ротатор баннеров на php

/*включаем сессии,  напоминаю  session_start(); нужно вызывать до вывода

заголовка <head></head>

докладываю об этом на случай постов о том, что ошибка возникает

*/

session_start();
//массив баннеров
$banners=array(
0=>'

<a href="http://mind3.ru" target="_blank">

<img src="/banners/1.gif" border="0" />

</a>

',
1=>'

<a href="http://domen1.ru" target="_blank">

<img src="/banners/2.gif" border="0" />

</a>

',
2=>'

<a href="http://domen2.ru" target="_blank">

<img src="/banners/3.gif" border="0" />

</a>

'
);

//число баннеров
$count_banners=count($banners);

if(!isset($_SESSION['rotator'])){
//если пользователь первый раз увидел страницу
$_SESSION['rotator']=0;
}else{
//если пользователь уже видит рекламу который раз
if($_SESSION['rotator']<$count_banners-1){
//переход к следующему баннеру
$_SESSION['rotator']++;
}else{
//если достигли предела обнуляем счетчик
$_SESSION['rotator']=0;
}
}
//выводим баннер
echo $banners[$_SESSION['rotator']];

?>

Еще можно сделать другой вариант более простого ротатора без использования сессий. Для этого воспользуемся функцией rand(); , с помощью нее можно рандомно выбирать баннер и выводить его.


<?php

//массив баннеров
$banners=array(
0=>'

<a href="http://mind3.ru" target="_blank">

<img src="/banners/1.gif" border="0" />

</a>

',
1=>'

<a href="http://domen1.ru" target="_blank">

<img src="/banners/2.gif" border="0" />

</a>

',
2=>'

<a href="http://domen2.ru" target="_blank">

<img src="/banners/3.gif" border="0" />

</a>

'
);

//число баннеров
$count_banners=count($banners)-1;

echo $banners[rand(0,$count_banners)];

?>

Спасибо за внимание, пользуйтесь на здоровье =)

Если найдете ошибки, не ругайтесь, пишите в комменты.

Google Bookmarks Digg Reddit del.icio.us Ma.gnolia Technorati Slashdot Yahoo My Web News2.ru БобрДобр.ru RUmarkz Ваау! Memori.ru rucity.com МоёМесто.ru Mister Wong

Урок по ПХП. Типы данных в PHP.

14 Октябрь 2009 // Комментарии (34) // Уроки PHP

Здравствуйте. Как и обещал, сегодня в Уроках по PHP речь пойдет о типах данных и их использовании. Давайте сперва познакомимся какие типы данных бывают, ну а потом я расскажу где они могут использоваться.

Типы данных:


  • Скалярные типы данных
  1. Двоичные данные (boolean)
  2. Целые числа (Integer)
  3. Числа с плавающей точкой (Float)
  4. Строки (String)
  • Смешанные типы данных
  1. Массивы (Array)
  2. Объекты (Object)
  • Специальные типы данных
  1. Ресурсы (Resource)
  2. Пустой тип (NULL)
  • Псевдотипы данных
  1. Смешанный (Mixed)
  2. Числа (Number)
  3. Обратного вызова (Callback)

(далее…)

Google Bookmarks Digg Reddit del.icio.us Ma.gnolia Technorati Slashdot Yahoo My Web News2.ru БобрДобр.ru RUmarkz Ваау! Memori.ru rucity.com МоёМесто.ru Mister Wong