Скачиваем фото с mamba.ru (love.mail.ru). [Обновлено]

Хочу представить вам userJS для сохранения фотографий с мамбы.
Данное расширение добавляет кнопочку Download рядом с кнопкой Close.

Подробности под катом

Читать полностью

Curl vs sockets vs file_get_contents vs multiCurl

Давайте же проведем небольшое сравнение в скорости.

1) Curl

< ?
function curl($url)
{
$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL,$url);
curl_setopt ($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6");
curl_setopt ($ch, CURLOPT_TIMEOUT, 60);
curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec ($ch);
curl_close($ch);
return $result;
}

2) Sockets

function sockets($host) {
$fp = fsockopen("www.".$host, 80, $errno, $errstr, 30);
  $out = "GET / HTTP/1.1\r\n";
  $out .= "Host: www.".$host."\r\n";
  $out .= "Connection: Close\r\n\r\n";
  fwrite($fp, $out);
  $f='';
  while (!feof($fp)) {
    $f .= fgets($fp, 1024);
  }
return $f;
}

3) file_get_contents

function fgc($url){
return file_get_contents($url);
}

4) MultiCurl

function multiRequest($data,$nobody=false,$options = array(), $oneoptions = array())
{
	$curls = array();
	$result = array();
	$mh = curl_multi_init();
	foreach ($data as $id => $d)
	{
		$curls[$id] = curl_init();
		$url = (is_array($d) && !empty($d['url'])) ? $d['url'] : $d;
		curl_setopt($curls[$id], CURLOPT_URL,            $url);
		curl_setopt($curls[$id], CURLOPT_HEADER,         0);
		curl_setopt($curls[$id], CURLOPT_RETURNTRANSFER, true);
		curl_setopt($curls[$id], CURLOPT_FOLLOWLOCATION,1);
		curl_setopt($curls[$id], CURLOPT_USERAGENT,"Mozilla/5.0(Windows;U;WindowsNT5.1;ru;rv:1.9.0.4)Gecko/2008102920AdCentriaIM/1.7Firefox/3.0.4");
		//curl_setopt($curls[$id], CURLOPT_COOKIEJAR,'cookies.txt');
		//curl_setopt($curls[$id], CURLOPT_COOKIEFILE,'cookies.txt');
		//curl_setopt($curls[$id], CURLOPT_NOBODY, $nobody);

		if (!empty($options))
		{
			curl_setopt_array($curls[$id], $options);
		}
		if (!empty($oneoptions[$id]))
		{
			curl_setopt_array($curls[$id], $oneoptions[$id]);
		}
		if (is_array($d))
		{
			if (!empty($d['post']))
			{

				curl_setopt($curls[$id], CURLOPT_POST,       1);
				curl_setopt($curls[$id], CURLOPT_POSTFIELDS, $d['post']);
			}
		}
		curl_multi_add_handle($mh, $curls[$id]);
	}
	$running = null;
	do
	{
		curl_multi_exec($mh, $running);
	}
	while($running > 0);
	foreach($curls as $id => $content)
	{
		$result[$id] = curl_multi_getcontent($content);
		//echo curl_multi_getcontent($content);
		curl_multi_remove_handle($mh, $content);
	}
	curl_multi_close($mh);
	return $result;
}

В качестве теста получим страницу «http://google.de» сто раз.

$url = 'google.de';
$start = microtime(1);
for($i=0;$i<100;$i++)
curl($url);
$end = microtime(1);
echo "Curl:".($end-$start)."\n";

$start = microtime(1);
for($i=0;$i<100;$i++)
fgc("http://$url/");
$end = microtime(1);
echo "file_get_contents:".($end-$start)."\n";

$start = microtime(1);
for($i=0;$i<100;$i++)
sockets($url);
$end = microtime(1);
echo "Sockets:".($end-$start)."\n";

$start = microtime(1);
for($i=0;$i<100;$i++)
$arr[]=$url;
multiRequest($arr);
$end = microtime(1);
echo "MultiCurl:".($end-$start)."\n";
?>

Результаты:

Curl: 5.39667105675
file_get_contents: 7.99799394608
Sockets: 2.99629592896
MultiCurl: 0.736907958984

Как видим, лидирует мультикурл, беспощадно оставляя своих соперником далеко позади. Применять multicurl стоит лишь тогда, когда имеется объемное количество url‘ов.
Иначе, если список «страниц», которые необходимо «посетить» небольшой(2,3,5,10), самый рациональный вариант – использовать сокеты, но..кому как, мне например, несмотря на то, что т socket‘ы выигрывают у curl‘а, удобнее использовать его, т.к нет проблем с заголовками(headers) и прочим.

Что выбрать? Решать только вам.

Журнал отметок(оценок) [php+ajax]

Написал довольно простую реализацию журнала отметок с использованием php и ajax.
Ниже представлена пара скриншотов, которые наглядно демонстрируют функционал.

UPDATE: Добавлены всплывающие уведомления.
Дальнейшее описание и исходники под катом.
Читать полностью

preg_replace или делаем ссылки кликабельными

Несколько дней назад мой товарищ попросил меня помочь с одним вопросом.
Задача была следующей: заменить все ссылки вида

http://google.com

на кликабельные ,т.е

<a href="http://google.com">http://google.com</a>

Чуть ниже представлена простейшая реализация:

$text=preg_replace('#((?:http|https):\/\/[^\s]+)#i','<a href="$1" />$1', $text);

Если же просто надо спарсить ссылки, то:

preg_match_all('#((?:http|https):\/\/[^\s]+)#i',$text,$matches);
print_r($matches);

Iptables для новичка

Начнем с того – что такое iptables?
iptables – утилита(служба) для контроля сетевого трафика или попросту некий фаерволл с огромными возможностями.
Важно: запускать iptables необходимо с правами root’a.

Синтаксис iptables следующий:

iptables [-t ТАБЛИЦА] -A ЦЕПОЧКА ПАРАМЕТРЫ -j ДЕЙСТВИЕ

Ключи для работы с цепочками:
-A – добавить новое правило.
-D – удалить правило.
-F – удалить все правила.
-R – замена правила.
-L – вывод списка всех правил.

В таблице filter(по умолчанию) существую следующие цепочки:
INPUT – входящий трафик.
OUTPUT – исходящий трафик.
FORWARD – пересылаемый(транзитный) трафик.

Параметры:
-p – протокол, можно использовать all,icmp,tcp,udp.
-s – ip адрес/хост источника.
-d – ip адрес/хост назначения.
-i – интерфейс на который пришел пакет.
-o – интерфейс с которого уйдет пакет .
(просмотреть все интерфейсы можно с помощью команды.ifconfig, обычно это eth0)
–sport – порт источника.
–dport – порт назначения.

Действия:
ACCEPT – разрешить пакеты.
REJECT – блокировать пакеты с сообщением об отказе.
DROP – блокировать пакеты(более приоритетный вариант, нежели REJECT, т.к для блокируемого ip адреса(или диапазонов) будет аналогичный эффект тому, когда сервер находится в дауне).

Несколько примеров:
1) Блокируем все входящие пакеты с ip адреса 111.111.111.111

iptables -A INPUT -s 111.111.111.111 -j DROP

А с помощью знака «!«(отрицание) можно сделать блокировку всех адресов(хостов), кроме заданного.
Например, с помощью нижеприведенной команды, пакеты будут блокироваться со всех адресов, кроме 111.111.111.111

iptables -A INPUT ! -s 111.111.111.111 -j DROP

2) Снимаем бан с IP 111.111.111.111

iptables -D INPUT -s 111.111.111.111 -j DROP

3) Просмотр списка с правилами

iptables -L INPUT --line-numbers

Таким образом мы сможем увидить все пронумерованные правила, которые также можно удалить с помощью ключа -D.
Нижеприведенная команда удаляет правила под номером 5.

iptables -D INPUT 5

4) Поностью очищаем список со всеми правилами

iptables -F

5) Блокируем входящие пакеты для диапазона ip адресов c 192.168.0.8 по 192.168.0.25

iptables -I INPUT -m iprange --src-range 192.168.0.8-192.168.0.25 -j DROP

6) Блокируем весь входящий трафик на 80 порт(http).

iptables -A INPUT -p tcp --sport 80 -j DROP

7) Блокируем домен vk.com(вконтакте).

iptables -A INPUT -s vk.com -j DROP # блокируем входящие пакеты от домена vk.com
iptables -A OUTPUT -d vk.com -j DROP # блокируем исходящие пакеты к домену vk.com

Другие домены вконтакта: vk.com, vkontakte.ru, incontact.ru , durov.ru


Также можно прописать алиасы в файл .bashrc(или в .bash_aliases) для удобства использования первого и второго примера:

alias ban='iptables -I INPUT -j DROP -s'
alias unban='iptables -D INPUT -j DROP -s'

После чего можно гораздо быстрее банить ip адрес командой

ban 111.111.111.111

и снимать бан командой

unban 111.111.111.111

Anticaptcha balance checker

Набросал простенький скриптик на bash для чека баланса антикапчи с использованием curl/wget.

#!/bin/bash
login="your_login_here"
pword="your_password_here"
post_string="login=${login}&password=${pword}"
url="http://antigate.com/panel.php"

which curl > /dev/null
if [ $? -eq 0 ]; then
        #echo "Using curl..."
        GET_CMD="curl -sd "
else
which wget > /dev/null
   if [ $? -eq 0 ]; then
                #echo "Using wget..."
                GET_CMD="wget -q -O - --post-data "
        else
                echo "Could not find wget or curl"
                exit 2
        fi
fi
respone=`${GET_CMD} ${post_string} ${url}|  sed -n -e 's/.*<span class=\"hlinks\">\(.*\)<\/span>.*/\1/p'`
echo "Ваш баланс: ${respone}"

или однострочный вариант:

curl -sd "login=your_login_here&password=your_password_here" http://antigate.com/panel.php |  sed -n -e 's/.*<span class=\"hlinks\">\(.*\)<\/span>.*/\1/p'

Просматриваем скрытые фото Вконтакте

Довольно таки старый «баг» контакта, позволяющий просматривать закрытые фото (aka «Фотография защищена настройками приватности«).
Как это работает?

Берем нашу фотографию, которую хотим увидеть,
ищем в URL ее id(через «_«, например 111111_111111)
Заходим на свою стену и пишем:
[[photo111111_111111]]qwert
(после ]] обязательно необходимо добавить какую-нибудь комбинацию символов)
В итоге на стену будет отправлено превью нашей фотографии, по клику на которое мы получим полное фото. После этого запись на стене можно удалить.
Слудующий скрипт выполняет все вышеописанные действия автоматически, от вас только требуется указать ссылку, например:

http://vk.com/photos.php?act=show&id=17555451_140583084&uid=10824648

или
http://vk.com/photo17555451_140583084

(Ссылки в примерах случайные – следовательно неработоспособные)

< ?php
header('Content-Type: text/html; charset=utf-8');
echo '<form method="get"><input type="text" name="url" size="50"/><input type="submit" value="GET"/>';
if(!isset($_REQUEST['url']) || empty($_REQUEST['url']))die('Введите адрес картинки');
#################################
# Просматриваем скрытые фото Вконтакте
# by #Wolf#
# http://wolf-et.ru/
# License: gnu gpl v3
#################################
$email=''; //ваш логин
$pass=''; //ваш пароль
$url=$_REQUEST['url'];
function post($url,$post=false,$refer=false){//функция
$ch=curl_init($url);
curl_setopt($ch,CURLOPT_USERAGENT,"Mozilla/5.0(Windows;U;WindowsNT5.1;ru;rv:1.9.0.4)Gecko/2008102920AdCentriaIM/1.7Firefox/3.0.4");
curl_setopt($ch,CURLOPT_POST,1);
curl_setopt($ch,CURLOPT_HEADER,0);//заголовки
if($header)
curl_setopt($ch,CURLOPT_HTTPHEADER,$header);
curl_setopt($ch,CURLOPT_POSTFIELDS,$post);
curl_setopt($ch,CURLOPT_REFERER,$refer);
curl_setopt($ch,CURLOPT_COOKIEJAR,'../cookies.txt');
curl_setopt($ch,CURLOPT_COOKIEFILE,'../cookies.txt');
curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
$result=curl_exec($ch);
return $result;
}
function decode($hash)
{
  function hashes($str)
  {
      $length=strlen($str);
      $tmp="";
      for($i=0;$i< $length;$i++)
      $tmp.=$str[$length-$i-1];
      return $tmp;
  }
      return  hashes(substr($hash,strlen($hash)-5).substr($hash,4,strlen($hash)-12));
}
function rand_s($num){
$a=array_merge(range('A','Z'),range('a','z'),range(0,9));
shuffle($a);
for($i=0;$i<$num;$i++){
$t.=$a[array_rand($a)];
}
return $t;
}
//act=a_post_wall&hash=c1ac3250fd1533fdda&message=12313313&to_id=197445970603&top_id=&type=0&old=1
$result=iconv("windows-1251","UTF-8",post('http://vk.com/login.php','act=login&success_url=&fail_url=&try_to_login=1&to=&vk=&email='.$email.'&pass='.$pass,'http://vk.com/'));//auth
preg_match('#[\d]+_[\d]+#',$url,$photo);
preg_match('#javascript:\spostWall\(([\d]+),\s\'([0-9a-f]+)\'\)#is',$result,$data);
$r=post('http://vk.com/wall.php','act=a_post_wall&hash='.decode($data[2]).'&message='.urlencode('[[photo'.$photo[0].']]').'test&to_id='.$data[1].'&top_id=&type=0&old=1');//отправляем
//print_r($data);
$regxp='#id=\\\"wallphoto_src'.$photo[0].'\\\" value=\\\"(.*?)\\\"\s\\\/>#';
preg_match_all($regxp, $r, $m);
preg_match_all('#deletePost\(([\d]+),[\s]?([\d]+),[\s]?\'([a-z0-9]{18})\'\)#is',$r,$del);
$img=str_replace("\\","",$m[1][0]);
post('http://vk.com/wall.php','act=a_delete&oid='.$del[2][0].'&cid='.$del[1][0].'&hash='.$del[3][0].'&old=1');//удаляем
echo '<img src="'.$img.'" />';
?>

VK photos dumper

Сегодня мне понадобилось сохранить все фотографии из одного альбома ВКонтакте.

Кратко опишу:
Указываете ссылку на одну из фотографий в альбоме (пример vk.com/photo112028_151118304),
и скрипт парсит javascript массив с url’ами изображений.
Для этого необходимо включить «Ускоренный режим просмотра фотографий«,
что мы и делаем устаналивая в куках значение remixnotajaxphotos равное нулю. В итоге полученный массив с url’ами картинок качаем в указанную директорию.

<?php
set_time_limit(0);

$email='my_mail@gmail.com'; //ваш логин
$pass='my_password'; //ваш пароль
$albumurl='http://vk.com/photo111111_111111'; //ссылка на одну фотогарфию из альбома
$wdir=$_SERVER['DOCUMENT_ROOT'].'/vk'; // get full path. дописываем структуру папок от корня(/vk)
function post($url,$post=false,$refer=false){ //сопсно функция <img src='http://wolf-et.ru/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />
$ch=curl_init($url);
curl_setopt($ch,CURLOPT_USERAGENT,"Mozilla/5.0(Windows;U;WindowsNT5.1;ru;rv:1.9.0.4)Gecko/2008102920AdCentriaIM/1.7Firefox/3.0.4");
curl_setopt($ch,CURLOPT_POST,1);
curl_setopt($ch,CURLOPT_HEADER,1);//заголовки
curl_setopt($ch,CURLOPT_POSTFIELDS,$post);
curl_setopt($ch,CURLOPT_REFERER,$refer);
curl_setopt($ch,CURLOPT_COOKIE,'remixnotajaxphotos=0;'); //(Включаем ускоренный режим просмотра фотографий)ОБЯЗАТЕЛЬНО!
curl_setopt($ch,CURLOPT_COOKIEJAR,'cookies.txt');//пишем печеньки
curl_setopt($ch,CURLOPT_COOKIEFILE,'cookies.txt'); //читаем печеньки
curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
$result=curl_exec($ch);
return$result;
}
if(!file_exists($wdir)) //существует ли директория?
{if(!mkdir($wdir,0777,TRUE)) //НЕТ. пытаемся создать
{die('Cannot create folder <b><fontcolor="red">'.$wdir.'</font></b>.
Please change permissions on<b>777</b>.');}}// не получилось =( die
$result=post('http://vk.com/login.php',
'act=login&success_url=&fail_url=&try_to_login=1&to=&vk=&email='.$email.'&pass='.$pass,
'http://vk.com/');//auth
$result1=post($albumurl,false,'http://vk.com/profile.php');//go to album url
preg_match_all('#\\["(.*?)",[\\s]?"(.*?)",[\\s]?"(.*?)"\\]#i',$result1,$urls);//парсим фотки
foreach($urls[3] as $val){
$val=str_replace("\\","",$val);//удаляем экранирование символа "/"
preg_match('#([x|m]_.*?)[.]([jpg|gif|png$]{3})#i',$val,$names); //парсии имя файла и расширение
file_put_contents($wdir.'/'.$names[1].'.'.$names[2],file_get_contents($val));//качаем картинку и записываем в папку
}
?>

Kinopoisk.ru Parser

kinopoisk
Недавно мой знакомый (журналист на новостном портале) попросил меня «накатать» небольшой скриптик, для упрощения рутиной работы (копипастинг данных и оборачивание в BB-code).
Парсит нижеприведенный список значений:
1)Назывние
2)Оригинальное название
3)Год
4)Страна
5)Слоган
6)Режиссер
7)Сценарий
8)Продюсер
9)Оператор
10)Композитор
11)Жанр
12)Бюджет
13)Сборы в США
14)Сборы в мире
15)Сборы в России
16)Премьера (мир)
17)Премьера (РФ)
18)Релиз на DVD
19)Релиз на Blu-Ray
20)Рейтинг MPAA
21)Время
22)Описание
23)Рейтинг Кинопоиск
24)Рейтинг IMDb
25)Картинка(логотип фильма)
26)Ссылку на трейлер
27)Картинку к трейлеру
Парсер съедает ссылки вида:  http://www.kinopoisk.ru/level/1/film/251733/ и просто ID фильма: 251733

Авторизация необходима для обхода бана.

Код:

<form method='get'>
<input type='text' name='id' value='<?php echo $m[0];?>' size="40">
<input type='submit' value='get' name='submit'>
</form>
<?
#################################
# Kinopoisk.ru parser
# by #Wolf#
# http://wolf-et.ru/
#################################
if(empty($_REQUEST['id'])){die("die");}
//header ("Content-type: text/html; charset=utf-8");
$user='login';
$password='password';
   function post($url,$post,$refer)
	{
	if($post==null){$post=false;}
       $ch = curl_init($url);
       curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.4) Gecko/2008102920 AdCentriaIM/1.7 Firefox/3.0.4");
       curl_setopt($ch, CURLOPT_HEADER, 0);
       curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
       curl_setopt($ch, CURLOPT_REFERER, $refer);
       curl_setopt($ch, CURLOPT_COOKIEJAR, "./cookie.txt");
       curl_setopt($ch, CURLOPT_COOKIEFILE, "./cookie.txt");
       curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
       curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
       $result  = curl_exec($ch);
	   return $result;
	}
	preg_match('#([0-9]{2,7})#',$_REQUEST['id'],$m);
	post('http://www.kinopoisk.ru/level/30/','shop_user[login]='.$user.'&shop_user[pass]='.$password.'&shop_user[mem]=on&auth=%E2%EE%E9%F2%E8+%ED%E0+%F1%E0%E9%F2','http://www.kinopoisk.ru');
	$result=post('http://www.kinopoisk.ru/level/1/film/'.$m[0].'/',null,'http://www.kinopoisk.ru/');
    $result= iconv("cp1251", "utf8", $result);
	//echo $result;
	$parse=array(
	'name' =>         '#<h1 style=\"margin: 0; padding: 0\" class="moviename-big">(.*?)</h1>#si',
	'originalname'=>  '#13px">(.*?)</span>#si',
	'year' =>         '#год</td><td class=\"\">(.*?)</td></tr>#si',
	'country' =>      '#страна</td><td class=\"\">(.*?)</td></tr>#si',
	'slogan' =>       '#слоган</td><td style="color: \#555">(.*?)</td></tr>#si',
	'director' =>     '#режиссер</td><td>(.*?)</td></tr>#si',
	'script' =>       '#сценарий</td><td>(.*?)</td></tr>#si',
	'producer' =>     '#продюсер</td><td>(.*?)</td></tr>#si',
	'operator' =>     '#оператор</td><td>(.*?)</td></tr>#si',
	'composer' =>     '#композитор</td><td>(.*?)</td></tr>#si',
	'genre' =>        '#жанр</td><td>(.*?)</td></tr>#si',
	'budget' =>       '#бюджет</td><td class=\"dollar\">(.*?)</td></tr>#si',
	'usa_charges' =>  '#США</td><td class=\"dollar\">(.*?)</td></tr>#si',
	'world_charges'=> '#мире</td><td class=\"dollar\">(.*?)</td></tr>#si',
	'rus_charges' =>  '#России</td><td class=\"dollar\">(.*?)</td></tr>#si',
	'world_premiere'=>'#мир\)</td><td class=\"calendar\">(.*?)</td></tr>#si',
	'rus_premiere' => '#РФ\)</td><td class="calendar">(.*?)</td></tr>#si',
	'dvd' =>          '#dvd">(.*?)</td></tr>#is',
	'bluray' =>       '#bluray">(.*?)</td></tr>#is',
	'MPAA' =>         '#MPAA</td><td class=\"[\S]{1,100}\"><a href=\'[\S]{1,100}\'><img src=\'/[\S]{1,100}\' height=11 alt=\'(.*?)\' border=0#si',
	'time' =>         '#id="runtime">(.*?)</td></tr>#si',
	'description' =>  '#<span class=\"_reachbanner_\">(.*?)</span>#si',
	'imdb' =>         '#IMDB:\s(.*?)</div>#si',
	'kinopoisk' =>    '#text-decoration: none">(.*?)<span#si',
	'kp_votes' =>     '#<span style=\"font:100 14px tahoma, verdana\">(.*?)</span>#si',
	 );

   $new=array();
   foreach($parse as $index => $value)
   {
   preg_match($value,$result,$matches);
   $new[$index]=preg_replace("#<a.+?>(.+?)</a>#is","$1",$matches[1]);
   }
preg_match('#getTrailer\("(.*?)","(.*?)","(.*?)","[0-9]+","[0-9]+","(.*?)",""\);#i',$result,$trailer);
  /////////////////////////print//////////////////////////////
echo '[img]http://www.kinopoisk.ru/images/film/'.$m[0].'.jpg[/img]<br />';
echo '[Ссылка на трейлер] http://'.$trailer[4].'.kinopoisk.ru/trailers/flv/'.$trailer[2].'<br />';
echo '[Трейлер preview] http://'.$trailer[4].'.kinopoisk.ru/trailers/flv/'.$trailer[3].'<br />';
echo '[b]Назывние:[/b]'.$new['name'].'<br />';
echo '[b]Оригинальное название:[/b]'.$new['originalname'].'<br />';
echo '[b]Год:[/b]'.$new['year'].'<br />';
echo '[b]Страна:[/b]'.$new['country'].'<br />';
echo '[b]Слоган:[/b]'.$new['slogan'].'<br />';
echo '[b]Режиссер:[/b]'.$new['director'].'<br />';
echo '[b]Сценарий:[/b]'.$new['script'].'<br />';
echo '[b]Продюсер:[/b]'.$new['producer'].'<br />';
echo '[b]Оператор:[/b]'.$new['operator'].'<br />';
echo '[b]Композитор:[/b]'.$new['composer'].'<br />';
echo '[b]Жанр:[/b]'.$new['genre'].'<br />';
echo '[b]Бюджет:[/b]'.$new['budget'].'<br />';
echo '[b]Сборы в США:[/b]'.$new['usa_charges'].'<br />';
echo '[b]Сборы в мире:[/b]'.$new['world_charges'].'<br />';
echo '[b]Сборы в России:[/b]'.$new['rus_charges'].'<br />';
echo '[b]Премьера (мир):[/b]'.$new['world_premiere'].'<br />';
echo '[b]Премьера (РФ):[/b]'.$new['rus_premiere'].'<br />';
echo '[b]Релиз на DVD:[/b]'.$new['dvd'].'<br />';
echo '[b]Релиз на Blu-Ray:[/b]'.$new['bluray'].'<br />';
echo '[b]Рейтинг MPAA:[/b]'.$new['MPAA'].'<br />';
echo '[b]Время:[/b]'.$new['time'].'<br />';
echo '[b]Описание:[/b]'.$new['description'].'<br />';
echo '[b]Рейтинг Кинопоиск:[/b]'.$new['kinopoisk'].'('.$new['kp_votes'].' )<br />';
echo '[b]Рейтинг IMDb:[/b]'.$new['imdb'].'<br />';
?>

Happy new year 0x7DA!

С праздником, дорогие друзья!
0x7DA
/me загадал на новый год инвайт на habrahabr

Большое спасибо inlanger’y за предоставленный инвайт!

Смотрим HEX календарик с хабра :]
hex calendar