Еще одна галерея

http://devkick.com/lab/galleria/ - прикольная галерея на jquery. Буду сегодня тестить

Да уж, ожидал немного большего.  Сама по себе данная галерея прикольная, но я столкнулся с трудностью интегрироват в нее слайдшоу.  При чем с дозагрузкой картинок с сервера. Вообщем я пытался сделать из нее php+jquery галерею. Увы, или я балбес или не все так просто как мне казалось.  В итоге я переписал эту галерею посвоему, все старые эффекты остались, но еще добавилось слайдшоу.  Фотки для слайдов подгружаются с сервера.

А пока можете посмотреть на сайте tvoynet.com.  Там моя галерея в связке с hightslides

Выложу скрипты  как только оформлю нормально демку.

Share and Enjoy:
  • Digg
  • Facebook
  • Twitter
  • Google Bookmarks
  • Live
  • MySpace

Оптимизация сценариев на php

Оптимизация
«Преждевременная оптимизация – корень всех зол».
Дональд Кнут «Искусство программирования»
данная статья взята из книги «Профессиональное программирование на PHP, авторы LArgerich, W.Choi, J.Coggeshall, и другие

Иногда, написав приложение веб-сайта на РНР, разработчики обнаруживают, что это приложение работает недостаточно быстро. Поэтому приходится оптимизировать код, чтобы сократить время выполнения сценариев. Несмотря нато что РНР, в целом, быстрый язык выполнения сценариев, существует ряд
технологий, рекомендаций и приемов, позволяющих оптимизировать код.

Выбор правильного языка
Первый вопрос, который возникает, когда производительность приложения оказывается неудовлетворительной, — это правильно ли выбран язык программирования. Возможно, медлительность обусловлена интерпретатором языка, и тогда нет смысла оптимизировать код – лучших результатов это не даст. Проводилось тестирование нескольких языков программирования, чтобысравнить их быстродействие с РНР. Измерения проводились по многим различным типам сценариев, включающих различные операции; результаты представляют собой усреднение величин, полученных во всех тестах.
Тестировались следующие языки:
• Сценарии CGI Perl
Обычный способ написания кода для веб-сайтов и приложений 1-2 года назад
Выбор правильного языка 913
• Сценарии FastCGI Perl
Механизм повышения производительности сценариев CGI
• Сценарии Python CGI
Использование Python для написания сценариев CGI
• Сценарии mod_python Python
Модуль Apache, позволяющий ему выполнять код Python, не обращаясь
к интерпретатору Python
• Сценарии С CGI
Компилированные сценарии С, выполняющиеся как программы CGI
• Сценарии mod_perl Perl
Модуль Apache, позволяющий выполнять сценарии Perl без вызова интерпретатора Perl
• PHP
Для сравнения те же сценарии программировались на РНР и выполнялись. После нескольких оценок производительности, включающих различные типы сценариев и загрузки серверов, был сделан вывод, что mod_perl, FastCGi и РНР дают самые быстрые результаты, мало различаясь между собой. Таким образом, если сайт или сценарий РНР работают медленно, то надо анализировать код, а не менять язык.

Оптимизация кода РНР

Говоря о задачах предварительной оптимизации (preoptimization), программисты рассуждают так: «Я заменю этот вектор хеш-таблицей и повышу скорость» или «Я заменю эту функцию ereg() несколькими функциями str_rep1асе(), это, повысит скорость». Они весьма заблуждаются. Во-первых, при такого рода оптимизации время выполнения сценария
обычно сокращается не более чем на 0,01 секунды, а потому польза невелика, зато легкость чтения кода может значительно пострадать. Во-вторых, предварительная оптимизация очень часто является непроизводительной тратой драгоценного времени программиста. Оптимизацией стоит заниматься, только убедившись в действительной ее необходимости. Профессиональным подходом к повышению производительности будет следующий:
• Профилировать код и найти узкие места
• Классифицировать узкие места
• Ликвидировать узкие места, оптимизировав код

Профилирование кода

Если скорость выполнения кода неудовлетворительна, то первым делом необходимо его профилировать и измерить время, которое сценарий тратит на выполнение различных задач и функций. На основе этой информации можно выяснить, на что сценарий расходует больше всего времени. Эти функции называются узкими местами (bottlenecks). Профилирование может преподнести сюрпризы. Например, может оказаться, что 99% времени сценарий тратит на запросы к базе данных, либо выявятся другие узкие места, такие как дисковый ввод/вывод при чтении больших файлов или журналов. Оптимизация не может быть эффективной без предварительного профилирования. Для того чтобы профилировать сценарий РНР, надо снабдить таймерами некоторые функции и задачи сценария и измерить продолжительность их выполнения.

Классификация узких мест


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

Техника оптимизации
Рассмотрим теперь различные способы оптимизации времени выполнения сценария в зависимости от происхождения узкого места:
• Оптимизация кода
Можно оптимизировать время выполнения интенсивных вычислений (плохо построенные циклы for() или while() или просто медленные команды).
• Буферизация и сжатие вывода
Этот прием полезен, если фактором замедления является сложность вывода в броузер, когда выводимо содержимое генерируется множеством функций.
• Оптимизация базы данных
Применяется, когда замедление обусловлено выполнением запросов к базе данных или интенсивным использованием соединений и функций баз данных.
• Кэширование
Применяется, когда замедление обусловлено временем генерации страницы, которое не может быть сокращено, либо запросы к базе данных невозможно оптимизировать. Другим основанием для кэширования может быть частое обращение к относительно статичным данным.

Продолжение следует…

Share and Enjoy:
  • Digg
  • Facebook
  • Twitter
  • Google Bookmarks
  • Live
  • MySpace

Pagination class (нумерация страниц на php)

<?php
class pagination
{
var $page = 1; // Current Page
var $perPage = 10; // Items on each page, defaulted to 10
var $showFirstAndLast = true; // if you would like the first and last page options.
function generate($array, $perPage = 10)
{
// Assign the items per page variable
 
if (!empty($perPage))
 
$this->perPage = $perPage;
 
// Assign the page variable
 
if (!empty($_GET['page'])) {
 
$this->page = $_GET['page']; // using the get method
 
} else {
 
$this->page = 1; // if we don't have a page number then assume we are on the first page
 
}
 
// Take the length of the array
 
$this->length = count($array);
 
// Get the number of pages
 
$this->pages = ceil($this->length / $this->perPage);
 
// Calculate the starting point
 
$this->start = ceil(($this->page - 1) * $this->perPage);
 
// Return the part of the array we have requested
 
return array_slice($array, $this->start, $this->perPage);
 
}
 
function links()
 
{
 
// Initiate the links array
 
$plinks = array();
 
$links = array();
 
$slinks = array();
 
// Concatenate the get variables to add to the page numbering string
 
if (count($_GET)) {
 
$queryURL = '';
 
foreach ($_GET as $key => $value) {
 
if ($key != 'page') {
 
$queryURL .= '&amp;'.$key.'='.$value;
 
}
 
}
 
}
 
// If we have more then one pages
 
if (($this->pages) > 1)
 
{
 
// Assign the 'previous page' link into the array if we are not on the first page
 
if ($this->page != 1) {
 
if ($this->showFirstAndLast) {
 
$plinks[] = ' <a href="?page=1'.$queryURL.'">&amp;laquo;&amp;laquo; First </a> ';
 
}
 
$plinks[] = ' <a href="?page='.($this->page - 1).$queryURL.'">&amp;laquo; Prev</a> ';
 
}
 
if(($this->page-5)<=0&amp;&amp;($this->pages + 1)>10)
 
{
 
$start=1;
 
$end=11;
 
}
 
elseif(($this->page-5)<=0&amp;&amp;($this->pages + 1)<=10)
 
{
 
$start=1;
 
$end=$this->pages + 1;
 
}
 
elseif(($this->page-5)>0&amp;&amp;($this->pages + 1)<=10)
 
{
 
$start=1;
 
$end=$this->pages + 1;
 
}
 
elseif(($this->page-5)>0&amp;&amp;($this->pages + 1)>10)
 
{
 
if(($this->page+5)>=($this->pages))
 
{
 
$start=$this->pages-10;
 
$end=$this->pages+1;
 
}
 
else
 
{
 
$start=$this->page-4;
 
$end=$this->page+6;
 
}
 
}
 
// Assign all the page numbers &amp; links to the array
 
for ($j=$start; $j < $end; $j++) {
 
if ($this->page == $j) {
 
$links[] = ' <a class="selected">'.$j.'</a> '; // If we are on the same page as the current item
 
} else {
 
$links[] = ' <a href="?page='.$j.$queryURL.'">'.$j.'</a> '; // add the link to the array
 
}
 
}
 
// Assign the 'next page' if we are not on the last page
 
if ($this->page < $this->pages) {
 
$slinks[] = ' <a href="?page='.($this->page + 1).$queryURL.'"> Next &amp;raquo; </a> ';
 
if ($this->showFirstAndLast) {
 
$slinks[] = ' <a href="?page='.($this->pages).$queryURL.'"> Last &amp;raquo;&amp;raquo; </a> ';
 
}
 
}
 
// Push the array into a string using any some glue
 
return implode(' ', $plinks).implode($this->implodeBy, $links).implode(' ', $slinks);
 
}
 
return;
 
}
 
}
 
?>
Share and Enjoy:
  • Digg
  • Facebook
  • Twitter
  • Google Bookmarks
  • Live
  • MySpace

Текст сегодня

Share and Enjoy:
  • Digg
  • Facebook
  • Twitter
  • Google Bookmarks
  • Live
  • MySpace

Проверка email на php

Скрипт проверки валидности email на php:

function valide_email($email){
if (strpos($email,"@")){ //проверяем есть ли знак @
	$email_array=explode("@",$email);
	if (sizeof($email_array)!=2) return true; // проверяем сколько знаков @, если больше одного, то ошибка
	if (!empty($email_array[1])){
		if (strpos($email_array[1],".")){ проверяем доменную часть
		$domain_array=explode (".", $email_array[1]);
		while (list($k, $v)= each ($domain_array)){
			if (empty($v)) return true;
		}
	}
	else return true;//true если неправильный email
 
}
if (!empty($email_array[0])){
	if (strpos($email_array[0],".")){
		$address_array=explode (".", $email_array[0]);
		while (list($k, $v)= each ($address_array)){
			if (empty($v)) return true;
		}
	}
}
else return true;//true если неправильный email
 
}
else return true; //true если неправильный email
 return false; // false усли email правильный
}

Данный скрипт проверяет только правильность формата email, но не проверяет доменное имя и сам адрес на корректность символов.
Позже допишу правила для проверки последних.

Share and Enjoy:
  • Digg
  • Facebook
  • Twitter
  • Google Bookmarks
  • Live
  • MySpace