Задать вопрос
Ответы пользователя по тегу PHP
  • Почему форматирование по стандартам code style в PhpStorm и eclipse разное?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    PSR + дополнительные соглашения, не противоречащие PSR.
    Pear - стандарт как и сам подход с либами уже устарел, не стоит его ворошить.

    При внедрении CS - быть демократии не может. Если код не проходит проверку - не вливается.
    Код ревью пост фактум - это практика, которая ни к чему не приведет, не повторяйте чужих ошибок.

    На счет IDE: все равно в чем пишет программист, хоть в vim. Если проверка через PHP_CodeSniffer не проходит - ветка не будет вмерджена до исправления, увы, только так. Иначе - на ваш код стайл будет класться вооотакенный таёжный прибор.

    У того же phpStorm очень гибкая система настройки CS, которую можно спокойно распространить по компании.
    Ответ написан
    Комментировать
  • Как правильно и грамотно писать код?

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

    Смотрите Twig, Smarty.

    Без использования фреймворков конечно.

    Данное утверждение как правило не имеет смысла. Фреймворк - это скелет вашего приложения и далеко не факт, что вы сможете написать лучше.
    Смотрите Symfony.

    Что-что, а вправлять мозг этот фреймворк умеет, оч. рекомендую. Ну и книжки типа Макконнелла "Соврешенный код" почитайте.
    Ответ написан
    Комментировать
  • Взлом сайта, как понять почему так происходит?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    С чем это может быть связано?

    Вас взломали.

    Какие промахи в безопасности такое производят?

    Вопрос из серии: "что я сделал не правильно?".
    Это могут быть:
    * доступ на основе популярных логинов/паролей
    * похищение пароля админа, через XSS
    * слабо защищенный FTP/SFTP
    * SQL инъекции
    * загружаемые файлы имеют право на выполнение
    * загружаемые файлы могут быть включены в основной код
    * сайт на CMS со включенным debug режимом
    * встречал случаи взлома "изнутри" когда взломщиком является коллега
    * возможно взломали на самом деле хостера, а вам просто не повезло
    * наружу торчат открытые порты доверенных сервисов: mysql, memcached, redis,...
    * ...

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

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    как возобновить обучение, но использовать все новые функции, а не продолжать читать про богом забытый PEAR?

    Не читайте про PEAR, смотрите пакеты на https://packagist.org/

    Где искать самую актуальную литературу?

    php.net

    Чьи видеоуроки смотреть, пусть даже с самого начального уровня, но с учетом всех нововведений PHP 7?

    Ни чиьи, про самое новое пишут статьи обычно. Читайте https://habrahabr.ru/, парни из Zfort делают вполне не плохие дайжесты https://habrahabr.ru/company/zfort/
    Ответ написан
    Комментировать
  • Как загрузить сразу все изображения в одно поле в БД?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Вы пытаетесь отстрелить себе яйца, причем разрывными патронами((

    1. explode - для работы с "прогнозируемыми" строками вполне норм, у вас же файлы, могут быть вообще бинарные, например картинки. В случае попадания на delimiter посреди файла - получите кучу мусора. "explode" в смысле "взрыв" - это очень подходящее слово.

    2. В БД хранить файлы - не хорошо, вы будете ушатывать БД просто так. Самое интересное - как вы бэкапы планируете делать)) Объемы будут расти очень быстро.

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

    4. Отдача файлов, вот тут тоже веселье: допустим получив мега строку вы разделите ее на куски и вытащите таки свой заветный файл, потом будете отдавать его через echo, это будет на порядок дольше, чем через web сервер на прямую.

    5. Память на php: что будет, если ваша мега строка занимает 500мб? PHP с настройками по умолчанию сдохнет, даже не дочитав его.

    В общем: для хранения файлов используйте БД специально спроектированную для хранения файлов. Это файловая система. Если очень хочется шардирования для снижения нагрузки - можете посмотреть в сторону решений на базе mogilefs.
    В MySQL при этом стоит хранить только нужную дополнительную информацию о файле, например: путь, md5, некий идентификатор,...
    Сам файл лучше при сохранении приводить к такому виду:
    1. Берем md5 хэш от файла md5_file, допустим он у нас получился 01230000000000000000000000000000
    2. Перемещаем его в каталог: {UPLOAD_ROOT}/01/23/0000000000000000000000000000. Тут смысл в том, что при большом количестве файлов в одном каталоге будут проблемы с файловой системой по части производительности. В принципе можно оставить оригинальное расширение, тогда шаг 4 не нужен.
    3. В БД храним md5 хэш, путь к файлу и MIME-тип, можно еще и оригинальное имя.
    4. При запросе на вашу страницу - отдаем через x-accel-redirect, или x-sendfile
    Ответ написан
    2 комментария
  • Как запустить множество php скриптов одновременно?

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

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Комментировать
  • Знак неравенства в mysql?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    IS NOT
    Ответ написан
    Комментировать
  • Что означает return $this?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Вернуть инстанс текущего класса, удобно для чейнинга:
    $this->a()->b();
    Ответ написан
    1 комментарий
  • PHP, нормально ли на каждый запрос открывать коннект к MySQL, делать SELECT и закрывать коннект? Если нет, то как избежать?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Под чаты php - не лучший выбор, смотрите в сторону nodejs.
    Конкретно историю пишите в redis, а далее отдельным вызовом - в БД (если бизнес задачи этого требуют).
    Ушатывать БД только потому, что можете - это плохая идея.
    Ответ написан
  • Проверка данных. Насколько целесообразно делать так?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    false в вашем случае - это что-то пошло не так. Это не информативно. Используйте исключения.

    Что касается проверок - их не достаточно.
    Обязательно проверяйте типы аргументов для простых типов, для обьектов - лучше тайп хинтинг. Например что произойдет, если вместо массива вам влетит обьект?

    Могу порекомендовать либу для быстрой валидации аргументов: https://github.com/ko-ko-ko/php-assert
    В вашем случае проверка будет такая:
    /**
     * @param array $array
     * @param int   $uid
     * @throws InvalidArgumentException
     * @throws InvalidArrayException
     * @throws InvalidIntException
     * @throws InvalidIntOrFloatException
     * @throws InvalidNotEmptyException
     * @throws InvalidNotObjectException
     * @throws InvalidRegexpPatternException
     * @throws InvalidStringException
     * @throws NumberNotPositiveException
     * @throws StringNotMatchRegExpException
     */
    public function validChangeData($array, $uid)
    {
        Assert::assert($array, 'array')->isArray()->notEmpty();
        Assert::assert($uid, 'uid')->int()->positive();
        
        if (!array_key_exists('email', $array)) {
            throw new \InvalidArgumentException('Argument "$array" has no element "email"');
        }
        
        $email = $array['email'];
    
        Assert::assert($email, 'email')->string()->notEmpty()->match(
            '/^[a-z0-9](([_\.-]?[a-z0-9]+)*){0,19}@([a-z0-9]([_-]?[a-z0-9]+)?\.){1,3}[a-z]{2,6}$/i'
        );
    
        $this->updateUserData($array, $uid);
    }
    Ответ написан
  • Node.js как замена PHP?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Нода хороша для задач, завязанных на событийную модель. Под задачи, с последовательным выполнением ноду лучше НЕ брать.
    Пхп хорош под задачи web, не требующие хранения состояния (или с внешним хранилищем под сессии на пример) язык идеален.

    Нода не может быть заменой пхп, а пхп - заменой ноды. Они предназначены для разных задач.
    Ответ написан
  • Объясните человеческим языком, что такое веб-фреймворк на языке php?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Смогу ли я на фреймворке писать свои модули для моей CMS

    Если ваша CMS написана на фреймворке - да. Вполне возможна и частичная интеграция, но это путь боли.

    Наверняка не в одном фреймворке нет функции анализа собственного контента по принципу поисковых роботов.

    Фреймворк - это каркас для построения приложений. Он не решает бизнес задачи, вместо этого - технические.

    Не помешает ли мне фреймворк создавать такие модули из-за своего ограниченного функционала.

    Может помешать только в случае, если принципы принятые в фреймворке противоречат принципам в вашем проекте. Это возможно только если вы явно выбрали не тот фреймворк. Например: для работы с БД у вас во всю используется Doctrine2, вы выбираете фреймворк yii2 и частично переходите на его ActiveRecord - это приведет к большим проблемам.

    Смогу ли я совершенствовать любой модуль фреймворка (например добавление комментариев) под свои нужны не мешая его обновлению.

    Да, форкаете фреймворк, публикуете форк в композере и пишите там все что хотите. При обновлении фреймворка - вливаете изменения в свой форк.

    Или придется ли мне все переписывать с выходом новой версии, как это приходится делать на CMS типа DLE.

    Если у вас зависимость в композере только с последней версией фреймворка - сами себе злобный буратино)). Указывайте фиксированную и обновляйтесь по собственному желанию, либо вовсе не обновляйтесь.

    На сколько я буду зависеть от выхода новых версий?

    Зависимость от новых версий фреймворка - полностью на вас. Как напишите так и будете зависеть))

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

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

    Можно ли будет постепенно, не нарушая работу сайта, перенести собственные CMS на фреймворк учитывая то, что в них десятки модулей, собственные админ панели и т.д.

    Да

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

    Можете, форкаете фреймворк и публикуете его в composer. Правда подобная ситуация возможна для фреймворков крайне редко и скорее сигнализирует о том, что вы выбрали хреновый фреймворк.
    Ответ написан
    Комментировать
  • Какие способы релизации шаблонов и хуков есть в PHP?

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

    Но это путь в никуда и так делать не стоит.

    На счет кода до и после - очень странный кейс и тоже оооочень хреновый, так делать нельзя.

    Получаете список токенов через token_get_all далее находите вызов конкретно вашей функции то, что до и после конкатенируете. Далее выполняете то что вам надо и в eval.

    Но еще раз это пример ужасного подхода и так писать нельзя.
    Ответ написан
  • Как сделать древовидную структуру комментариев?

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

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Я надеюсь это не кириллицей "р" написано?)))
    Ответ написан
  • Как можно улучшить данный код?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Улучшить можно, но смысла в этом особого нет, это же wp - тяп-ляп да в продакшн.

    1. В шаблон передаются только данные, сам он ничего не вызывает (кроме рендеринга вложенных шаблонов).
    2. Кодстайл я так понимаю для вас не знакомое словосочетание, почитайте PSR-0, PSR-1, PSR-2, PSR-4.
    Например:
    вызываете функции и с пробелами внутри скобок и без;
    некоторые присваивания - выравниваете, некоторые - нет;
    иногда на строке одно выражение, иногда больше;
    иногда для вывода верстки используете echo, иногда закрываете php-тег;
    иногда используете двойные кавычки, иногда одинарные (в смысле там, где двойные - без надобности);
    иногда php код начинаете с новой строки, иногда на той же, что и php-тег.

    Если хотите реально что-то улучшить - посмотрите список требований + от wp придется отказаться.
    Ответ написан
    Комментировать
  • Как исключить подсчёт ненужных файлов в папке?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    public function getCountFiles($globMask, array $without = [])
    {
        if (!is_string($globMask)) {
            throw new \InvalidArrayException(
                sprintf('Argument "$globMask" must be "string", actual type: "%s"', gettype($globMask))
            );
        }
    
        $filterCallback = function ($path) use ($without) {
            return is_file($path) && !in_array($path, $without);
        };
    
        return count(array_filter(glob($globMask), $filterCallback));
    }
    Ответ написан
  • MVC, правильно ли таким образом инклюдить модель и view в контроллер?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    По хорошему у вас require_once должен быть 1 раз указан в проекте, причем он должен загружать автозагрузчик composer.

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

    Посмотрите Symfony, Silex
    Ответ написан
    Комментировать