Устанавливаем временную зону

Создаем ссылку на обновленную временную зону. Я живу в Киеве, поэтому моя зона Europe/Kiev:

ln -sf /usr/share/zoneinfo/Europe/Kiev /etc/localtime

Проверяем установленную зону в файле /etc/sysconfig/clock

cat /etc/sysconfig/clock | grep ZONE

Вот и все, проверяем при помощи

date

Количество просмотров :2984

Подключаемся по VPN через iptables nat

Вот, столкнулся с такой ситуацией, пользователи за шлюзом, на шлюзе вся подсеть натиться без ограничений, а вот VPN работать не хочет. Решение оказалось простым, все что нужно, это подгрузить следующие модули — ip_gre, ip_nat_pptp, ip_conntrack_pptp. Подгрузить можно вот так:

modprobe ip_gre
modprobe ip_nat_pptp
modprobe ip_conntrack_pptp

Количество просмотров :3069

Бэкапы виртуальных машин в VMWare ESXi

Как не странно, но это действительно большая проблема, так как специальных утилит для этого нет, а то что есть немного мудрено, ведь можно сделать проще:

#!/bin/sh

sourcedir=/vmfs/volumes/datastore1
backupdir=/vmfs/volumes/nfs-backup

for i in `vim-cmd vmsvc/getallvms|awk '{print($1 "-" $2)}'`; do
if [ $i != "Vmid-Name" ]; then
vmid=${i%%-*}
vmfs=${i#*-}

mkdir $backupdir/$vmfs.`date +%d.%m.%Y`
vim-cmd vmsvc/snapshot.create $vmid $vmfs@snap $vmfs@snap includeMemory 0
for j in `ls $sourcedir/$vmfs`; do
cat $sourcedir/$vmfs/$j | gzip > $backupdir/$vmfs.`date +%d.%m.%Y`/$j.gz
done
vim-cmd vmsvc/snapshot.removeall $vmid
fi
done

cd $backupdir; find . -type d -mtime +5 -exec rm -rf {} \;

/vmfs/volumes/nfs-backup – соответственно nfs диск где будут лежать бэкапы
/vmfs/volumes/datastore1 – хранилище виртуальных машин


Количество просмотров :2585

Кодирование и Декодирование файлов при помощи OpenSSL

Если вам вдруг понадобилось зашифровать данные, то вы можете воспользоваться openssl-ем. Для кодирования:

openssl des3 -salt -in $FILENAME -out ${FILENAME}.des3

и для того, что декодировать:

openssl des3 -d -salt -in ${FILENAME}.des3 -out ${FILENAME}

Количество просмотров :1847

Php переводим при помощи Google

Используя специальный api вы можете переводить текст вашего сайта «на лету». Для этого вам понадобиться следующая функция:

<?php
function gtranslate($s_text, $s_lang, $d_lang){
//определяем переменную, которая содержит api url Google Translate
$url = "http://ajax.googleapis.com/ajax/services/language/translate?v=1.0&q=".urlencode($s_text)
."&langpair=".urlencode($s_lang.'|'.$d_lang);
$c = curl_init();
curl_setopt($c, CURLOPT_URL, $url);
curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($c, CURLOPT_REFERER, "http://osticket.biz");
$b = curl_exec($c);
curl_close($c);
$json = json_decode($b, true);
if ($json['responseStatus'] != 200)return false;
return $json['responseData']['translatedText'];
}  
?>

Использовать можно так :

$text=gtranslate($text, «ru», «uk»);

Количество просмотров :3069

Php PDO работаем с MySQL

Кто-то пишет свой набор функций для работы с MySQL, кто-то работает с фреймворками где обычно есть полный набор необходимых инструментов, а мне вот например нравиться PDO. И так, для подключения к базе —

<?php
$dbhost ='localhost';
// username and password to log onto db server
$dbuser ='user';
$dbpass ='password';
// name of database
$dbname='base';
//Charset
$sqlchar='utf8';


$db = new PDO ( 'mysql:host=' . $dbhost . ';dbname=' . $dbname, $dbuser, $dbpass);
$db->query ( 'SET character_set_connection = '.$sqlchar );
$db->query ( 'SET character_set_client = '.$sqlchar );
$db->query ( 'SET character_set_results = '.$sqlchar );
?>

Получаем одну строку:

$row = $db->query(«select row from tablename WHERE 1;»)->fetch();

Все строки

$row = $db->query(«select row from tablename WHERE 1;»)->fetchAll();

Определения кода ошибки

$ercode = $db->exec(«delete from tablename where id='».$id.»‘;»)->errorCode();
print_r($ercode);

Определения последнего ID

$lastid = $db->lastInsertId();

Определение количества строк

$player_stat = $db->query(«SELECT COUNT(*) FROM players WHERE name = ‘».$val[‘name’].»‘;»)->fetchColumn()

Вставить новую строку, если данные хранятся в массиве $t в формате $t[название столбца] = данные

$q = $db->prepare(«INSERT INTO table («.(implode(«,»,array_keys($t))).») VALUES (‘».(implode(«‘,'»,$t)).»‘);»)->execute();

Изменяем строку

$db->prepare(«UPDATE table SET column=’data’ WHERE id = ‘1’;»)->execute();

Для того что бы проверить подключены ли модуль php-pdo и php-pdo_mysq:

<?php
if ( !extension_loaded('pdo')  ){
....
}elseif ( !extension_loaded('pdo_mysql') ) {
....
}
?>



Количество просмотров :11388

Js Spoiler или исчезающие div-ы

И так, пускай нам нужно по клику прятать и открывать контент. Демка скрипта Для этого можно использовать следующий скрипт:

<script language="javascript">
function toggle_start() {
var ele = document.getElementById("toggleStart");
var text = document.getElementById("displayStart");
if(ele.style.display == "block") {
ele.style.display = "none";
text.innerHTML = "Start";
}
else {
ele.style.display = "block";
text.innerHTML = "Start";
}
}
</script>

Размещаем данный скрипт в body. Далее нам нужна ссылка нажимая на которую мы будем показывать и прятать содержимое:

<a id=»displayStart» class=»» href=»javascript:toggle_start();» target=»»>Start</a>

и теперь сам контент:

<div id=»toggleStart» style=»display: none;»>
START! START! START!
</div>

Количество просмотров :2395

JS обновляем кусочек кода с помощью jquery и ajax

И так, предположим, что вам необходимо с определенным интервалом обновлять определенный кусочек кода, сделать это можно при помощи jquery. Посмотреть демку. Для это как всегда качаем jquery отсюда. Подключаем:

<script type="text/javascript" src="js/jquery.js"></script>

Далее сам скрипт:

<script type="text/javascript">
$(document).ready(function() {
$("#load").load("http://osticket.biz/demo/time.php");
var refreshId = setInterval(function() {
$("#load").load('http://osticket.biz/demo/time.php');
}, 30000);
$.ajaxSetup({ cache: false });
});
</script>

где http://osticket.biz/demo/time.php это обновляемый контент, а 30000 это время обновления в миллисекундах

Контент будет выведен в:

<div id=»load»></div>

Количество просмотров :2269

Varnish+Nginx на Centos 5.x

И так, начнем с Varnish — это http accelerator. Если у Вас есть большое количество мелких файлов, отдающихся с диска и дисковый кеш Вас уже не спасает — это решение для Вас. Кроме всего прочего на основе varnish’a (но не только) можно построить архитектуру, позволяющую масштабировать это решение горизонтально без особых проблем.

Но, я его буду использовать в связке с nginx настроенным как бекэнд вот по этой статье

Установка Varnish:

rpm —nosignature -i http://repo.varnish-cache.org/redhat/el5/noarch/varnish-release-2.1-2.noarch.rpm
yum install varnish

Переходим в папочку /etc/varnish/ и открываем файлик default.vcl вносим следующие изменения:

backend default {
.host = «localhost»;
.port = «8080»; # Порт на котором слушает Apache!
}

Дальше в nginx вносим следующие изменения:

proxy_pass http://127.0.0.1:6081; # Трафик в Varnish

Перезапускаем nginx, apache и varnish. Не забудьте добавить varnish в автозагрузку.


Количество просмотров :3342

Поиск с использованием Jquery Ui Autocmplete

Статей в интернете на эту тему очень, но я все же решил написать свой вариант, своими слова. Первое, что нам будет необходимо сделать, это подключить jQuery и jQuery UI. Для этого, качаем их отсюда и отсюда. Скачивать jQuery Ui полностью или только виджет Autocomlete это дело ваше.

Теперь можно подключить скачанное:

<script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript" src="js/jquery-ui.js"></script>

Далее сам скрипт Autocomplite :

$(function() {
    var cache = {},
    lastXhr;
    $( "#autocomplete" ).autocomplete({
        minLength: 1,
        source: function( request, response ) {
            var term = request.term;
            if ( term in cache ) {
                response( cache[ term ] );
                return;
            }lastXhr = $.getJSON( "http://osticket.biz/search.php", request, function( data, status, xhr ) {
                cache[ term ] = data;
                if ( xhr === lastXhr ) {
                    response( data );
                }
            });
        }
    });
});

Параметр minLength задает минимальное количество символов при котором срабатывает автокомплит. Файл search.php расположенный по адресу http://osticket.biz/search.php должен выдавать предварительные результаты поиска в формате json. Как пример, файл search.php:

<?php
    function get_update_date($search)
    {
        $query = "SELECT name FROM table WHERE name LIKE ".$search."%'";
        $rt = mysql_query($query);
        while($nt = mysql_fetch_array($rt)){
            $new[] = $nt['name'];
        }
        return $new;
    }
    function prep_json($array)
    {
        foreach($array as $key => $val){
            $new[$key]['label'] = $val;
            $new[$key]['id'] = $key;
            $new[$key]['value'] = $val;
        }
        return $new;
    }
    if($_GET('term')){
        echo json_encode(prep_json(get_update_date(trim(strip_tags($_GET('term'))))));     
    } 
?>

Пример для Codeigniter 2.0.X. И так, в модель Data добавляем две следующие функции:

<?php
    function get_update_name($name = '')
    {
        $this->db->select('name');
        $this->db->like('name',$name,'after');
        $query = $this->db->get('table');
        return $query->result_array();         
    }
    function pre_json($array)
    {
        foreach($array as $key => $val){
            $new[$key]['label'] = $val['name'];
            $new[$key]['id'] = $key;
            $new[$key]['value'] = $val['name'];
        }
        return $new;
    }
?>

В контроллере

<?ph
$search = $this->Data->get_update_name(trim(strip_tags($this->input->get('term'))));
$info['result'] = $this->Data->pre_json($search);
?>

И в view :

<?php
echo json_encode($result);
?>

И не забываем присвоить форме id =»autocomplete»


Количество просмотров :2365