• Лучшие книги для новичка по сетевых технологиям в системном администратировании?

    @siriym
    Системный администратор
    Самые важные знания в сетях это и есть теория. По сетям есть хороший канал Андрея Созыкина для новичков.
    Компьютерные технологии и сетевые технологии это разные вещи.
    Ответ написан
    Комментировать
  • Лучшие книги для новичка по сетевых технологиям в системном администратировании?

    chupasaurus
    @chupasaurus
    Сею рефлекторное, злое, временное
    Книги - имхо бесполезные талмуды в случае освоения базовых знаний. Читать надо документацию к продуктам.
    Ваш план кажется здравым. Учить можно перескакивая между пунктами, дабы мозги не скисли от однотипных нагрузок. Детализируя:
    1. Сетевые технологии: RFC 791 (IP), 792 (ICMP), 793 (TCP), 768 (UDP), 2460 (IPv6), 4271 (BGP-4), 5321-2 (SMTP и Message Format), 3986 (URI), 7230-5 (HTTP/1.1), 1034-5 (DNS), 2131 (DHCP), 3315 (DHCPv6), по вкусу IKE, FTP, IPsec и прочие протоколы приложений. IEEE 802.3 (Ethernet), 802.11(Wi-Fi), 802.1Q (VLAN и ещё немного фич). Практика: объяснить все этапы получения результата после старта открытия сайта браузером с точки зрения сетевых протоколов и взаимодействий. Отправка e-mail с помощью telnet. Побаловаться с маршрутизацией, VLAN и DHCP в виртуалках.
    2. Нужность cmd.exe под вопросом, рекомендую сразу учиться работать с Powershell из-за удобства второго. Официальный Getting Started, словарь командлетов набивается с практикой. Практика в виде автоматизации любых действий, которые вам хотелось бы автоматизировать: снятие серийных номеров процессора, мат. платы и дисков в файл с отправкой куда-то; внесение изменений в Windows Firewall с параметрами на входе.
    3. Изучение структуры системных каталогов и реестра (важно для установки/удаления программ), поднятие всех служб Windows Server, изучение механизмов GPO и прочие курения документации.
    4. Понимание и настройка RDP, WS-Man, SSH с предварительным изучением того, что такое PKI и с чем его едят.

    Также стоит помнить, что выбирая только сети и Windows, вы себя ограничиваете только работой в Enterprise-сегменте и провайдерах, конкуренция там будет расти и не в вашу пользу.
    Ответ написан
    Комментировать
  • Как сделать проверку на наличие записи в базе данных (SQLite)?

    tumbler
    @tumbler Куратор тега Python
    бекенд-разработчик на python
    Сделать id уникальным ключом.
    Ответ написан
    Комментировать
  • Как получить значение input text при нажатии на кнопку на js?

    gobananas
    @gobananas
    finishhim.ru
    Присваиваем разные id. При нажатии на кнопку получаем значения поля https://jsfiddle.net/q4h1045m/
    <input id="elem1" type="text" name="quantity" placeholder="Количество">
    <input id="butt" type="button" value="Кнопка"/><br><br>
    <div id="str"></div>

    butt.onclick = function() {
    		var val = document.getElementById('elem1').value;
    		document.getElementById('str').innerHTML="Вы ввели: "+val;
    };
    Ответ написан
    1 комментарий
  • Как принять данные методом POST на php?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Так как у вас проверять неправильно.
    <?php
    if($_SERVER["REQUEST_METHOD"]=="POST"]){
            print_r($_POST);
            if (!empty($_POST["name"]) && !empty($_POST["email"])){
                 doSomeMagic($_POST);
            }    
            else {
                 echo "Поля name или email не заполнены!";
            }
    }
    else {
         echo "Метод передачи данных не является POST-запросом!";
    }
    ?>

    Если у вас проходит до проверки и выдает пустой массив - то где то явно не хватает нехилого куска кода. Иначе до принт_р не дошло бы и выдавало бы "Поля name или email не заполнены!".
    Ответ написан
    4 комментария
  • Как лучше вытащить access_token в VK?

    > Как выдернуть access_token и закрыть окно что бы человек не заморачивался с ручным копированием access_token ?
    > Может быть есть другие способы его получения?
    Я сделал возможность автоматического копирования токена.
    Суть в том что вы собираете заголовки всех 3 запросов:
    1. запрос где указан cliend_id, scope и redirect_uri, возвращает Location на второй запрос
    2. второй запрос вернет Location на redirect_uri, вот в нем и будет наш access_token.
    3. Заголовок к вашему redirect_uri.
    Дальше обычной регуляркой вытаскиваете Location из третьего запроса. Примерно это выглядит вот так:

    <?
    class VKClass {
    	protected $email = "TELEPHONE";
    	protected $pass = "PASSWORD";
    	protected $auth_url = "https://m.vk.com";
    	protected $cookie = "cookie.txt";
    	protected $client_id = "XXXXXXX";
    	protected $redir_url = "http://goto.ru/token";
    
    	public function __construct() {
    		//вызываем метод для загрузки необходимых объектов
    		if(empty($_SESSION["loggedIn"]))
    			$this->logIn();
    
    		if(empty($_SESSION["access_token"]))
    			$this->getAccessToken();
    	}
    
    	public function prependCurl($options){
    		$ch = curl_init();
    		curl_setopt($ch, CURLOPT_URL, $options["url"]);
    		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
    		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
    		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, $options["flocation"]);
    		curl_setopt($ch, CURLOPT_POST, $options["post"]);
    		curl_setopt($ch, CURLOPT_HEADER, $options["header"]);
    		if($options["post"])
    			curl_setopt($ch, CURLOPT_POSTFIELDS, $options["postdata"]);
    		if($options["cookie_w"])
    			curl_setopt($ch, CURLOPT_COOKIEJAR, $_SERVER["DOCUMENT_ROOT"].$this->cookie);
    		if($options["cookie_r"])
    			curl_setopt($ch, CURLOPT_COOKIEFILE, $_SERVER["DOCUMENT_ROOT"].$this->cookie);
    		curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    		$data = curl_exec($ch);
    		curl_close($ch);
            return $data;
    	}
    
    	public function logIn(){
    		$options = ["url" => $this->auth_url, "flocation" => 0, "post" => 0, "header" => 0, "cookie_w" => 1, "cookie_r" => 0];
    		$login_page = $this->prependCurl($options);
    		unset($options);
                    //функция str_get_html используется из бибилиотеки Simple HTML DOM Parser
    		$html = str_get_html($login_page);
    		$login_url = @$html->find("form",0)->action;
    
    		$options = ["url" => $login_url, "flocation" => 1, "post" => 1, "header" => 0, "postdata" => ["email" => $this->email, "pass" => $this->pass], "cookie_w" => 1, "cookie_r" => 1];
    		$this->prependCurl($options);
    
    		$_SESSION["loggedIn"] = $this->loggedIn= true;
    	}
    
    	public function getLocations($url){
    		$options = ["url" => $url, "flocation" => 1, "post" => 0, "header" => 1, "cookie_w" => 1, "cookie_r" => 1];
    		$data = $this->prependCurl($options);
    		return $data;
    	}
    
    	public function getAccessToken(){
    		//по ссылке возвращается access_token. собираем все заголовки запросов
    		$url = "https://oauth.vk.com/authorize?client_id=".$this->client_id."&redirect_uri=".$this->redir_url."?display=page&response_type=token";
    		$headers = $this->getLocations($url);
    		//разбиваем на кол-во запросов
    		$hdrs = explode("\r\n\r\n", $headers);
    		//т.к. у нас 2 редиректа (с oauth.vk.com на login.vk.com и с login.vk.com на домен), то нам нужен второй запрос ($hdrs[1]), где соджержится access_token
    		preg_match("/Location: (.*)/m", $hdrs[1], $matches);
    		//вырезаем наш access_token из ссылки что нам прислал вк сервер
    		@preg_match("/#access_token=(.*?)&/", $matches[1], $token);
    		//объявляем access_token в сессии и в классе
    		@$_SESSION["access_token"] = $this->access_token = $token[1];
    	}
    }

    Да, забыл что это на PHP версии.
    В JS я получал его обычным windlow.location.hash, проблема была получить его именно в PHP т.к. хэш (#) в пхп не передается.
    p.s. через некоторое время ВК стал отдавать ошибку Security Error, пришлось создать новое приложение и с ним всё работает без проблем.
    Ответ написан
    Комментировать
  • Как выполнить cURL запрос в PHP?

    GreysonKind
    @GreysonKind Автор вопроса
    Google все умеет

    Это так тут помогают новичкам?
    Прежде чем задавать кому-то вопрос, я сначала сам перерою пол интернета..

    Может кому пригодится, сделал так:

    // set POST variables
    $url 		= 'http://api.pleer.com/token.php';
    $userpwd 	= 'testclient:testpass '; // заменить на свои данные
    $fields 	= array(
    	'grant_type' => 'client_credentials'
    );
    
    // url-ify the data for the POST
    foreach($fields as $key=>$value) { $fields_string .= $key.'='.$value.'&'; }
    $fields_string = rtrim($fields_string, '&');
    
    $ch = curl_init();
    
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $fields_string);
    curl_setopt($ch, CURLOPT_USERPWD, $userpwd);
    
    $result = curl_exec($ch);
    curl_close($ch);
    
    print_r('<pre>' . $result . '</pre>');
    Ответ написан
    4 комментария
  • Нашел у себя шел в cms wp, что думаете это основной или копать дальше?

    anton_reut
    @anton_reut
    Начинающий веб-разработчик
    wp file manager
    - золотое правило любой CMS - НИКОГДА не устанавливать какие либо модули или плагины которые позволяют манипулировать какими либо файлами кроме картинок в папке images! А отдельные пациенты умудряются ставить плагины которые позволяют херачить php код прямо в статьях...

    что думаете это основной или копать дальше?
    - Конечно искать всё. Скорее всего там уже много чего поселилось. Пиши хостеру чтобы просканировали все папки, бекапы, Айболит и SSH тебе в помощь...
    Ответ написан
    Комментировать
  • Нашел у себя шел в cms wp, что думаете это основной или копать дальше?

    @qid00000000
    Мало что знаю, но информацию найду в гугле
    Антон Р. искать все шеллы бесполезно, да и хостинг не обязан подобное делать.

    Majestty, проблему обнаружили недавно? Если да, то восстановите сайт из бекапа, в котором вирусни ещё нет (надеюсь он у вас есть). А потом удалите плагин wp file manager (проблема с ним известна).

    Также, запросите логи доступа к сайту (у каждого хостинг провайдера они будут) и найдите момент заражения, чтобы убедиться, что нет других сюрпризов. Подскажу, обилие post запросов, будет соответствовать заражению сайта (на крайний случай - странные URL с get параметрами).
    Ответ написан
    4 комментария
  • Что означает $this-> -> в PHP?

    @sidni
    Php Developer
    $this->template->content
    в данном случае в текущем классе есть поле(в данном случае не метод, но можно провернуть такое с методами называется chain (https://stackoverflow.com/questions/3724112/php-me... )) template которое в свое в свою очередь экземпляр какого то класса имеющий поле content
    Ответ написан
    1 комментарий
  • Что означает $this-> -> в PHP?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    1. Закопать Fuel обратно в его могилу и больше не беспокоить прах этого умершего в далекой древности старца.
    2. Вместо него учить Laravel
    3. Открыть для себя документацию РНР и в непонятных случаях обращаться к ней. В это трудно, конечно, поверить, но там всё написаною Эта ссылка находится в двух кликах по запросу "РНР ООП"

    Честно говоря, я и сам себя часто ловлю на такой "лености мозга". Когда ты 100% можешь сам найти ответ, но спросить у знающего человека проще. но тут важно не поддаваться, и сначала пытаться самостоятельно. Для этого в любом вопросе должна быть фраза - "я искал такм-то", но не нашёл. В процессе написания этой фразы ответ сам и сыщется. В итоге в будет сэкономлено время, приобретён опыт и в интернете будет будет меньше мусора.
    Ответ написан
    4 комментария
  • Какие название используете для классов в HTML/CSS?

    GoodProject
    @GoodProject
    Верстальщик
    Лови

    Основные
    .wrapper - /*обвертка сайта*/
    .header - /*верхняя часть сайта*/
    .sidebar - /*сайдбар (левая или правая часть сайта)*/
    .content - /*тело сайта (центральная часть)*/
    .footer  - /*нижнаяя часть сайта*/


    Название блока (обвертка)
    .bl 
    .block 
    .box
    .wrap
    .inner
    .container
    .main


    Секции блока
    .head, .header - /*верхняя часть блока например заголовок*/
    .cnt, .content, .body - /*тело блока например текс с картинкой*/
    .footer - /*нижняя часть блока к примеру дата добавления, категория и т.д.*/


    Колонки
    .column, .col - /*колонка*/

    Списки
    .list
    .item


    Позиционные классы
    .top /* элемент сверху */
    .left /* элемент слева float:left */
    .right /* элемент справа float:right */
    .bottom /* элемент внизу */
    .center /* элемент отцвентрирован  margin:0 auto; */
    .fixed - /*фиксированный элемент postion:fixed */


    Переходы
    .next  - /*следующий*/
    .prev  - /*предыдущий*/
    .last  - /*последний*/
    .first - /*первый*/
    .back  - /*назад*/
    .ahead - /*вперед*/


    Чисельные
    .one
    .thwo
    .three
    .four
    .five


    Размеры
    .xs, .tiny   - /*очень маленький*/
    .s,  .small  - /*маленький*/
    .md, .medium - /*средний */
    .lg, .large, .big - /*большой */
    .xl, .extra-large - /*очень большой*/


    Цвета
    .danger  - /*цвет опасности*/
    .default - /*стандартный цвет*/
    .warning, .error - /*цве ошибки*/
    .success - /*цвет успеха (к примеру верно введн код подтвержления)*/
    .primary - /*основной цвет */


    Кнопки
    .button, .btn - /*кнопка*/
    .loading - /*загрузка*/
    .close - /*закрыть*/
    .open  - /*открыть*/
    .touch - /*клик*/
    .edit  - /*редактировать*/
    .more  - /*больше*/
    .remove  - /*удалить*/
    .logout  - /*выход*/
    .select  - /*выбрать*/
    .divider - /*выпадающийся список меню*/
    .caret, .arrow - /*стрелочка*/
    .up - /* Вверх */
    .down - /* Вниз */
    .delete - /* удалить */
    .reply    - /*ответить*/


    Персона
    .profile - /*профиль*/
    .person - /*человек*/
    .ava, .avatar - /*аватарка, картинка*/
    .name - /*имя*/
    .description - /*описание*/
    .address  - /*адресс*/
    .nickname - /*ник*/
    .birthday - /*дата рождения*/
    .sex - /*пол*/
    .author - /* автор */

    Заголовки
    .title - /*заголовок*/
    .short-title - /*скороченный заголовок*/
    .full-title  - /*полный заголовок*/


    Ссылки
    .link - /*ссылка*/

    Текст
    .text, .txt, .paragraph  - /*текст*/
    .info, .information - /*информация*/


    Картинки
    .image, .img - /*картинка*/
    .icon, .ic   - /*иконка*/
    .bg - /*фоновая картинки или цвет*/


    Формы
    .search, .form-search - /*поиск по сайту*/
    .input - /*текстовый элемент*/
    .form  - /*форма*/
    .form-group - /*группа элементов формы*/
    .help-block - /*текст подсказки*/
    .label - /*название элемента формы*/


    Катагории
    .type - /*тип*/
    .cat, .category - /*катигория*/
    .subcat, .subcategory - /*подкатегория*/
    .section    - /*раздел*/
    .subsection - /*подраздел*/


    Видео
    .video
    .play  - /*пуск*/
    .stop  - /*стоп*/
    .pause - /*пауза*/


    Социальные сети
    .social - /* социальные сети */
    .vk   - /*вконтакте*/
    .fb   - /*фейсбук*/
    .twit - /*твиттер*/
    .inst - /*инстаграм */


    Активные классы
    .none     - /*скрытый элемент*/
    .disabled - /*заблокированный*/
    .active, .current   - /*активный */
    .selected - /*выбраный*/
    .visible  - /*видный элемент*/
    .focus    - /*нажатый*/


    Временные классы
    .time  - /*время*/
    .date  - /*дата*/
    .day   - /*день*/
    .month - /*месяц*/
    .year  - /*год*/


    Очистка
    .clear, .clearfix, .clr - /*очистка*/

    Разделители
    .separator, .divide - /*разделитель вертикальный для слов */
    .br, .line - /*разделитель горизонтальный для блоков*/


    Остоньлые названия
    .logo    - /*лого сайта*/
    .new    - /*новинка*/
    .sale   - /*распродажа*/
    .feedback - /*обратная связь*/
    .support - /*помощь */
    .group  - /*группа*/
    .module - /*модуль*/
    .posters - /*пост*/
    .form   - /*форма*/
    .tabs   - /*вкладки*/
    .slider - /*слайдер*/
    .news   - /*новости*/
    .table  - /*таблица*/
    .full   - /*полный*/
    .breadcrumbs - /*Хлебные крошки*/
    .pagination, .pager - /*Нумерация страниц*/
    .navbar, .nav, .menu, .navigation - /*Навигация (меню)*/
    .dropdown - /*выпадающейся меню */
    .comment  - /*комментарий*/
    .subscription - /* Подписка */
    .special - /* особенный элемент */
    .standard - /* стандартный элемент */
    .screens - /* Скрины */
    .rate - /* рейтинг */
    .online - /* онлайн */
    .panel - /* панель */
    .popup - /* попап */
    .version - /* версия */
    .page - /* страница */
    .banners - /* баннер */
    .map - /* Карта */
    .more - /*еще, подробнее*/
    .tags - /* тег */
    .price - /* цена */


    Взято с этого видео.
    Ответ написан
    2 комментария
  • Пример Админки для сайта?

    alex-1917
    @alex-1917
    Если ответ помог, отметь решением
    Тебе надо искать такое - CRUD, начни с гитхаба, обязательно смотри, чтобы была проверка на уязвимости, если в коде встретится такое слово PDO statement то нормуль)))
    Я в свое время находил почти готовые рабочие куски кода, там самое сложное - это создать БД в MYSQL)))
    Если последние три слова для тебя открытие века, то ищи CRUD на файлах
    Ответ написан
    Комментировать
  • Bootstrap - плохая практика добавлять к элементам фреймворка свои классы / стили. Как тогда лучше в моем случае?

    vilka_2009
    @vilka_2009
    Верстаю
    Автор, я такого ни разу не слышала.
    • Если вот так подумать, то наверно плохим тоном будет считаться добавление классов, которые потом будут в себе сочетать правила, касающиеся и размеров, и отступов, и стилизации оформления.
    • Бывают такие случаи, когда необходимо переопределить колонке внутренние/внешние отступы. Я думаю здесь лучше добавить класс к этой колонке, который будет отвечать за внутренние/внешние отступы.
    • Бывают такие случаи, когда необходимо стилизовать именно колонку. Как раз из-за этих самых отступов (не могу привести пример, память уже не та) - добавляй класс к ней.
    • Да в конце концов, бутстраповская сетка лишь помогает тебе не задумываться о ширине и отступах.
    • Мне изначально было вбито в голову, что большая вложенность - это плохо. Никто не запрещает, но нужно стараться избегать этого.
    • И самое главное, в нашем сообществе разработчиков слишком много людей, которые придумывают всяческие правила и нормы "поведения". По большей части из-за того, что они привыкли жить по правилам. А жизнь - это импровизация.
    Ответ написан
    Комментировать
  • Bootstrap - плохая практика добавлять к элементам фреймворка свои классы / стили. Как тогда лучше в моем случае?

    serjazz
    @serjazz
    developer and dancer
    На самом деле плохой практикой (и то в ряде случаев это утверждение спорно) является перекрытие существующих свойств bootstrap заданных в указанных классах (просто потому что это меняет нативное поведение и делает его неожиданным). Блоку с уже присвоенными классами bootstrap можно назначать свои классы в случаях когда данные классы расширяют (а не перекрывают (опять же не всегда это правило)) набор свойств заданных элементу.

    В общем, плохо/хорошо это весьма размытые понятия и применять категорично какое-либо утверждение - это ошибка, бывают различные ситуации и нужно поступать сообразно им. Единой практики в верстке нет, существует множество подходов.
    Ответ написан
    Комментировать