Задать вопрос
Ответы пользователя по тегу PHP
  • Какие задачи должен уметь решать web разработчик?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    легко создавать поисковые системы

    4a860729a580bc363f03ba453c481f81fcc4eaa4
    Как правильно развиваться, учиться, чтобы за всем поспевать?

    Есть только алгоритм: не знакомая технология - читаешь официальную справку/статьи. Короче говоря учишь то, что не знаешь.
    Ответ написан
    Комментировать
  • Как повторить фид вк?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Никогда не используйте SELECT *. Жестко указывайте, что и как вы хотите получить. Рекомендую управляющие конструкции писать не как попало, а в UPPER CASE.

    Не будет ли тогда слишком большой размер таблицы тормозить sql-запросы?

    Если не будете делать запросов с глупостями в стиле ORDER BY RAND(), и правильно пропишете индексы - проблемы быть не должно.

    Потому что я думал, что лучше 10 000 таблиц с 10 000 строками, чем таблица с 100 000 000 строками.

    Об этом имеет смысл задумываться только если стоит задача горизонтального масштабирования.
    Ответ написан
    Комментировать
  • Как отличить простой массив от ассоциативного с числовыми ключами?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Никак, список не явно все равно преобразуется к ассоциативному массиву.
    Даже более:
    $arr = ['1' => 'A', '2' => 'B'];
    Вот такой массив будет преобразован к [1 => 'A', 2 => 'B']
    Ответ написан
    Комментировать
  • Как организовать роутинг php?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Посмотреть уже готовый из фреймворка, например lumen, или silex
    Ответ написан
  • Проблема с php. Как правильно реализовать или связать div?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    То, что вы ищите называется SPA. Конкретно под работу с БД - результаты частых выборок имеет смысл кэшировать.
    Ответ написан
    Комментировать
  • Работа без высшего образования, это реально?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Я хорошо знаю языки программирования как Веб(html,php,js,sql) так и обычные(c++,c,c#,Java)

    Not bad. Если учесть, что на каждый из системных для хорошего знания и понимания нужно минимум 2 года (для С сделаем поблажку, потому как с++ его включает), + php/js по 1.5 + принципы работы сети + принципы работ реляционных бд. Итого 17-(2*3+2*1.5+1) программировать вы начали с 7-ти лет.

    Безусловно, я могу ошибаться, но вероятнее всего вы себя очень переоцениваете.

    Работодателю ,как правило, плевать на бумажки. Для него вы ресурс, который приносит деньги. Если вы можете это сделать - проблем с устройством не будет. Если нет - проблемы будут.

    Диплом обычно требуют в гос компаниях, но хотеть там работать... ну я не знаю... единственная известная мне плюшка - дешевые столовые))
    Ответ написан
    7 комментариев
  • Как бороться с тем, что клиент не узнает о смене состояния сервера из-за таймаута?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Клиент генерирует UUID транзакции и отправляет ее на сервер.
    Допустим она выполнялась долго и клиент схватил 500-ю. В этом случае клиент запрашивает (отдельный API метод) статус транзакции (UUID ее он знает). Если получает "все ок" - все ок)). Если ошибку: запрашивает отмену своей транзакции. Если 500-ю - пытается отменить транзакцию, выполняя запросы с экспоненциальной задержкой, пока не получит ответ: да, отменили мы твою транзакцию.
    Ответ написан
    Комментировать
  • Через какую программу лучше обновлять файлы на сервере (сайт)?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    git

    Т.е. чтобы какое-то прямое соединение было, на компе отредактировал нужный скрипт, на сервере все обновилось.

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

    Конкретно под разработку - vagrant
    Ответ написан
    Комментировать
  • Безопасно ли использовать eval, если на сайте нет базы данных?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    В коде "врагов" - вполне безопасно, я бы даже сказал полезно. Искренне надеюсь что у вас их нет.
    Ответ написан
    Комментировать
  • Почему падает сервер при обращении к другому серверу?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    в логи посмотреть религия не позволяет?))
    Ответ написан
    6 комментариев
  • Почему PHPStorm перестал форматировать код некоторых PHP файлов?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Почистите кэш. Такое возможно, если индексация прошла с ошибками, ил не закончена.
    Ответ написан
  • Русскоязычный подкаст о PHP?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Честно говоря не ясно, зачем... Про php есть тонны информации.

    Хотя, я могу и ошибаться. Какие темы предполагаются?

    2 вопроса:
    - почему код ниже говно?
    - почему код ниже НЕ говно?
    ))
    <?php
    
    namespace vendor\project\some\models;
    
    /**
     * Class User
     */
    final class User implements \Serializable
    {
        const FIELD_USER_ID = 'userId';
        const FIELD_NAME = 'name';
        const FIELD_PASSWORD = 'password';
    
        /** @var int */
        private $userId;
        /** @var string */
        private $name;
        /** @var string */
        private $password;
    
        /**
         * User constructor
         *
         * @param string $userId
         * @param string $name
         * @param string $password
         */
        public function __construct($userId, $password, $name)
        {
            if (empty($userId)) {
                throw new \InvalidArgumentException('$userId MUST NOT be empty');
            }
    
            if (!is_int($userId)) {
                throw new \InvalidArgumentException('$userId MUST be int');
            }
    
            if ($userId < 0) {
                throw new \InvalidArgumentException('$userId MUST be more than 0');
            }
    
            if (empty($password)) {
                throw new \InvalidArgumentException('$password MUST NOT be empty');
            }
    
            if (!is_string($password)) {
                throw new \InvalidArgumentException('$password MUST be string');
            }
    
            if (mb_strlen($password) !== 32) {
                throw new \InvalidArgumentException('$password MUST have length 32');
            }
    
            if (empty($name)) {
                throw new \InvalidArgumentException('$name MUST NOT be empty');
            }
    
            if (!is_string($name)) {
                throw new \InvalidArgumentException('$name MUST be string');
            }
    
            $this->userId = $userId;
            $this->name = $name;
            $this->password = $password;
        }
    
        /**
         * @return string
         */
        public function getUserId()
        {
            return $this->userId;
        }
    
        /**
         * @return string
         */
        public function getName()
        {
            return $this->name;
        }
    
        /**
         * @return string
         */
        public function getPassword()
        {
            return $this->password;
        }
    
        /**
         * @return string
         */
        public function serialize()
        {
            return serialize(
                [
                    self::FIELD_USER_ID => $this->getUserId(),
                    self::FIELD_NAME => $this->getName(),
                    self::FIELD_PASSWORD => $this->getPassword()
                ]
            );
        }
    
        /**
         * @param string $serialized
         *
         * @return string
         */
        public function unserialize($serialized)
        {
            if (!is_string($serialized)) {
                throw new \InvalidArgumentException('$serialized MUST be string');
            }
            
            $data = unserialize($serialized);
            if (
                !isset($data[self::FIELD_USER_ID]) ||
                !isset($data[self::FIELD_NAME]) ||
                !isset($data[self::FIELD_PASSWORD]) ||
                (count($data) !== 3)
            ) {
                throw new \InvalidArgumentException('Invalid serialized data');
            }
    
            return new self(
                $data[self::FIELD_USER_ID],
                $data[self::FIELD_NAME],
                $data[self::FIELD_PASSWORD]
            );
        }
    }
    Ответ написан
  • Как настроить рабочее пространство на Windows и Ubuntu для обучения PHP?

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

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    10к пользователей - это абстракция. Нагрузка обычно меряется либо в rps (request per second), либо в bit/sec.

    rps можно померить через утилиту ab (apache benchmark)
    трафик - uperf
    Ответ написан
    Комментировать
  • Как правильно сделать гибрид SPA и классики?

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

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    1. Файлы должны хранится в не публичном каталоге.
    2. Проверка доступа - php часть с отдачей на базе заголовков X-Sendfile, или X-Accel-Redirect. Читать и отдавать с помощью php - очень дорого.
    3. Ну и конечно права на запуск должны отсутствовать.
    Ответ написан
    Комментировать
  • Где искать последствия атаки на сайт?

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

    Конкретно в вашем случае - это подбор SQL-инъекций.
    Ответ написан
    Комментировать
  • Какой интерфейс ReadOnly настроек выбрать?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    То, что вы ищите обычно называют не мутабельными моделями.

    Все настройки задаются в конструкторе, там же они валидируются и присваиваются приватным свойствам. Сеттеров нет, только геттеры (вариант 3).

    Конкретно для настроек имеет смысл создать класс с константами, например в таком виде:

    config/AbstractConstant.php - общие настройки для всей системы И настройками "по умолчанию".
    config/Constant.php (Наследует AbstractConstant) - это класс содержит настройки для текущего окружения.

    В итоге в любой части системы вы получите доступ к настройкам примерно так:
    \Contant::MYSQL_USER
    Ответ написан
  • Чего не хватает сервису?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    С точки зрения бизнеса ваш проект опасен. Передавать трафик третьему лицу (т.е. вашему сервису), вместо того что бы выполнять эту задачу собственными силами как-то не правильно. Тот же даже очень нагруженный чат реализуется через сервера очередей, или кластер redis(pub/sub) с нодой на фронте.

    Тема пожертвований - это конечно мило, но что вам мешает помимо целевых сообщений, передавать еще например рекламу? Сам пользователь будет думать, что это либо его собеседник, либо мой сервис, про hawk он даже не будет иметь ни малейшего представления.
    Ответ написан