Задать вопрос
  • Как проверить отправленные значения формы, с использованием ООП?

    @MadridianFox
    Web-программист, многостаночник
    public function checkValue($arr) {
          if(!empty($_POST[$arr['name']])) {
            $this->value = $_POST[$arr['name']];
          }
          
           parent::checkValue($arr);
        }
    Ответ написан
    3 комментария
  • Почему ssh-сервер всё равно запрашивает пароль?

    @MadridianFox
    Web-программист, многостаночник
    Проверьте чтобы в /etc/ssh/sshd_config был разрешён вход по ключу
    PubkeyAuthentication yes
    Ответ написан
    6 комментариев
  • Как писать собственные функцит на PHP?

    @MadridianFox
    Web-программист, многостаночник
    она будет правильной?

    Пишешь, если работает - правильная, не работает - не правильная.
    Для начала этого достаточно.
    Как понять какие функции,параметры использовать

    Надо знать стандартную библиотеку и то api которое предоставляет тебе та CMS под которую ты пишешь. Этому очень легко научиться. Берёшь - и пишешь код. Когда сталкиваешься с чем-то чего не знаешь - гуглишь. Например - как отсортировать массив? Гугл знает. Раз загуглишь, два загуглишь, на третий раз вспомнишь, на четвёртый - начнёшь примерять те или иные функции ещё на этапе придумывания идеи. На это уходят месяцы и годы, но никто не говорил что научиться программировать легко.
    Придумай себе идею. Надо хотеть сделать что-то, а не просто хотеть написать код.
    Ответ написан
    Комментировать
  • Правильно ли будет, если поставить GitLab на сервере разработки?

    @MadridianFox
    Web-программист, многостаночник
    Центральный репозиторий (тот в котороый пушат несколько разработчиков) должен быть bare - т.е. без файлов.
    Например GitLab как раз хранит bare репозитории.

    Если /var/www/project это хост только чтобы показывать сайт (не разрабатывать прямо тут), то туда надо клонировать репозиторий из центрального. Когда разрабы пушат в центральный - руками или автоматически делаете pull в /var/www/project.

    Где ставить гитлаб - вопрос наличия и мощности ваших машин. У меня в последнем проекте машин было мало и на dev-машине работали и гитлаб и хосты разработчиков, но в docker-контейнерах, т.е. они никак не были связаны.

    Если же /var/www/project это хост с которым работают все разрабы сразу (прямо редактируют код), то срочно заваривайте чай - придётся переделывать. Лучше каждому разрабу выделить свой хост где он будет редактировать файлы своей копии сайта.
    Ответ написан
    7 комментариев
  • Что можно сделать с файлом logs?

    @MadridianFox
    Web-программист, многостаночник
    Можете удалять содержимое этих файлов. Сайту они не нужны. Но если завтра выяснится что что-то произошло и надо найти причину, и её можно было выяснить посмотрев в лог, то вы пожалеете что просто взяли и удалили.
    Обычно делается т.н. ротация логов - копирование логов в новый файл при достижении некотого лимита. Ну например, если накопилось 10 мегабайт логов, то копируем их в файл logname.log.1, а текущий файл очищаем. Ещё раз накопилось - переименовываем logname.log.1 в logname.log.2 и снова копируем содержимое лога в logname.log.1. При этом часто логи с цифрами архивируются, чтобы занимали меньше места. Ну и чтобы забыть про то что логи могут забить вам диск, какой-нибудь logname.log.10 уже не переписывается в следующий файл, а удаляется.

    Обычно ротация делается автоматически той программой (сайт, web-сервер, СУБД), которая пишет эти самые логи, её надо только настроить. Но программа может и не уметь делать ротацию. Тогда можно написать какой-нибудь bash скрипт, который будет запускаться по крону раз в N часов и делать ротацию указанного файла.

    А вообще логи это обширная тема. Бывают случаи, когда необходимо поднимать отдельную машину, да ещё и не одну, чтобы собирать логи от всякого ПО и показывать их в удобном виде.
    Ответ написан
    Комментировать
  • Как организовать базу данных для миниатюр фотографий?

    @MadridianFox
    Web-программист, многостаночник
    1) 1к +7к... да хоть 100к + 700к - фигня. Вы гораздо раньше упрётесь в то что вам не хватает места на сами файлы изображений чем на то что БД не справляется с количеством записей.
    2) 43 атрибута это если вы всё в одну таблицу пишете. Даже это не много, хотя и вызывает удивление, но если вынести миниатюры в соседнюю таблицу, то получится 15 атрибутов в одной и 4 в другой - вообще ни о чём.
    Ответ написан
    Комментировать
  • Начал полное погружение в PHP затронут язык Си как скомпилировать .cgi?

    @MadridianFox
    Web-программист, многостаночник
    Вот, тут написано как скомпилировать простейшую программу в студии. Просто делаете что там написано, но вместо кода в файле main.cpp вставляете свой.

    Но это лишняя трата времени. Никто сейчас не пишет cgi программы на Си. Точнее php-программисты этого не делают. Если, когда вы программируете на php, вы внезапно понимаете что вам надо написать что-то на си, значит вам надо сменить язык. Ну или вы уже работаете в корпорации размером с гугл или фейсубк и тогда вы знаете что делаете.
    Ответ написан
  • Насколько сложнее C++ чем Java?

    @MadridianFox
    Web-программист, многостаночник
    Вы не то спрашиваете. Вот зачем вы спрашиваете? Хотите выучить что-то полегче?
    На самом деле вы должны ответить на вопрос - какие программы вы хотите писать.
    С академической точки зрения плюсы сложнее. Да, не в последнюю очередь из-за ручной работы с памятью. Но после нескольких месяцев практики вы привыкните и это не будет сложным.
    Ответ написан
    4 комментария
  • Как в insert картинку добавить?

    @MadridianFox
    Web-программист, многостаночник
    Дело в том, что картинка это файл. Обычно файлы в бд не хранят. Вместо этого картинку куда-нибудь сохраняют как файл, а в бд записывают путь на этот файл.
    Ответ написан
  • Как реализовать авторизацию без sessions на бэкенде?

    @MadridianFox
    Web-программист, многостаночник
    То что на другом сайте юзер тоже будет авторизован вы проверяли или только так думаете? Просто это не должно так работать - сессия привязывается к кукам, которые видны только на том сайте, который их поставил.

    А если даже это и работает так как вы говорите, то просто измените структуру сессии - данные для каждого отдельного сайта храните под ключём, которым является домен этого сайта.
    Ответ написан
  • Учить ли c++ в 2018. Для знающего C#?

    @MadridianFox
    Web-программист, многостаночник
    Тут правильно отвечают - надо научиться программировать для начала, а после этого другие языки учить не придётся, только узнавать нюансы и стандартную библиотеку.
    Чтобы научиться программировать необходимо написать с десяток программ. Программ с большой буквы, а не просто кусков кода которые делают то или это..
    И не просто написать и забыть, а написать и пытаться развивать. Написали простой веб-сервер который отдаёт файлы из папки - ок, попытайтесь прикрутить к нему скриптовый язык для динамической генерации страниц, или cgi. или ещё что-нибудь. Сделали себе текстовый редактор - добавьте в него систему плагинов. Написали сайт - добавьте ещё функционала. И ещё и ещё.

    Вы обязательно столкнётесь с проблемами. И начнёте понимать почему языки программирования такие какие они есть, зачем в них классы, шаблоны, статическая типизация и т.д. и т.п.

    На это уйдёт много лет и только после этого вы сможете сказать что вы умеете программировать и соответственно знаете какой-то язык.
    Ответ написан
    5 комментариев
  • Почему после подгрузки полей формы через jquery load(), yii2 их не принимает в model?

    @MadridianFox
    Web-программист, многостаночник
    Вы вот говорите про jquery, но ни строчки js кода не показали.
    На всякий случай проверьте. что csrf токен отправляется.
    Ответ написан
  • Как проверить существование класса?

    @MadridianFox
    Web-программист, многостаночник
    1) это где такие лабораторные дают, что необходимо фреймворк написать?))
    2) а вы уверены, что вам нужна рефлексия и динамика вообще? Почему вы считаете, что использование неймспейсов это проблема?

    По PSR-4 неймспейсы как раз используются для автозагрузки классов, потому что неймспейс по сути должен повторять путь до класса. У вас какой-то не универсальный автолоад, как же файлы в других папках? Как вы будете подгружать классы из папок внутри папки controllers?
    Правильный подход - получать полное имя класса (с неймспейсом) и при автолоаде просто заменять слэши на прямые, чтобы получить путь до файла.

    Свой автолоад это обязательное условие? можно просто воспользоваться композером. Обязательно автолоад делать через устаревший __autoload(), а не через общепринятый spl_autoload_register()?

    Создать объект класса используя его название в строке можно просто используя переменную:
    $classname = "app\\controllers\\MainController";
    $methodname = "actionIndex";
    $controller = new $classname(); // тут сработает автолоад
    
    $controller->{$methodname}();


    При этом вы можете (и должны) обеспечить безопасность, так чтобы никто не мог передать через GET и имя класса и имя метода, и вызвать любой метод. Делается это очень легко.
    Во-первых путь из GET к нам приходит имя класса без неймспейса, ну логично. Неймспейс мы потом прицепим к нему. Так никто не сможет случайно создать объект любого класса, а только объект класса из папки с контроллером. Это не возбраняется.
    Во-вторых, если кто-то передал абра-кадабру, то надо не падать с ошибкой Class not found, логично. Для этого, перед созданием класса просто смотрим на то какие файлы есть в папке с контроллерами. Если там нет файла с тами же именем что и класс - то показываем 404.

    Потом, перед тем как вызвать метод, проверяем что он существует функцией method_exists($obj, $method_name), опять же - метода нет -- идите-ка вы на 404.

    И это нормально, что рефлексия и проверка существования класса требуют полное имя класса. Это ваш подход неверный - с самого начала вы должны прицепить к имени класса неймспейсом и работать только с полным именем.
    Ответ написан
    Комментировать
  • Как использовать docker и gulp?

    @MadridianFox
    Web-программист, многостаночник
    Как-то вопрос про docker, но до последнего момента не понятно зачем вам docker.
    Конечно gulp вы используете только на этапе разработки, он у вас должен стоять локально, так чтобы phpstorm его видел. Если собираете контейнер в продакшен - то вы должны просто взять весь результирующий код, скопировать его в контейнер и запускать его. Если в контейнере запускается окружение для разработки - то прокидываете локальную папку в контейнер. Не понимаю как вам вообще пришло в голову засовывать гульп в контейнер)
    Ответ написан
    2 комментария
  • Не могу перейти на картинке в директория сайта?

    @MadridianFox
    Web-программист, многостаночник
    Добавьте перед RewriteRule строки
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d

    чтобы, если файл существует, апач не применял RewriteRule
    Ответ написан
  • Как проверить права?

    @MadridianFox
    Web-программист, многостаночник
    Так как вы спрашиваете - никак. Вы можете только посмотреть права на файлы (в том числе и исполняемые файлы, которые и являются тем что вы называете командами), и сопоставить их с тем - в каких группах состоит пользователь.
    Ответ написан
    Комментировать
  • Как можно оптимизировать код?

    @MadridianFox
    Web-программист, многостаночник
    Во-первых, отличия в стиле надо выносить в классы.
    .btn-change-sect {
        display: none;
        border-bottom: 2px solid #ffffff;
    }
    
    .active {
       display: block;
       border-bottom: 2px solid #ff7300;
    }

    Во-вторых, не стоит привязываться к конкретике, в вашем случае, при клике есть только текущий элемент и все остальные
    $( ".btn-change-sect" ).click(function() {
        // убираем активный стиль со всех подобных элементов
        $( ".btn-change-sect" ).removeClass("active");
        // ставим активный стиль текущему элементу
        $(this).addClass("active");
    });
    Ответ написан
  • Как правильно использовать цикл?

    @MadridianFox
    Web-программист, многостаночник
    Вы не должны сразу писать энное количество элементов, а потом в них рассовывать результат. Нет.
    Вы должны в цикле выводить сразу разметку, в которую вставляете данные. Сколько итераций сделает цикл - ровно столько тэгов будет выедено.
    Пример ниже ужасен, но он показывает суть)
    $result = mysql_query("SELECT * FROM `catalog` WHERE `type`='$_GET[type]' ORDER BY `id` DESC");
    while($row = mysql_fetch_assoc($result)){
        echo "<div class=\"item active\">".$row["name"]."</div>";
    }
    Ответ написан
    4 комментария
  • Как настроить учетную запись FTP на Ubuntu?

    @MadridianFox
    Web-программист, многостаночник
    Права файлов/папок это не user/group, а user: rwx + group: rwx + other: rwx, где rwx это три права - чтение, запись и исполнение. Сделайте ls -l и увидите в первом столбце строки вида: -rwxrw-r-- или что-то подобное - это права на файлы.
    Если точнее, то такая запись прав состоит из 10 символов
    1) - или d -- указание на файл или папку (бывают и другие варианты, но эти чаще всего)
    2) rwx -- первая тройка прав это права владельца
    3) rwx -- вторая тройка прав - права группы
    4) rwx -- третья тройка прав - права всех остальных
    вместо любого символа из тройки можно ставить прочерк - это значит что этого права нет

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

    Когда файл создаётся через ftp, то его владелец это пользователь webmaster и его группа это группа с именем webmaster (да, бывают одноимённые с пользователем группы). И наоборот, когда файлы создаются через web, то для них владелец это www-data и группа соответствующая.

    Как вы сами сказали - вариантов много, можно, например, настроить ftp чтобы он работал от имени того же www-data.
    но проще просто добавить пользователя webmaster в группу www-data, а пользователя www-data в группу webmaster. Тогда и через web и через ftp будет доступ ко всем файлам, при условии что у них стоят нормальные права для группы.
    Ответ написан
  • Какой язык программирования изучать, что-бы быстрее найти работу?

    @MadridianFox
    Web-программист, многостаночник
    Если хотите научиться программировать - пишите программы на си и на java. Эти два языка дадут вам понимание базовых и универсальных концепций программирования. Си - как механическая коробка передач. С него на языки с автоматическим управлением памятью уходить легко. Обратно не очень. Java - эталон современного ООП. Всякие js/go/python вам создадут детскую травму по этой части, там либо всё не так, либо урезано.
    После этого хоть в ад, хоть в Израиль... Изучение следующих языков будет просто запоминанием синтаксиса и стандартной библиотеки, ну и применением нюансов языка относительно первых двух.

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

    Студент? Замечательно - у тебя есть куча времени для практики и возможность устроиться куда-нибудь в качестве студента-обезьянки-которая-пишет-код.
    Ответ написан
    Комментировать