Выделенные сервера от sky-hosting

Россия WebDC
  • Atom / 2 GB ОЗУ / 250Gb SATA / Трафик 5 Тб / ip 2шт / ISPmanager Lite — 2300р
  • Core™ i3 / 4 GB / 2x500Gb SATA / Трафик 5 Тб / ip 2шт / ISPmanager Lite — 3800р
  • Xeon X3440 / 8 GB / 2x500Gb SATA / Трафик 5 Тб / ip 2шт / ISPmanager Lite — 6050р
  • Xeon E5645 / 32 GB / 2x2000Gb SATA / Трафик 5 Тб / ip 2шт / ISPmanager Lite — 10300р
  • 2х Xeon E5645 / 128 GB / 4x600Gb SAS / Трафик 5 Тб / ip 2шт / ISPmanager Lite — 27650р
WFC Канада
  • Atom D510 / 2 GB DDR3 / 500 GB SATA 2 / трафик 1000Gb / ip 5шт / IPKVM / ISPmanager Lite — 1600р
  • Xeon X3440 / 8 GB DDR3 / 2×500 GB SATA 3 / трафик 3000Gb / ip 5шт / IPKVM / ISPmanager Lite — 3100р
  • 2 x Xeon E5504 / 12 GB DDR3 / 2×500 GB SATA 3 / трафик 3000Gb / ip 5шт / IPKVM / ISPmanager Lite — 5400р
  • 2 x Xeon E5520 / 12 GB DDR3 / 2×500 GB SATA 3 / трафик 3000Gb / ip 5шт / IPKVM / ISPmanager Lite — 7370р
Чехия
  • Atom Dual Core / 4GB DDR3 / 1×1500 GB / порт 100 / трафик неогр / 3 ip / ISPmanager Lite — 2000р
  • Phenom II X6 / 8 GB DDR3 / 2×1500 GB / порт 100 / трафик неогр / 3 ip / ISPmanager Lite — 4000р
  • Atom Dual Core / 4GB DDR3 / 1×1500 GB / порт 100 / трафик неогр / 3 ip / ISPmanager Lite — 3300р
  • Phenom II X6 / 8 GB DDR3 / 2×1500 GB / порт 100 / трафик неогр / 3 ip / ISPmanager Lite — 5800р
  • Atom Dual Core / 4GB DDR3 / 1×1500 GB / порт 1000 / трафик неогр / 3 ip / ISPmanager Lite — 5500р
  • Phenom II X6 / 8 GB DDR3 / 2×1500 GB / порт 1000 / трафик неогр / 3 ip / ISPmanager Lite — 9300р
Нидерланды ServerClub
  • QuadCore X3450 / 8 GB DDR3 / 2×1000 GB SATA 2 / трафик неогр / 5 ip / ISPmanager Lite — 6000р
  • QuadCore X3450 / 8 GB DDR3 / 2×300 GB SAS / трафик неогр / 5 ip / ISPmanager Lite — 6300р
  • 2xQuadCore E5620 / 8 GB DDR3 / 4×1000 GB SATA 2 / трафик неогр / 5 ip / ISPmanager Lite — 11300р
  • 2xQuadCore E5620 / 8 GB DDR3 / 4×300 GB SAS / трафик неогр / 5 ip / ISPmanager Lite — 11800р
Регайтесь, обсуждайте зарание с тех поддержкой по поводу ip, портов и заказывайте.

ИХЦ ihc - Аренда выделенных серверов на базе Dual Xeon 5620

Аренда сервера на базе Dual Xeon 5620
2 сверхмощных современных процессора Xeon E5620 2.40 GHz (8 ядер, 16 потоков), от 24 GB оперативной памяти DDR3 ECC Registered (возможна установка до 192 GB), дисковая система на дисках SATA Raid edition или SAS 15k rpm с аппаратным raid-контроллером LSI или Adaptec.
  • Dedicated 2X1 / 2 x Xeon E5620 2.40 GHz / 24 GB RAM / 4 x 500 GB HDD SATA — 14500р
  • Dedicated 2X2 / 2 x Xeon E5620 2.40 GHz / 24 GB RAM / 4 x 300 GB HDD SAS 15k — 15500р
  • Dedicated 2X3 / 2 x Xeon E5620 2.40 GHz / 48 GB RAM / 4 x 300 GB HDD SAS 15k — 17000р

Аренда сервера на базе Xeon E3-1230 3.2 GHz (Sandy Bridge, 4 ядра, 8 потоков)
  • Dedic-e2 / Xeon E3-1230 / 4 GB RAM / 2 x 500 GB SATA — 5450р
  • Dedic-e3 / Xeon E3-1230 / 8 GB RAM / 2 x 500 GB SATA — 5650р
  • Dedic-e4 / Xeon E3-1230 / 8 GB RAM / 2 x 1000 GB SATA — 5900р
  • Dedic-e5 / Xeon E3-1230 / 12 GB RAM / 2 x 1000 GB SATA — 6100р
  • Dedic-e6 / Xeon E3-1230 / 16 GB RAM / 2 x 1000 GB SATA — 6300р

Что входит в услугу аренды сервера:
  • Современное оборудование ведущих мировых брендов: Intel и Supermicro;
  • Размещение в самых надёжных дата-центрах (ЦОД) Москвы: Оверсан-Меркурий и Е1 (Eserver);
  • 100 ГБ дискового пространства для резервного копирования на отдельном сервере в другом дата-центре;
  • Все сервера подключаются к порту 100 Mbps full-duplex (трафик без соотношений и географического разделения);
  • На каждый сервер бесплатно выделяется 1 IP адрес. Возможно подключение до трёх дополнительных IP по цене 100 руб/мес/IP;
  • Все сервера поддерживают как 32-х, так и 64-хбитные системы;
  • Доступные OS для установки: Linux (CentOS, Debian, Ubuntu), FreeBSD, Microsoft Windows Server;
  • С каждым сервером бесплатно предоставляется панель ISPmanager Lite;

Читать дальше →

Плагин Компании

Скачал у вас сборочку (за что большое спс), так вот там плагин «Компании» — активировал, стал тестить и нашел небольшой баг. Вопрос может ли кто-нибудь подсказать?

Баг заключается в следующем: в профиле пользователя выводится ссылки на созданные компании, и вот сами ссылки на них неправильные, по идее должно быть так: test.ru/company/super/ ну или так test.ru/company/super/blog/ (я не знаю), но получается такая ссылка: test.ru/blog/super/. Вроде ка попробовал покавырять, хотя не очень в нем разбираюсь, так вот как мне показалось проблема в файле Topic.entity.class.php, потому что пробовал мутить с кодом — ссылка меняется, но все равно неправильно.

Может кто подскажет где и как изменить для правильной работы плагина?

livestreet на рф доменах в браузере опера

Доброго времени суток! У меня проблема. Расскажу о сути. Решил я на рф домен поставить движок ЛС. Мне очень понравилось… Но со временем я понял что в большинстве шаблонов неработают скрипты (при юзании браузера опера). Вот к примеру оставить коментарий — довольно-таки сложно, так же как и вступить в блог. Я сначала даже не понял в чем трабл, но попробовав с хромом — я понял что это опера и скрипты. Сейчас версия оперы 11.61. Предыдущие версии тоже тупили. Как мне быть? сайт

Ограничение числа подключений с одного IP-адреса в Nginx

Используйте ngx_http_limit_zone_module следующим образом прописав директив limit_zone и limit_conn в конфигурационном файле nginx.conf
http {
    include       mime.types;
    default_type  application/octet-stream;
    
    limit_zone   one  $binary_remote_addr  4m;
    limit_conn   one  8;
...

Тем самым мы ограничили число подключений в 8 одновременных коннектов с одного IP-адреса и выделили под это кэш (где будут запоминаться адреса, а в последствии высвобождаться) размером в 4 мегабайта.

Список репозитории бесплатных расширений

Выводим в Top блогов количество постов вместо рейтинга

Для начала находим Экшен блока. Структура LS подробно описана, поэтому легко находим нужный блок: /classes/blocks/BlockBlogs.class.php В блоке вызывается единственная функция: Blog_GetBlogsRating, с ней и будем работать.

Сначала захотелось по-быстрому исправить эту функцию в коде движка, но после недолгих размышлений захотелось сделать правильно и красиво, потому что работа с Livestreet подталкивает к этому. Поэтому, оформим решение в виде модуля, который может оказаться полезным и другим пользователям.

Шаг 1. Инициализируем модуль
Есть достаточно много статей описывающих как написать простой модуль, поэтому останавливаться на этом вопросе не будем. Создаем папку /plugins/topblogs2 и в ней делаем XML описание плагина, файл plugin.xml:
<?xml version="1.0" encoding="UTF-8"?>
<plugin>
    <name>
        <lang name="default">TopBlogs2</lang>
    </name>
    <author>
        <lang name="default">Begetan</lang>
    </author>
    <homepage></homepage>
    <version>0.1</version>
    <requires>
        <livestreet>0.5.0</livestreet>
        <plugins>
        </plugins>
    </requires>
    <description>
        <lang name="default">Show top rated blogs by count of posts instead of standart LiveStreet blog's rating</lang>
        <lang name="russian">Выводит топ блогов по количеству постов, а не по стандартному рейтингу блогов LiveStreet</lang>
    </description>
</plugin>


Далее создаем класс активации нашего плагина — /plugins/topblogs2/PluginTopblogs2.class.php:
if (!class_exists('Plugin')) die('Are you sure?');

class PluginTopBlogs2 extends Plugin
{
    protected $aInherits=array(
        'module' => array('ModuleBlog' => '_ModuleTop'),
    );

    public function Activate() {
        return true;
    }

    public function Init() {
    }
}

Шаг 2. Пишем код модуля
Согласно тем названиям, которые мы придумали и объявили в конфигурации плагина код модуля должен находится в файле: /plugins/topblogs2/classes/modules/top/Top.class.php:
<?php
class PluginTopBlogs2_ModuleTop extends PluginTopBlogs2_Inherit_ModuleBlog {

        protected $oMapperBlog2;

        public function GetBlogsRating($iCurrPage,$iPerPage) {

                $this->oMapperBlog2 = Engine::GetMapper ( __CLASS__ );

#               $aResult=parent::GetBlogsRating($iCurrPage, $iPerPage);
                $aResult=$this->GetTopBlogsByPosts($iCurrPage, $iPerPage);
                return $aResult;
        }

        public function GetTopBlogsByPosts($iCurrPage,$iPerPage) {
                list ($aTopBlogs, $aRating) = $this->oMapperBlog2->GetTopBlogsByPosts($iCount,$iCurrPage,$iPerPage);
                $data = array('collection'=>$aTopBlogs,'count'=>$iCount);
                $aBlogs = parent::GetBlogsAdditionalData($data['collection'],array('owner'=>array(),'relation_user'));
                # Подменяем рейтинг блога на новый
                foreach ( $aBlogs as $oBlog ) {
                        $oBlog->setRating($aRating[$oBlog->getId()]);
                        $data2[] = $oBlog;
                }
                # Обновляем список блогов
                $data['collection'] = $data2;
                return $data;
        }
}
?>

Сначала объявляем стандартную функцию GetBlogsRating для того, чтобы переопределить ее в нашем файле. Затем из нее мы вызываем уже нашу функцию GetTopBlogsByPosts, которая и будет делать то что нам нужно. При отладке может возникнуть желание вызвать исходную функцию GetBlogsRating, пример такого вызова в строчке с комментарием.

Обратите внимание, что мы инициализировали свой Маппер, поскольку нам потребуется еще работа с базой данных.
Не применяется кеширование, поскольку мы получаем из Маппера два массива. Придумывать корректный алгоритм было лень, тем более что в моих проектах пока проблемы с нагрузкой не стоит.

Затем мы для всех блогов подменяем поле рейтинг значением из второго массива, содержащего количество постов в каждом блоге. Этот нехитрый трюк позволяет сделать модуль совместимым с абсолютно любым шаблоном, поскольку вся информация в отображение поступает только в стандартных массивах и объектах.

Шаг 3. Пишем код маппера
Маппер у нас окажется тут: /plugins/topblogs2/classes/modules/top/mapper/Top.mapper.class.php.
<?php

class PluginTopBlogs2_ModuleTop_MapperTop  extends Mapper {

        public function GetTopBlogsByPosts (&$iCount,$iCurrPage,$iPerPage) {
                $sql = "SELECT t.blog_id, COUNT(t.blog_id) as rating " .
                        "FROM ".Config::Get('db.table.topic')." as t " .
                        "GROUP BY t.blog_id " .
                        "ORDER BY 2 DESC " .
                        "LIMIT ?d, ?d";

                $aReturn=array();
                $aReturn2=array();
                if ($aRows=$this->oDb->selectPage($iCount,$sql,($iCurrPage-1)*$iPerPage, $iPerPage)) {
                        foreach ($aRows as $aRow) {
                                $aReturn[]=$aRow['blog_id'];
                                $aReturn2[$aRow['blog_id']]=$aRow['rating'];
                        }
                }
                return array ($aReturn, $aReturn2);
        }
}
?>


В отличие от стандартной функции мы возвращаем два массива — массив ID найденных блогов и ассоциативный массив блог->рейтинг. Сделано так потому что в стандартном объекте «блог» нет значения количества постов. Наверно можно было расширить свойства блога, но так было проще. Буду рад услышать предложения и идеи как изменить или улучшить код.

Аналогично нужно изменить функции GetBlogsRatingJoin и GetBlogsRatingSelf чтобы получился законченный модуль.

Удаление UTF-8 BOM из консоли

linux (debian)
find путь/к/лайвстриту/ -type f \( -name '*.tpl' -o -name '*.php' \) -exec sed -i '1 s/^\xef\xbb\xbf//' {} \;

freebsd (7.2)
find ./ -type f \( -name '*.tpl' -o -name '*.php' \) -exec sed -i -e '1 s/^\xef\xbb\xbf//' {} \;

sed почему-то иногда не отрабатывает, поэтому php, find, awk, xargs:
php -r "ob_start();
passthru('find ./ -type f \( -name \'*.tpl\' -o -name \'*.php\' \) -print0 | xargs -0r awk \'/^\xEF\xBB\xBF/ {print FILENAME}{nextfile}\'');
foreach(array_filter(explode(\"\n\",ob_get_clean())) as \$f){
        echo \"remove BOM from \$f...\n\";
        file_put_contents(\$f, substr(file_get_contents(\$f), 3));
};"