Ответы пользователя по тегу PHP
  • Как правильно создать структуру сайта?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    app/            Система инициализации
      config/       Хост-зависимые настройки
    bin/            Исполняемые файлы
    src/            Исходный код проекта
      command/      Контроллеры консольных команд
      component/    Разнообразные хэлперы
      controller/   Web-ориентированные контроллеры
      entity/       Сущности данных
      repository/   Репозитории БД
      migration/    Миграции БД
      service/      Вспомогательные сервисы, например сервис отправки почты
      test/         Тесты системы
        fixture/    Фикстуры БД
        functional/ Функциональные тесты
        unit/       Unit тесты
    vendor/         Внешние зависимости проекта
    web/            Публичный каталог для web сервера
      assets/       Статические файлы
        css/
        font/
        img/
        js/
    Ответ написан
    Комментировать
  • Чей код чище и удобнее расширятся битрикс или модх?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Здесь как нельзя кстати подходят суждения господина Эскобара из группы Бредор.
    CMS как праило заточены под конкретные use-case. MODx например хорош для визиток, Битрикс - наверное тоже чем то хорош.
    Любая система, даже не на базе CMS может иметь правильную структуру, код или наоборот, но это зависит от требований к разрабатываемой системе.
    Ответ написан
    2 комментария
  • Какую систему учета рабочего времени удаленного разработчика использовать?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Коллеги, вопрос ведь заключается не только в контроле поставленных задач, а в их правильной оценке трудозатрат, расписанию задач и выполнению.

    Контроль выполнения поставленных задач - это задача project manager.
    Контроль качества выполнения задач - это задача qa.
    Расписание задач и выставление приоритетов на этапе планирования - это задача project owner + project manager + ...(зависит от процесса).
    Расписание задач и выставление их приоритетов уже в процессе выполнения - это задача project manager.
    Оценка трудоемкости - это задача developer.

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

    Предприниматель как правило находится в роли project owner, оценка трудозатрат - это не его привилегия. Дело в том, что оценить их может только программист.

    Может я конечно чего то не понимаю, но: если программист выполняет поставленные задачи за приемлемое время/деньги - вообще по боку, чем он занимается. Если не выполняет, вы уведомили его об этом и ничего не поменялось - пора прощаться.
    Ответ написан
    Комментировать
  • Нужен Code Review?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    1. Каталог .idea должен быть проигнорирован
    2. MVC - читаем и используем.
    3. PSR-1, PSR-2, PSR-4 - читаем и используем.
    4. По хорошему, require в вашем коде должен быть 1 раз при подключении автолодера.
    5. Вперемешку html+css+js - это гуано))
    6. В вашем коде, увы нечего спасать.
    Ответ написан
    4 комментария
  • Самый быстрый веб-сервер php для windows?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Как добиться того, чтоб сайты (которые пишутся с помощью php-фреймворков) на локальном веб-сервере просто летали?

    web сервер выполняет транспортную роль по большей части. Что бы сайт "летали" - их нужно писать так, что бы "летали"))

    Какой локальный сервер использовать?

    nginx+php-fpm

    Пробовал много чего: vagrant, ubuntu-сервер разворачивал сам. Но эти варианты для меня не удобны.

    Вам шашчеки, или ехать?

    NGINX вообще ни разу не пробовал. Его хвалят, но как его устанавливать и настраивать в Windows я не нашёл.

    Вы того, не воспринимайте win как серверную ОС и все встанет на свои места))
    Ответ написан
    2 комментария
  • ORM or NotORM? Что лучше выбрать?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    1 комментарий
  • Как возвращать нескольких json за один веб запрос?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Каким образом возможно отправив один ajax получать данные и сразу же их обрабатывать, не дожидаясь окончания запроса?

    Вы ищите websockets. Но там есть куча нюансов.

    т .е я хочу получать json массивы(ссылки на фото) и сразу же их выводить в рамках одного запроса

    В чем проблема то? Оборачиваете в некую коллекцию и ее уже ее сериализуете в json.

    на сервере крутится php - codeigniter.

    NO! Не тыкайте труп палкой, пусть уйдет достойно.

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

    Вы пытаетесь решить надуманную проблему методом, который ее не решит.
    Нагрузка с БД как правило снимается за счет:
    * настройки индексов
    * оптимизации запросов
    * кэширования.
    ...

    ...хочется чтоб все обработывалось одним процессом на сервере

    Круто, зачем вам php тогда?

    в сторону какой технологии смотреть, подскажите composer библиотечку и т.п?

    Как минимум:
    * SOLID
    * PSR-2,3,4,7
    * Symfony / Silex
    Ответ написан
    3 комментария
  • Маршрутизация, имеет ли такой подход право быть?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    1. Use HttpFoundation Luke!
    2. Ваш роутер, был бы не плох лет эдак 10 назад, но не сейчас, посмотрите роутинг symfony, или silex
    3. ОБЯЗАТЕЛЬНО читаем: PSR-1, PSR-2, PSR-4

    <?php
    namespace lib;
    class Router {
    // Может rules все таки?))
          private $rulls; // Зачем тут отступ?
    // phpDocumentor - ваш друг, прописывайте ОБЯЗАТЕЛЬНО типы данных.
        private $uri;
        private $controller;
        private $params = [];
    
        function __construct(){
            $this->setUri(); // У вас нет такого метода, есть setURI
            $this->setController();
            $this->setParams();
            $this->setRulls();
        }
    // Что будет, если $_SERVER['REQUEST_URI'] = '/?', или '/////'?
        private function setURI(){
    // Подобное форматирование может и ок для шаблонов, и то где-то, где вообще незаметно, но не тут читаем про PSR-2
            if($_SERVER['REQUEST_URI'] != '/'):
                $this->uri = explode('/',trim(parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH), '/'));
            endif;
        }
    // Я правильно понимаю, вы хотите сказать, что контроллер - это некий элемент массива (похоже string|null)? Обычно контроллер - это объект...
        private function setController(){
            $this->controller = array_shift($this->uri);
        }
    // В этом методе вы по тупому копируете элементы, зачем?
        private function setParams(){
    // Подобное форматирование может и ок для шаблонов, и то где-то, где вообще незаметно, но не тут читаем про PSR-2
            foreach ($this->uri as $value):
                $this->params[] = $value;
            endforeach;
        }
    
        private function setRulls(){
    // NO! загрузка данных - это НЕ задача роутера, от слова СОВСЕМ
            file_exists(SITE_ROOT.DS.'routing'.DS.'rulls.php') ? $this->rulls = include(SITE_ROOT.DS.'routing'.DS.'rulls.php') : die('Файл с конфигурацией роутинга где-то затерялся, извини.');
        }
    // В методе ничего нечего спасать, просто удалите его.
        public function run(){
    // НЕ ИСПОЛЬЗУЙТЕ ГЛОБАЛЬНЫЕ ПЕРМЕННЫЕ
            $_REQUEST = array_merge($_REQUEST, $this->params);
            $controller = '\\controllers\\'.$this->rulls[$this->controller]['controller'];
            $action = $this->rulls[$this->controller]['action'];
            $controller = new $controller; // Что будет, если такого класса нет?
            $controller->$action(); // Что будет, если такого метода нет?
        }
    }
    Ответ написан
    Комментировать
  • Насколько код ООП и что бы вы посоветовали по его улучшению?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    <?php
    // PSR-1, PSR-2, PSR-4 Читаем и пользуем!
    // namespace все дела... "Model_admin" - это прошлое.
    // phpDocumentor - твой друг, прописывай всюду типы данных
    class Model_admin extends Model
    {
    // Лишний перевод строки
        private $name;
        private $password;
        private $code;
        private $mail;
    // Не информативное название. get model admin... что бы это значило...
        public function get($login, $password) {
    // Где проверка аргумантов? Влететь может что угодно
            $this->name = $login;
            $this->password = $password;
    // Модель НЕ должна управлять подключением к БД, это должно выполняться выше в коде
            $this->db_connect();
    // Код вообще проверялся?)) у вас закрывающей строки нет.
            $result = msql_query("SELECT 'login', 'password', 'mail' FROM 'admin_authorization'";
    // сие уже deprecated, забудьте про mysql_*** функции, используйте PDO
            $arr = mysql_fetch_array($result);
    // Зачем нужен цикл, это дро*ба БД!!! Вытягиваете одну запись по логину и проверяете соответствует ли пароль
            do {
    // Лишний перевод строки
                if ($login === $arr['login']) {
    // Лишний перевод строки
                    if (
                        md5( md5( trim( $password ))) === $arr['password']
                    ) {
                        $this->mail = $arr['mail'];
                        $this->random_code();
    // Перед return лучше делать перевод строки
                        return true;
                    }
    // Лишний перевод строки
                }
    // сие уже deprecated, забудьте про mysql_*** функции, используйте PDO
    // Присваивание в условиях управляющих кнострукций лучше не делать, это операции разного характера
            } while ($arr = mysql_fetch_array($res));
    
            return false;
    // Лишний перевод строки
        }
    
        private function random_code($length = 15) {
    // Где проверка аргумантов? Влететь может что угодно
            $symbols = '0123456789abcdefghijklmnopqrstuvwxyz_-~!+*%$#&';
    
            for ($i = 0; $i < (int)$length; $i++)
            {
                $num = rand (1, strlen ($symbols));
                $this->code .= substr ($symbols, $num, 1);
            }
    // сие уже deprecated, забудьте про mysql_*** функции, используйте PDO
            $bool_update = mysql_query('UPDATE "admin_authorization" SET code="'.$this->code.'" WHERE login="'.$this->name.'"');
    // Вот так писать плохо, всегда используйте фигурные скобки.
            if ($bool_update) $this->send_code();
    // Лишний перевод строки
        }
    
        private function send_code() {
    // Модель НЕ должна отправлять письма, под отправку обычно пишется отдельная подсистема/сервис
            mail ($this->mail, "Admin code", $this->code);
        }
    
        public function check_code($user_code) {
    // Где проверка аргумантов? Влететь может что угодно
    // SQL инъекция!!!!
    // сие уже deprecated, забудьте про mysql_*** функции, используйте PDO
            $this->code = mysql_query("SELECT 'code' FROM admin_authorization WHERE code='".$user_code."'");
    // Вот так писать плохо, всегда используйте фигурные скобки.
            if ($this->code != '') return true;
        }
    // Лишний перевод строки
    }
    Ответ написан
    13 комментариев
  • Какая версия php сейчас актуальна для разработки?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Ответ написан
    Комментировать
  • Как сделать ns сервер на php для создания хостинга?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Как сделать ns сервер на php для создания хостинга?

    Всего 3 шага:
    1. Прочитать спецификации:

    • RFC 1034 — Domain Names — Concepts and Facilities
    • RFC 1035 — Domain Names — Implementation and Specification
    • RFC 1912 — Common DNS Operational and Configuration Errors
    • RFC 1591 — Domain Name System Structure and Delegation
    • RFC 1713 — Tools for DNS Debugging
    • RFC 2606 — Reserved Top Level DNS Names


    2. Осознать, что это было глупой затеей.
    3. Прочитать howto по настройке BIND
    Ответ написан
    7 комментариев
  • Какими способами можно поддерживать постоянно запущенное количество php-демонов?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    supervisor
    Ответ написан
    Комментировать
  • Какие преимущества хранения сессий в бд?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    в чем преимущество?

    Нет преимуществ. Ваша пара человек не понимает о чем говорит.

    Для начала потому что сессий у одного пользователя может быть множество, и это вполне нормально. Залогиньтесь в двух браузерах одним пользователем например.

    Сессия как правило - это необходимые горячие данные пользователя, что нужно сохранить между запросами. БД - одно из самых медленных хранилищ этих данных.

    В файлах кстати тоже не стоит хранить. При большой нагрузке io будет подтормаживать.

    Длительный период сессии обычно не хранятся, вместо этого на клиент задается токен, по которому человек через много времени может автоматически авторизироваться.
    Ответ написан
  • Какие линтеры для PHP использовать в precommit hook?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Ответ написан
    Комментировать
  • Как сделлать нормальный проект без хороших знаний?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Как сделлать нормальный проект без хороших знаний?

    Никак.

    Есть друг у которого есть бизнес и так он знает что я занимаюсь разработкой сайтов и с деньгами щас у меня туго , он сказал мне сделать интернет магазин небольшой за очень хорошую сумму.

    Если не хотите потерять друга - лучше не беритесь. Слишком много видел примеров, когда рабочие отношения вредят дружественным. С друзьями/родственниками лучше дело не иметь в принципе.

    Прошу подсказать cms для такого уровня знаний чтобы можно было сделать магазин более менее нормальный.

    Prestashop
    Ответ написан
    Комментировать
  • Cкрипт, который подсчитывает количество элементов в папке?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Вот так не делайте, от слова никогда.
    if ($handle = opendir($dir)) {


    Что бы не было подобной фигни:
    1. Сначала проверяете, является ли путь каталогом.
    2. Потом выполняете действия.

    При работе с путями лучше используйте глобальные пути.

    $path = __DIR__ . '/50/images/';
    
    if (!is_dir($path)) {
        throw new \RuntimeException(sprintf('Incorrect path: %s', $path));
    }
    
    $foundFiles = array_diff(scandir($path), ['..', '.']);
    
    // Warning, it could be folders to
    echo count($foundFiles);
    Ответ написан
  • Как стать фрилансером?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Устал от работы на дядю.

    Готовьтесь уставать еще больше. Фриланс предполагает, что вы не только dev, а и sails, pm, все в одном короче говоря + более высокие требования к самодисциплине. Так же готовьтесь к не постоянному заработку.

    Откуда мне брать портфолио?

    Не "брать", а "создавать". По началу: за еду делаете сайты-визитки, или что-то около того, можете знакомым понаделать (сарафанное радио - удивительная вещь).

    Приходит в голову только cms с открытым кодом написать как пример работы.

    Пустая трата времени.
    Ответ написан
    Комментировать
  • Возможно ли использование констант в константах?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    В 5.6 - можно, бывают кейсы для этого, например группы констант в массивах. Но ваша SQL-ина в константах - это:

    Y8lv5GmpfQA.jpg

    Либо делайте статическую переменную непосредственно внутри метода (что тоже не хорошо на самом деле), либо только метод, который вернет вашу SQL-лину.
    Ответ написан
    Комментировать
  • Как "объединить" записи в таблицах в одну строку?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Читайте на тему: Строковые функции MySQL
    Ответ написан
    Комментировать