вторник, 24 апреля 2012 г.

PHP. Возврат изображения 1px .GIF


// выдает 1 пиксельный прозрачный gif 
// например для счетчика. 
// Ulrich Babiak, Koeln 1999/11/30 

// несколько Headers для предотвращения кеширования

Header(  "Content-type:  image/gif"); 
Header("Expires: Wed, 11 Nov 1998 11:11:11 GMT"); 
Header("Cache-Control: no-cache"); 
Header("Cache-Control: must-revalidate"); 

// Это выдаст браузеру 1 пиксельный gif  
// убедитесь что это одна непрерывная строка! 

printf ("%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c% 
c%c%c%c%c%c%c%c",71,73,70,56,57,97,1,0,1,0,128,255,0,192,192,192,0,0,0,33,249,4, 
1,0,0,0,0,44,0,0,0,0,1,0,1,0,0,2,2,68,1,0,59); 

//  gif готов, 
//  теперь можно добавить счетчик внизу 

Расчет возраста в PHP


<?
     //"Дата рождения ".birthday("1980-07-05"); --> Возраст 31

    function birthday ($birthday){
        list($year,$month,$day) = explode("-",$birthday);
        $year_diff  = date("Y") - $year;
        $month_diff = date("m") - $month;
        $day_diff   = date("d") - $day;
        if ($month_diff < 0) $year_diff--;
        elseif (($month_diff==0) && ($day_diff < 0)) $year_diff--;
        return $year_diff;
    }
?>

пятница, 13 апреля 2012 г.

PHP. Проверить существует ли файл на другом сайте.

$url='http://www.test.net/file.jpg';
$addy=parse_url($url);
$addy['port']=isset($addy['port'])?$addy['port']:80;
$sh=fsockopen($addy['host'],$addy['port']) or die('Невозможно открыть сокет');
fputs($sh,"HEAD {$addy['path']} HTTP/1.1\r\nHost: {$addy['host']}\r\n\r\n");

while($line=fgets($sh))
   if(preg_match('/^Content-Length: (d+)/',$line,$m))
      $size=$m[1];

echo isset($size)?"размер $url файла $size": 'нет такого файла: '.$url; 

/ссылка/

суббота, 7 апреля 2012 г.

Chosen: идеальные выпадающие списки


Плагин Chosen создан для оформления красивых и удобных выпадающих меню с помощью jQuery и Prototype. Для установки плагина достаточно просто скачать файлы и прописать одну строчку:
$(".chzn-select").chosen()
(версия для jQuery)

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

Поскольку Chosen заменяет стандартный элемент HTML, то не нужно беспокоиться, как он работает с браузерами без поддержки JavaScript. Также не нужно ничего менять в бэкенде: формы сабмиттятся как обычно, изменения только в пользовательском интерфейсе.

40 полезных API для дизайнеров и разработчиковfor web designers and developers

40 useful APIs for web designers and developers
An application programming interface (API) is a set of rules and specifications that software programs can follow to communicate or ‘interface’ with each other.
As developers are well aware, there are hundreds of APIs out there for doing almost anything you could imagine online. Some are better than others, and some are definitely more useful than others.
Below are forty of the most useful APIs out there. The included APIs will let you do everything from shortening a URL to displaying a book preview on your site to interacting with your Twitter account, and everything in between.
Please share with us which APIs have you found most useful and feel free to recommend others that we may have missed…

пятница, 6 апреля 2012 г.

Проверка подлинности данных формы

Существует способ причинения вреда сайту, при котором определенная форма сохраняется на жесткий диск злоумышленника, изменяется параметр action и обращение к серверу происходит непосредственно с удаленного компьютера. Это делается с целью обхода проверки передаваемых данных средствами JavaScript, автоматизации подбора пароля, флуда и т.д. Защититься от этого можно с помощью переменной окружения HTTP_REFERER. В ней содержится адрес страницы, с которой был осуществлен переход. Например, если имя вашего домена www.some.com, то оно обязательно будет присутствовать в HTTP_REFERER при переходах внутри сайта. То есть в сценарии можно сделать следующую защиту:

if(!eregi("some\.com", $_SERVER['HTTP_REFERER'])) die("Несанкционированное обращение!");
или так


if(substr($_SERVER['HTTP_REFERER'], 0 , 18) != "http://www.site.ru" && substr($_SERVER['HTTP_REFERER'], 0 , 14) != "http://site.ru") die("Умри!");


проблемы:
переменной HTTP_REFERER нельзя полностью довериться, поскольку она может быть изменена на стороне клиента, но все же рассмотренный способ является хорошей защитой "от дурака