Рейтинг
+9.04

Вебмастерское

12 читателей, 309 топиков

Как считаете что лучше?

Вебмастерское
Кстати, в посте можно спросить меня, какие еще виды подработки существуют. Просто для расширения кругозора. Описать что-то свое, а я может подскажу чего-то ;) Воообщем опрос скорее про то, какой способ предпочитаете вы? Быстрый или трудный? С вложениями или с минимумом вложений? Любите ли вы социум, флудилово в инете и ядро пользователей? Или же предпочитаете сделать просто дизайн/сайт что-то такое, а взаимодействие с людьми вам не интересно? Либо кучу простых сайтов как 1gt.ru, либо парочку за конские цены.

А еще, оказывается мои мыла на доменах

Вебмастерское
Используются как рассадник спама.
блять, токо спамерам они и нужны, походу ;(

т.к. в домене a2k.in аж 700 мыл. для сравнения в остальных около 200.
то это сто пять этот же мудак.

Не стесняется, прямо ключевые слова регает, вместо ников.

Как лучше писать абузы на домены?

Вебмастерское
Меня один мудак троянщик достал

Есть у меня сократитель. a2k.in
и короче, этой весной, спам активизировался. добавляют кучу фишинга и вирусни. потом этим спамят.
но т.к. люди нубы, они пишут жалобы на мой домен. и на ip где он хостится. хостинги ноют и угрожают.
в марте аж 4 говно хостинга(когда пик был, и когда я заметил) пришлось сменить за 2 дня. пока жалобы не утихли.

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

по ссылкам и ip короче. собрал кучу данных.
все домены, что чел для распространения юзает. пробил везде whois и нашел мыла. написал, на каждое мыло письмо, с просьбой прекратить и создать свой сократитель для такого, если нада.

но чел видать не понял, и все равно добавляет.
теперь же я слежу каждый день уже. и «пиков» не допускаю. сразу удаляю, а логи сохраняю.

итак уже у меня тут целое досье на всю фишинг систему. на десятки доменов. и зоны ip.

В итоге, я считаю что чел специально нарывается. Я его предупреждал, но он не понял.

Как писать на ip, на зоны, какие логи нада предоставить я знаю. Уже настрочил куда нада, и не нада. Забомбил все абузы. Уже многие поблагодарили и «очистили свои зараженные компы в сетках».

Теперь же осталось на все домены. Какие основания нужны чтобы залочить .ws .info .com .net?
для .ru .su это я уже настрочил.

Кстати, завершающий старый опрос

Вебмастерское
Я уже недели 2 назад постил, в других местах. вообщем. со всех голований. вышло что Люси и Ню из Эльфийской песни. или же Рин и Мими из Дочерей мнемозины. По больше части. Да. тут всего 2 домена, а не 3 :) Это я токо для своей пачки хочу использовать.

захотел купить диапозон ip

Вебмастерское
Чтобы официально в RIPE отображалось ;)

Кто уже покупал ?)

Я так понял нужен юридический адрес, да на кого оформить. Вот и все.

Но может кто-ниб кто что дельное посоветует. из своего опыта.
Если же нет, то гуглить я и сам умею ;)

Станция из железок же не нужна?
т.е. этими ip я могу пользоваться и «по нуждам» раскидывать куда хочу же, например как зеркала?

Извращения с DNS

Вебмастерское
короче.
допустим, я регнул 3 домена второго уровня. пусть будет для примера — nya1.org nya2.org nya3.org

прилепил их все, на Независимый ресурс. dns хостинг от яндекса, в котором есть полное управление зоной.

в каждом домене, настроил эту Зону. nya1 — ip1, nya2 — ip2 (и как запасной, ели падает 1 или 2 — nya3 — на 3ий ip)
*в идеале можно еще напичкать вторичные A записи, на 4ый, 5ый, 6ый ip, которые будут совсем на другом vds. и настроить дублирование 2 раза в сутки. тогда вообще идеал ;)

Это все работает. я такое проверял.

Вопрос в другом.

Если я хочу еще и почту гугла, джаббер гугла и прочее «независимыми сделать».
*как бы при такой стуктуре, все равно jabber и почта, вписывается в ISP панели, на хостинге. Именно для каждого домена. потому что записи должны соотвествовать доменному имени.

так вот, вопрос.
Если я хочу «отдельно независимо». то я могу дублировать кучу записей. например у меня 30 доменов. по 8 SRV записи на домен. значит 240 SRV записей я должен буду в эти nya1 nya2 nya3 задолбить.

и должно работать же?

а в новые домены (в эти 30 шт)
я впишу уже
DNS:
nya1.org
nya2.org
nya3.org

собно больше всего интересует.
не будет ли конфликтов. ибо 30 разных доменов. в одной пачке.

к примеру.
обычно они вот так выглядят.
_jabber._tcp.nya1.org SRV xmpp-server.l.google.com. 5 0 5269
_jabber._tcp.nya1.org SRV xmpp-server1.l.google.com. 20 0 5269
_jabber._tcp.nya1.org SRV xmpp-server2.l.google.com. 20 0 5269
_jabber._tcp.nya1.org SRV xmpp-server3.l.google.com. 20 0 5269
_jabber._tcp.nya1.org SRV xmpp-server4.l.google.com. 20 0 5269
_xmpp-server._tcp.nya1.org SRV xmpp-server.l.google.com. 5 0 5269
_xmpp-server._tcp.nya1.org SRV xmpp-server1.l.google.com. 20 0 5269
_xmpp-server._tcp.nya1.org SRV xmpp-server2.l.google.com. 20 0 5269
_xmpp-server._tcp.nya1.org SRV xmpp-server3.l.google.com. 20 0 5269
_xmpp-server._tcp.nya1.org SRV xmpp-server4.l.google.com. 20 0 5269

примет ли гугл
30 таких пачек.
где вписано 30 разных доменов.

но все это будет в Зоне одного домена, который как dns.

На недели проверю ;)
А то настроить автобекапы на другие серваки это не проблема.
Но вот, DNS крайне уязвимое место. Его тоже нада сделать стабильным, вечным, сторонним. Чтобы при любых внезапных переездах почта гугла и 10 минут не простаивала.

Очевидно вы спросите меня. Что за пиздец. Зачем так все усложнять, когда можно каждый домен ручками обновлять, как на dns от регистратора, так и на яндексе том же.
Во первых, это делаю я не для себя, я да 2 минуты все исправлю, а я много знакомых хостю, с некоторыми быстро не решишь. И пока чел там пропишет, что нужно, будет время. И еще объяснять нада. Да и вообще, не люблю я отвлекать людей. Поэтому лучше мне самому о этом заботиться.
Во вторых, есть такие типы атак на dns. Когда ддосится dns сервер. Ясно понятно, яндекс труднее положить, чем обычный купленный дедик. Или менты могут забрать сервак. А еще могут засуспендить домен, на котором у тебя dns.(тут уже без разницы) Поэтому для dns делается 2 разных домена, а лучше 3(и у разных регистраторов, чтобы 3 запроса, а не один) ;)

Вообщем. :) Хочу извратиться, да придумать максимально отказоустойчивую систему в dns. Чтобы еще и одним изменением, можно было изменить «какую-то целую пачку в 30 доменов». ^_^

domains.alice2k.ru

Вебмастерское
domains.alice2k.ru
По партнерке от domaincontext.com, так что не проебутся. (если партнер отчаливает даже, через 5 лет, то через их оф сайт можно всегда получить доступ)
Оформлено, через Михея, с бывшего zloy.org еще(ну с 2009 там .bz, когда Терминатор продал Злой).
регистрация доменов

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

Класс для загрузки файлов на сервер

Вебмастерское
Пример как использовать:
if (!empty($_FILES)) {
$tempFile = $_FILES['Filedata']['tmp_name'];
$targetPath = '/public/galery/';
$upload = new Upload(str_replace('//', '/', $targetPath));

if ($upload->uploads($_FILES['Filedata'])) {
$fileInfo = $upload->getFilesInfo();
$fileInfo["nameTranslit"];// новое имя файла, можно записать в БД
}
}

Ну и собственно сам класс
class Upload {

    private $dir = "/";
    private $name;
    private $FILES;
    private $allowedType = array("jpg", "gif", "bmp", "jpeg", "png", "pps","doc","docx","xls","pdf","txt","rar","zip");
    private $errors;
    private $errorsMessage = array(1 => "Размер загружаемого файла превышает допустимый размер.",
        2 => "Размер загружаемого файла превышает допустимый размер.",
        3 => "Файл был загружен лишь частично.",
        4 => "Файл не был загружен.",
        6 => "Файл не был загружен.",
        7 => "Файл не был загружен.",
        8 => "Файл не был загружен.");

    function __construct($dir="/") {
        $this->dir = $dir;
    }

    /**
     * устанавливаем дирректорию загрузки файла
     */
    function setDir() {
        $this->dir = $dir;
    }

    /**
     * Устанавлиаем доступные расширения
     * @param <type> $type
     */
    function setAllowedType($type) {
        if (is_array($type)) {
            $this->allowedType = $type;
        } else {
            $this->allowedType = explode(",", $type);
        }
    }

    /**
     * загрузка файла
     * @param $tmpName
     * @param $name
     * @param $replacement
     */
    private function upload($tmpName, $name) {
        $name = $this->substitute(self::translit($name));

        if ($this->typeChecking($name))
            if (move_uploaded_file($tmpName, $this->dir . $name)) {
                return $name;
            } else {
                return false;
            }
        return false;
    }

    function uploads($FILES) {
        $this->FILES = $FILES;

        if (!is_array($this->FILES['name'])) {
            return $this->uploadsOneFile();
        } else {
            return $this->uploadsManyFiles();
        }
    }

    /**
     * загрузка одного файла
     */
    function uploadsOneFile() {

        if ($this->FILES['error'] != 0) {
            $this->errors[] = $this->errorsMessage[$this->FILES['error']];
            return false;
        }

        $result = $this->upload($this->FILES['tmp_name'], $this->FILES['name']);
        if ($result != false) {
            $this->FILES['nameTranslit'] = $result;
            return true;
        }
        return false;
    }

    /**
     * загрузка нескольких файлов
     */
    function uploadsManyFiles() {
        $coutFiles = count($this->FILES['name']);
        for ($i = 0; $i < $coutFiles; $i++) {
            if ($this->FILES['error'][$i] == 0) {
                $result = $this->upload($this->FILES['tmp_name'][$i], $this->FILES['name'][$i]);

                if ($result != false) {
                    $this->FILES['nameTranslit'][$i] = $result;
                } else {
                    $this->errors[] = $this->FILES['name'];
                }
            } else {
                $this->errors[] = $this->errorsMessage[$this->FILES['error']];
            }
        }

        return true;
    }

    /**
     * проверяем, разрешен ли данный файл к загрузке
     */
    function typeChecking($fileName) {
        preg_match("#([\w()-_]+)\.([\w]{1,4})$#i", $fileName, $arrayNameFiles);
        $nameEnd = strtolower($arrayNameFiles[2]);
        if (in_array($nameEnd, $this->allowedType)) {
            return true;
        } else {
            $this->errors[] = "Файлы с расширением (<b>{$fileName}</b>) не разрешенны к загрузке.";
        }
        return false;
    }

    /**
     * ищет в каталоге файлы с таким же названием дописывает номер(равный количеству файлов с таким названием) в конец
     * @param $name
     */
    function substitute($name) {

        $files = scandir($this->dir);
        unset($files[0]);
        unset($files[1]);

        $i = 0;
        $newName = $name;

        preg_match("#([\w()-_]+)\.([\w]{1,4})#i", $name, $arrayNameFiles);
        $nameStart = $arrayNameFiles[1];
        $nameEnd = $arrayNameFiles[2];

        while (in_array($newName, $files)) {
            $newName = "{$nameStart}({$i}).{$nameEnd}";
            $i++;
        }
        return $newName;
    }

    /**
     * возвращаем информацию о файле
     */
    function getFilesInfo() {
        return $this->FILES;
    }

    /**
     * возвращаем ошибки
     */
    public function errors() {
        return $this->errors;
    }

    /**
     * переводим текст в транслит
     * @param $text
     */
    public static function translit($text) {
        $rus = array("а", "б", "в",
            "г", "ґ", "д", "е", "ё", "ж",
            "з", "и", "й", "к", "л", "м",
            "н", "о", "п", "р", "с", "т",
            "у", "ф", "х", "ц", "ч", "ш",
            "щ", "ы", "э", "ю", "я", "ь",
            "ъ", "і", "ї", "є", "А", "Б",
            "В", "Г", "ґ", "Д", "Е", "Ё",
            "Ж", "З", "И", "Й", "К", "Л",
            "М", "Н", "О", "П", "Р", "С",
            "Т", "У", "Ф", "Х", "Ц", "Ч",
            "Ш", "Щ", "Ы", "Э", "Ю", "Я",
            "Ь", "Ъ", "І", "Ї", "Є", " ");
        $lat = array("a", "b", "v",
            "g", "g", "d", "e", "e", "zh", "z", "i",
            "j", "k", "l", "m", "n", "o", "p", "r",
            "s", "t", "u", "f", "h", "c", "ch", "sh",
            "sh'", "y", "e", "yu", "ya", "_", "_", "i",
            "i", "e", "A", "B", "V", "G", "G", "D",
            "E", "E", "ZH", "Z", "I", "J", "K", "L",
            "M", "N", "O", "P", "R", "S", "T", "U",
            "F", "H", "C", "CH", "SH", "SH'", "Y", "E",
            "YU", "YA", "_", "_", "I", "I", "E", "_");
        $text = str_replace($rus, $lat, $text);
        return(preg_replace("#[^a-z0-9._-]#i", "", $text));
    }

}

HTML карта сайта на WordPress

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

В действительности, очень полезно использовать карту сайта HTML как часть темы. В таком случае карту сайта можно использовать и на странице WordPress для ошибки 404. Чтобы сделать карту сайта HTML частью темы надо создать папку partials в папке вашей темы. В папке partials создаем создаем файл с именем sitemap.php.

Копируем в него следующий код и правим его в соответствии со структурой своего сайта:
<h2 id="authors">Authors</h2>
<ul>
<?php 
wp_list_authors( 
  array(
    'exclude_admin' => false,
  )
); 
?>
</ul>
 
<h2 id="pages">Страницы</h2>
<ul>
<?php
// Страницы, которые надо исключить из карты сайта добавляем к exclude здесь
wp_list_pages( 
  array(
    'exclude' => '',
    'title_li' => '',
  )
);
?>
</ul>
 
<h2 id="posts">Заметки</h2>
<ul>
<?php
// Категории, которые надо исключить, добавляем к exclude здесь
$cats = get_categories('exclude=');
foreach ($cats as $cat) {
  echo "<li><h3>".$cat->cat_name."</h3>";
  echo "<ul>";
  query_posts('posts_per_page=-1&cat='.$cat->cat_ID);
  while(have_posts()) {
    the_post();
    $category = get_the_category();
    // Ссылку на заметку выводим только один раз, даже если она указана в нескольких категориях
    if ($category[0]->cat_ID == $cat->cat_ID) {
      echo '<li><a href="'.get_permalink().'">'.get_the_title().'</a></li>';
    }
  }
  echo "</ul>";
  echo "</li>";
}
?>
</ul>

Теперь там, где нужно вывести HTML карту сайта в теме WordPress вставляем следующий код:
<?php get_template_part('/partials/sitemap'); ?>



Чтобы сделать шаблон для карты сайта нужно скопировать файл page.php и переименовать копию в page-sitemap.php. Затем открываем его и ниже вызова функции the_content(); добавляем упомянутый ранее вызов get_template_part(). Теперь переходим в начало файла и после открывающего тега <?php (но перед вызовом get_header()), добавляем комментарий:
/*
Template Name: Карта сайта HTML
*/