PDO mysql, как закрыть коннект

Заметил интересную особенность: чтобы закрыть коннект недостаточно занулить pdo объект
<?php
$db = new PDO(
    'mysql:host=localhost;dbname=test',
    'root',
    'root',
    array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")
);

$q = $db->prepare('select now()');
$q->execute();
$now = $q->fetch();
//без этой строчки соединение с базой не закроется! (смотреть ниже)
//кто не верит может закомментить эту строчку и посмотреть process list
unset($q);
var_dump($now);
//допустим, нам нужно закрыть соединение с базой, чтобы произвести какие-то действия
$db = null;
//собственно действия
sleep(100);
?>
27 декабря 2014, 06:09

Установка ssh на Centos

yum -y install openssh-server openssh-clients
26 декабря 2014, 11:23

Циклы на bash

for i in `seq 1 100`;
do
  echo $i
done 
#!/bin/bash
for i in {1..100}
do
   echo "starting $i"
done
26 декабря 2014, 04:42

Конвертация числа из десятичной системы в любую

<?php
class BaseConvert {
    private static $base = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';

    public static function encode($num, $b = 62) {
        $r = $num % $b;
        $res = self::$base[$r];
        $q = floor($num / $b);
        while ($q) {
            $r = $q % $b;
            $q = floor($q / $b);
            $res = self::$base[$r] . $res;
        }
        return $res;
    }

    public static function decode($num, $b = 62) {
        $limit = strlen($num);
        $res = strpos(self::$base, $num[0]);
        for ($i = 1; $i < $limit; $i++) {
            $res = $b * $res + strpos(self::$base, $num[$i]);
        }
        return $res;
    }
}
var_dump(BaseConvert::encode(124, 36), BaseConvert::decode('3g', 36));
Тоже самое стандартными средствами
<?php
var_dump(
base_convert(124, 10, 36),
base_convert('3g', 36, 10)
);
24 декабря 2014, 15:13

mysql - InnoDB: Unable to lock ./ibdata1, error: 11

service mysql-server stop
mv /var/db/mysql/ibdata1 /var/db/mysql/ibdata1.bak
cp -a /var/db/mysql/ibdata1.bak /var/db/mysql/ibdata1
chown -R mysql:mysql .
service mysql-server start
18 декабря 2014, 02:18

Git pull из определенной директории (без cd)

git >= 1.8.5
git -C /home/project pull
12 декабря 2014, 10:04

Решение проблемы с keglim в nginx

Если у вас зависает nginx и в топе вы видите следующее
21106 www           1  20  -10 49668K 24392K keglim 13   4:33   8.50% nginx
То не обходимо увеличить kern.ipc.nmbjumbop
sysctl -w kern.ipc.nmbjumbop=400000
Также стоит записать в /etc/sysctl.conf
kern.ipc.nmbjumbop=4000000
11 декабря 2014, 08:24

Проверка и восстановления дисков при помощи fsck

Это нужно делать в single mode
fsck -y -f
28 ноября 2014, 13:46

Получение серийного номера HDD в Centos

hdparm -I /dev/sda | grep Serial
28 ноября 2014, 12:45

Получение серийного номера HDD во FreeBSD

camcontrol identify ada1 | grep serial
28 ноября 2014, 12:41

Задание max open files на Centos

Значение по умолчанию очень маленькое 1024, для многочисленных коннектов надо его увеличить. Изменить это значение можно так, но это действует только до перезагрузки.
ulimit -n 200000
Чтобы значение не сбрасывалось пишем в /etc/sysctl.conf
fs.file-max = 200000
Также пишем в /etc/security/limits.conf
* hard nofile 200000
* soft nofile 200000
И еще устанавливаем значение тут (в необходимости этого пункта не уверен)
echo 200000 > /proc/sys/fs/file-max
22 ноября 2014, 23:03

Крутилка баннеров на JavaScript

По мотивам article#55
<div id="banner"></div>
<script>
    function showBanner(elem) {
        var banners = [
            {
                'src': 'http://url1.jpg',
                'url': 'http://url1.page',
                'alt': 'title1'
            },
            {
                'src': 'http://url2.jpg',
                'url': 'http://url2.page',
                'alt': 'title2'
            },
            {
                'src': 'http://url3.jpg',
                'url': 'http://url3.page',
                'alt': 'title3'
            }
        ];
        var banner = banners[Math.floor(Math.random() * banners.length)];
        elem.innerHTML = '<a href="' + banner.url + '"><img src="' + banner.src + '" alt="' + banner.alt + '" />';
    }
    
    showBanner(document.getElementById('banner'));
</script>
17 ноября 2014, 23:50

Catching errors in PHP

15 ноября 2014, 13:40

Проверка bash на уязвимость shellshock

Если эта команда выводит "busted", то надо обновить bash
env X="() { :;} ; echo busted" bash -c "echo stuff"
11 ноября 2014, 13:50

mod_php во FreeBsd 10

Этот модуль убрали из порта php5 Теперь его нужно ставить отдельно из
/usr/ports/www/mod_php5
либо
/usr/ports/www/mod_php55
10 ноября 2014, 12:32

Простейший clickunder

При клике в любое место на странице перекидывает на яндекс, делает это один раз в сутки (инфа в куках).
<!doctype html>
<html>
<body>
<a href="http://google.com">click</a>
</body>
<script>
document.onmouseup = function(){
    if (getCookie('bdclk') == undefined) {
        setCookie('bdclk', 1, '/', 24*3600);
        window.open('http://www.ya.ru', '_blank'); 
        return true;
    }
    return false;
};

function getCookie(name) {
    if (/\W/.test(name)) return undefined;
    var matches = document.cookie.match(new RegExp("(?:^|; )" + name + "=([^;]*)"));
    return matches ? decodeURIComponent(matches[1]) : undefined;
}

function setCookie(name, value, path, expires) {
    var date = new Date( new Date().getTime() + expires * 1000 );
    document.cookie = name + '=' + value + '; path=' + '/' +'; expires=' + date.toUTCString();
    return true;
}
</script>
</html>
5 ноября 2014, 17:49

Узнать текущий коммит в git

git log -1
Также текущий хеш коммита
git rev-parse HEAD
4 ноября 2014, 11:31

Как восстановить сайт через google cache

Наверное заметили, что сайт не работал некоторое время? Как оно обычно и бывает, я потерял дамп базы (точнее он оказался битым, но не суть). Как же восстановить все статьи на сайте? Я сразу полез в кэш гугла и накатал вот такой скрипт
<?php
for ($i = 1; $i <= 395; $i++) {
    $file = __DIR__ . '/storage/' . $i . '.html';
    echo "get $i \n";

    if (!file_exists($file)) {
        copy("http://webcache.googleusercontent.com/search?q=cache:snippets.pp.ru/article/$i", $file);
        sleep(10);
    }
}
?>
С локального компа мне не удалось скачать все статьи, гугл меня забанил где-то после 80 штук, на каждый запрос вылазила капча, поэтому пришлось задействовать несколько сервачков :D Кстати, задание юзер агента и прочих заголовков не помогало, дело именно в частоте запросов, так что если будете качать с кеша гугла, то ставьте побольше таймауты, либо запасайтесь серваками. Но через пару дней гугл все равно разбанивает.
4 ноября 2014, 07:31

Установка ffmpeg на Centos 6.5

rpm -Uvh http://dl.atrpms.net/el6-x86_64/atrpms/stable/atrpms-repo-6-7.el6.x86_64.rpm
yum install -y ffmpeg ffmpeg-devel
4 ноября 2014, 07:12

iptables v1.4.12: can't initialize iptables table 'filter': Table does not exist

 sudo apt-get install linux-image-$(uname -r)
4 ноября 2014, 07:12