Уходим на технические работы в nginx

    error_page 503 /during_build.html;

    location / {

        if (-f /var/www/during_build.html) {
            return 503;
        }

    }

    location = /during_build.html {
        root /var/www/;
        internal;
    }

Этот способ мне не нравится из-за постоянного if
Если кто знает метод лучше, напишите..
4 ноября 2014, 07:12

Вот так..

4 ноября 2014, 07:12

Программист-сантехник

4 ноября 2014, 07:12

XSS для IE через style

<span style="width: exp​ression(alert('OLOLO!'));"></span>
4 ноября 2014, 07:12

Создание и монтирование дисков в памяти

mdconfig -a -t swap -s 128M -u 10
newfs -U /dev/md10
mount /dev/md10 /tmp
chmod 1777 /tmp

Теперь содержимое каталога /tmp будет храниться в памяти и исчезать после ребутов :)

Еще вариант
mdmfs -S -o async -s 1024m md0 /tmpfs
4 ноября 2014, 07:12

Получение информации о слотах оперативной памяти во FreeBSD

Нужно установить утилиту dmidecode. Ставится из портов
portinstall dmidecode

Получаем информацию
dmidecode -t memory
4 ноября 2014, 07:12

Пакетная перекодировка файлов из windows-1251 в utf-8

Для примера перекодируем все php файлы в текущей директории и ее поддиректориях
#!/bin/sh
for i in `find . -name "*.php" -type f`
do
echo $i
iconv -f WINDOWS-1251 -t UTF-8 "$i" > tmp
mv -f tmp "$i"
done

На винде человек часа 4 потратил на поиск проги, которая это сделает :)
4 ноября 2014, 07:12

Очистка SWAP

swapoff -a
swapon -a
4 ноября 2014, 07:12

Изменение homedir у пользователя

chsh username

Если открывается vi, то нажмите a, потом когда все отредактируете escape и наберете :wq
4 ноября 2014, 07:12

Определение числа ядер у процессора в Centos

При настройке бывает важно знать число CPU
cat /proc/cpuinfo
4 ноября 2014, 07:12

Качаем видео с youtube.com во FreeBsd

Для начала установим youtube-dl
cd  /usr/ports/www/youtube_dl
make install clean
rehash


Все, теперь можно качать исходники
youtube-dl 'http://www.youtube.com/watch?v=3YxaaGgTQYM'

скачается что-то типа CNX6z4VtC28.flv
4 ноября 2014, 07:12

Установка pear на zend server ce 5.6.0

В дистрибутиве некорректный phar архив!
Идем в ZendServer\bin\PEAR и заменяем файл go-pear.phar на вот этот
http://pear.php.net/go-pear.phar
Затем идем в Zend\ZendServer\bin\go-pear.bat и заменяем
%PHP_BIN% -d output_buffering=0 -d PEAR\go-pear.phar

на
%PHP_BIN% -d output_buffering=0 -d phar.require_hash=0 PEAR\go-pear.phar

Потом запускаем из консоли и все время жмем enter
ZendServer\bin\go-pear.bat

После установки pear можно что-нибудь поставить, например, PHPUnit
pear channel-update pear.php.net
pear upgrade pear
pear channel-discover pear.phpunit.de 
pear channel-discover pear.symfony-project.com
pear install phpunit/PHPUnit

Тестим
phpunit


Если не поставилось чистим кэши
pear clear-cache
pear channel-discover pear.phpunit.de
pear channel-discover pear.symfony-project.com
install --alldeps phpunit/PHPUnit
4 ноября 2014, 07:12

Установка JDK на debian

apt-get install sun-java6-jre
apt-get install openjdk-6-jdk


Может понадобиться добавить
deb http://ftp.us.debian.org/debian/ squeeze main non-free 


в /etc/apt/sources.list
4 ноября 2014, 07:12

Класс для работы со временем

<?php 
/**
 
 * @name Класс для работы со временем
 
 * @author Скитч. ICQ: 2134410. 
 
 * @date  23.12.2011
 
 * @version  0.1
 
 */
 
class Mumbu_time{
<cut-->
           /**
    * длинные названия месяцов
    */
        private $monthlong = array('января', 'февраля', 'марта', 'апреля', 'мая', 'июня', 'июля', 'августа', 'сентября', 'октября', 'ноября', 'декабря');
        private $monthshort = array('янв', 'фев', 'мар', 'апр', 'май', 'июн', 'июл', 'авг', 'сен', 'окт', 'ноя', 'дек');
 
           /**
    * множественные формы слов
    */
        private $yearword = array('год', 'года', 'лет');
        private $monthword = array('месяц', 'месяца', 'месяцев');
        private $dayword = array('день', 'дней', 'дней');
        private $hourword = array('час', 'часа', 'часов');
        private $minuteword = array('минута', 'минуты', 'минут');
        private $secondword = array('секунда', 'секунды', 'секунд');
 
           /**
    * формат вывода даты
    */
        private $year = 'y';
        private $month = 'm';
        private $day = 'd';
        private $hour = 'H';
        private $minute = 'i';
        private $second = 's';
 
    /**
    * @param $tz - timezone.
    */
    function __construct($tz = null){
 
            if($tz == null)
 
            date_default_timezone_set('Europe/Moscow');
 
            else
 
            date_default_timezone_set($tz);
 
    }
 
    /**
    * Обрабатываем и выводим time()
    */
    public function get(){
 
            return time();
    }
 
    /**
    * Выводим время $fullmonth - полное название месяца
    */
    public function clock($time = null, $fullmonth = true){
 
                $time = ($time == null ? $this->get() : $time);
 
                $d = date($this->day, $time);
 
                $m = date($this->month, $time);
 
                $y = date($this->year, $time);
                    
                $m = ($fullmonth ? $this->monthlong[$m - 1] : $this->monthshort[$m - 1]);
 
                $full_time = $d.' '.$m.' '.$y.' в '.date(($this->hour != null ? $this->hour.':' : null) . ($this->minute != null ? ($this->hour == null ? ':' : null) . $this->minute : null), $time);
 
                 $date = date('d.m.Y', $time);
 
                 $time = date('H:i', $time);
 
                 if($date == date('d.m.Y')) $full_time = date('Сегодня в H:i', $time);
 
                 if($date == date('d.m.Y', time()-60*60*24)) $full_time = date('Вчера в H:i', $time);
 
                 return $full_time;
    }
 
           /**
    * Время с момента
    */
    public function time_ago($time= null){
 
             #$ltime = $this->get() - $time;
             $ltime = ($time == null ? $this->get() : $time) - $time;
 
             if($ltime < 5){ return 'только что'; 
                }elseif($ltime < 60){ return $ltime.' '.$this->plural_form($ltime, 'секунду', 'секунды', 'секунд').''; 
             }elseif($ltime < 3600){ return round($ltime/60).' '.$this->plural_form(round($ltime/60), 'минуту', 'минуты', 'минут');
             }elseif($ltime < 86400){ return round($ltime/3600).' '.$this->plural_form(round($ltime/3600), 'час', 'часа', 'часов');
             }elseif($ltime > 1814400){ return $this->clock($ltime);
             }elseif($ltime > 604800){ return round($ltime/604800).' '.$this->plural_form(round($ltime/86400), 'неделю', 'недели', 'недель');
             }elseif($ltime > 86400){ return round($ltime/86400).' '.$this->plural_form(round($ltime/86400), 'день', 'дня', 'дней'); 
                }
 
    }
 
           /**
    * Обратный отсчёт
 
        * @var early - время от которого начинается отсчет
 
        * @var later - время до которого идет отсчет
 
        * @param enclosure - вложенность вывода
    */
    public function backtime($early, $later = null, $enclosure = 5){
 
                        $out = '';
 
                        $count = 0;
 
                        if ($later == null)
 
                $later = $this->get();
 
                $year = abs(date('y', $later) - date('y', $early));
 
                if($year > 0){
 
                if($enclosure != 0 and $count < $enclosure) {
 
                ++$count;
 
                $out .= $year.' '.$this->plural_form($year, $this->yearword);
                }
    }
 
                $month = abs(date('m', $later) - date('m', $early));
 
                if($month != 0){
 
                if($enclosure != 0 and $count < $enclosure) {
 
                ++$count;
 
                $out .= ' '.$month.' '.$this->plural_form($month, $this->monthword);
                }
        }
 
                $day = abs(date('d', $later) - date('d', $early));
 
                if($day > 0){
 
                if($enclosure != 0 and $count < $enclosure) {
 
                ++$count;
 
                $out .= ' '.$day.' '.$this->plural_form($day, $this->dayword);
                }
        }
 
                $hour = abs(date('H', $later) - date('H', $early));
 
                if($hour > 0){
 
                if($enclosure != 0 and $count < $enclosure) {
 
                ++$count;
 
                $out .= ' '.$hour.' '.$this->plural_form($hour, $this->hourword);
 
                }
        }
 
                $minute = abs(date('i', $later) - date('i', $early));
 
                if($minute > 0) {
 
                if($enclosure != 0 and $count < $enclosure) {
 
                ++$count;
 
                $out .= ' '.$minute.' '.$this->plural_form($minute, $this->minuteword);
 
                }
        }
 
                $second = abs(date('s', $later) - date('s', $early));
 
                if($second > 0) {
 
                if($enclosure != 0 and $count < $enclosure) {
 
                $out .= ' '.$second.' '.$this->plural_form($second, $this->secondword);
 
                }
        }
 
        return $out;
 
    }
 
           /**
    * Форма множественного числа
    */
    private function plural_form($num, $array){
 
                        $q = ($num % 10 == 1 && $num % 100 != 11 ? 0 : ($num % 10 >= 2 && $num % 10 <= 4 &&
 
                        ($num % 100 < 10 or $num % 100 >= 20) ? 1 : 2));
 
                        return ($q == 0 ? $array[0] : ($q == 1 ? $array[1] : ($q == 2 ? $array[2] : null)));
    }
 
 
}
?>


Использовать:

INPUT:
$time = new Mumbu_time(); 
echo 'До Нового года осталось: '.$time->backtime(mktime(23,59,59,12,31,2011));

OUTPUT:
До Нового года осталось: 11 месяцев 5 дней 1 час 47 минут 59 секунд 


INPUT:
$time = new Mumbu_time(); 
echo $time->clock();

OUTPUT:
26 Января 11 в 22:14

4 ноября 2014, 07:12

Решение проблемы "Server refused to allocate pty" на centos 5

Для начала проверяем в /etc/fstab такую строчку
none    /dev/pts    devpts    rw    0    0

Если она есть, а проблема осталась делаем следующее
rm -rf /dev/ptmx
mknod /dev/ptmx c 5 2
chmod 666 /dev/ptmx
umount /dev/pts
rm -rf /dev/pts
mkdir /dev/pts
mount /dev/pts
4 ноября 2014, 07:12

Функция обрезания текста по тегу <cut/>

function cut($text){
$full_text = explode("<cut/>",$text);

return $full_text;
}
4 ноября 2014, 07:12

Функция вывода последних сообщений из твиттера

<?php
function twitter($name, $count){
//$name - логин юзера, $count - сколько последних сообщений выводить
$c = $count + 1;
 
$dom = new DomDocument();
 
$dom->load("http://twitter.com/statuses/user_timeline/".$name.".xml?count=".$c);
 
$twit = $dom->getElementsByTagName("text");
 
$date = $dom->getElementsByTagName("created_at");
 
$id = $dom->getElementsByTagName("id");
 
for ($i=0;$i<$count;$i++){
 
list($dweek, $m, $d, $time, $cl, $y) = explode(" ", $date->item($i*2)->nodeValue);
 
$month_str = array(
 
"Jan","Feb","Mar",
 
"Apr","May","Jun",
 
"Jul","Aug","Sep",
 
"Oct","Nov","Dec");
 
$month_int = array(
 
"января", "февраля", "марта",
 
"апреля", "мая", "июня",
 
"июля", "августа", "сентября",
 
"октября", "ноября", "декабря");
 
$m = str_replace($month_str, $month_int, $m);
 
$postdate = $d." ".$m." ".$y;
 
$postid = $id->item($i*2)->nodeValue;
 
$post = $twit->item($i)->nodeValue;
 
$post = bbcode($post);
 
echo $post.' (<a href="http://twitter.com/'.$name.'/status/'.$postid.'">'.$postdate.'</a>)<br/>';
}
 
}
?>
4 ноября 2014, 07:12

Склонение слов по числам

function numword() {  
    $args = func_get_args();  
    $num = $args[0] % 100;  
     
    if ($num > 19) {  
        $num = $num % 10;  
    }  

    switch ($num) {  
        case 1:  { return $args[1]; }  
        case 2:  
        case 3:  
        case 4:  { return $args[2]; }  
        default: { return $args[3]; }  
    }  
}


Использовать:
echo numword('1', 'человек', 'человека', 'человек');
4 ноября 2014, 07:12

Полезные PHP функции

Склонение слов по числам
function numword() {  
    $args = func_get_args();  
    $num = $args[0] % 100;  
     
    if ($num > 19) {  
        $num = $num % 10;  
    }  

    switch ($num) {  
        case 1:  { return $args[1]; }  
        case 2:  
        case 3:  
        case 4:  { return $args[2]; }  
        default: { return $args[3]; }  
    }  
} 


Правильный вывод меток
function tegs($str){
    if(!empty($str)){
    $tegs = explode(',', $str);
    $all_tegs = count($tegs);
    $str_Tegs = '<a href="/tegs.php?search='.input($tegs['0']).'">'.input($tegs['0']).'</a>';
    for($i = 1; $i<=$all_tegs-1; $i++){
        $str_Tegs .= ', <a href="/tegs.php?search='.input($tegs[$i]).'">'.input($tegs[$i]).'</a>';        
    }
    $str = $str_Tegs;
    } else {
        $str = 'Меток нет.';
    }
 return $str;
}

// Использовать
echo tegs('php', 'mysql');


Функция обрезания текста по тегу
function cut($text){
$full_text = explode("<cut/>",$text);

return $full_text;
}


Функция подсчета возраста
function age($day, $mouth, $year)
{
	$age = date('Y') - $year;
	$_m = date('m');
	if($_m < $mouth || ($_m == $mouth && date('d') < $day))
	$age--;
	return $age;
}
4 ноября 2014, 07:12

Класс для работы с MySQL

<?php
class MumbuDB {
    /**
    * Ссылка соединения
    */
    public $db_link;
 
    /**
    * Режим отладки
    */
    public $debugging = true;
 
    /**
    * Запросы
    */
    public $list_queries = array();
 
    /**
    * Подключение к MySQL
    */
    public function connect($DB_HOST,$DB_USER,$DB_NAME,$DB_PASSWORD){
 
            $this->db_link = mysql_connect($DB_HOST,$DB_USER,$DB_PASSWORD) or $this->error("Не возможно подключиться к MySQL серверу");
                mysql_select_db($DB_NAME) or $this->error('Не возможно выбрать базу данных "'.$DB_NAME.'"');
                mysql_query("SET NAMES UTF8");
 
    }
 
    /**
    * Аналог mysql_num_rows
    */
    public function mumbu_sql($sql){
        # Засекаем время выполнения запроса
        $start_time = microtime(true);
 
        # Выполняем запрос
                $result = mysql_query($sql, $this->db_link) or $this->error($sql . PHP_EOL . mysql_error($this->db_link));
 
        # Получаем время по окончанию запроса
        $end_time = microtime(true);
 
        # Высчитываем время на запрос
        $query_time = $end_time - $start_time;
 
        $this->list_queries[] = array(
            'query' => $query,
            'time' => $query_time
        );
 
        return $result;
 
 
    }
 
    /**
    * Аналог mysql_num_rows
    */
    public function mumbu_num_rows($sql){
 
        return mysql_num_rows($this->mumbu_sql($sql));
 
    }
 
    /**
    * Аналог mysql_result
    */
    public function mumbu_one($sql){
 
        return mysql_result($this->mumbu_sql($sql),0);
 
    }
 
    /**
    * Аналог mysql_fetch_assoc
    */
    public function mumbu_fetch($sql){
 
        return mysql_fetch_assoc($this->mumbu_sql($sql));
 
    }
 
    /**
    * Последний вставленный id
    */
    public function insert_id() {
        return mysql_insert_id($this->db_link);
    }
 
    /**
    * Закрытие соединения
    */
    public function close(){
        if($this->db_link) mysql_close($this->db_link);
        $this->db_link = NULL;
        exit;
    }
 
    /**
    * Вывод ошибки и завершение работы
    */
    protected function error($error){
        if($this->debugging) print "<pre>". $error ."
";
exit;
}


}
?>

Использовать:

$DB = new MumbuDB();
$DB->connect('DB_HOST', 'DB_USER', 'DB_NAME', 'DB_PASSWORD');


Небольшой профайлер приложения
function a_profiler($start_time){
	GLOBAL $DB;

	$end_time = microtime(true);

	echo PHP_EOL .'<!-- '. PHP_EOL;
	echo 'Время выполнения: '. round($end_time - $start_time, 5) .' сек.'. PHP_EOL . PHP_EOL;
	if($DB) {
		echo 'Запросов к БД: '. count($DB->list_queries) . PHP_EOL;
		if(count($DB->list_queries) > 0) {
			foreach($DB->list_queries AS $query_data) {
				echo $query_data['query'] .' ('. round($query_data['time'], 5) .' сек.)'. PHP_EOL;
			}
		}
	}
	else {
		echo "Подключения к базе не было.";
	}
	echo PHP_EOL . PHP_EOL;
	echo 'GET данные:'. PHP_EOL;
	print_r($_GET);
	echo PHP_EOL . PHP_EOL;
	echo 'POST данные:'. PHP_EOL;
	print_r($_POST);
	echo PHP_EOL . PHP_EOL;
	echo 'COOKIE данные:'. PHP_EOL;
	print_r($_COOKIE);
	echo PHP_EOL . PHP_EOL;
	echo 'SESSION данные:'. PHP_EOL;
	print_r($_SESSION);
	echo ' -->';
}
4 ноября 2014, 07:12