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

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    php.net - официальная документация PHP весьма неплоха, там полностью покрываются все основы. Далее читаем книжки. Ну и все сопровождать практикой.
    Ответ написан
  • Как правильно реализовать PHP парсер больших объемов информации?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Message Queue, лог обработанных страниц, демон который будет все это добро обрабатывать, скрипт который будет заносить задачи на обработку в очередь. Так же можно для гибкости вынести в отдельную очередь запись результатов в базу (или вообще хранить временно в redis каком). Тогда больше простора для масштабирования.
    Ответ написан
    23 комментария
  • Почему PDO::fetchAll() очищается после первого использования?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    объяснение проблемы - fetchAll забирает все данные до конца. Очевидно да? Что это значит на деле - когда мы выполняем запрос то база данных возвращает нам указатель на начало результата, у нас еще нет всего результата. Сделав fetchRow мы забираем первый результат, указатель переходит на следующую строчку и т.д. Потому то когда у нас уже нет результата мы получаем null.

    Вот и с fetchAll выходит так же. Второй раз не выйдет.

    p.s. пересмотрите свои взгляды на то, как вы работаете с данными. Используйте fetchAll один раз и реюзайте результат для чего вы там хотите странного.
    Ответ написан
    Комментировать
  • Вывод популярных записей на сайте за определенный срок, как?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    ну значит надо еще агрегировать статистику по просмотрам за сутки. Самый простой вариант - завести лог просмотров, но тогда база быстро забьется всякой чухней. Далее мы можем оптимизировать это дело и просто раз в сутки ресетить счетчик просмотров в ноль и записывать сколько было просмотров за такую-то дату. Так у нас будет достоверная инфа для выборки.
    Ответ написан
    Комментировать
  • Как в socket_bind указать адрес, а не ip?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    мм... почитайте про URI, про сокеты и что все таки делает socket_bind. Тогда вопрос думаю отпадет сам собой.
    Ответ написан
    Комментировать
  • ORM or NotORM? Что лучше выбрать?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    крупные проекты бывают разные. Если у вас сложная бизнес логика то лучше взять Doctrine2. Если очень много запросов на чтение и сложные выборки, и при этом бизнес логика примитивна (crud) - можно просто взять doctrine/dbal и не париться, мэпить данные прямо на какие-то transfer object-ы. В этом ключе всякие там недо-ормки подходят хорошо, так как упрощают мэппинг при записи.

    В мире PHP есть только одна нормальная ORM - доктрина (как это не печально, но похожая ситуация и в других языках, python - только SQLAlchemy, java - только hibernate по сути. Связано это с тем что правильная ORM с дата мэппером это ооочень сложно). Все остальное это так... не серьезно. Просто упрощалки которые позволяют работать с таблицами. На реально крупных проектах которые пишут бородатые дядьки, возьми они Active Record и вынесут в отдельный слой что бы не трогало даже приложение, будут использовать эту штуку тупо как DTO между приложением и базой. Собственно многие так и доктрину используют, но это уже детали.

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

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Аксиома эскобара, array_filter всегда лучше с точки зрения читабельности кода.

    Но в целом побеждает первый вариант так как он банально читабельный.
    Ответ написан
    Комментировать
  • Есть ли где-то не очень большой пример написанного REST сервера?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Предлагаю альтернативный вариант - parse.com и аналогичные сервисы.
    Ответ написан
  • CMS vs. Native?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    как влияет разработка cайтов с помощью CMS на общие знания по PHP?

    вы же видите результаты тестов - никак. Ни положительно ни отрицательно.

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

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    1) выкинуть codeigniter и переписать все на reactphp
    2) вместо того что бы выдумывать наркоманию не парьтесь и делайте как все, stateless апишки и все такое. keep-alive минимизируют расходы на установление http соединения, а для оптимизации работы с базой можно просто использовать persistent connections и тд.
    3) выкинуть codeigniter и переписать на любом фреймворке использующим PSR-7 или symfony/httpkernel, вооружиться php-pm.
    Ответ написан
    Комментировать
  • Как лучше отправлять сообщения в MQ (AMQP), TCP или UDP?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    единственный плюс UDP - отсутствие оверхэда на установление соединения. Это выгодно скажем для логирование, когда вы записываете что-то в сокет (не очень много данных, что бы влезло в пакет) и будь что будет. В случае с MQ вам все же нужна гарантия доставки сообщений.

    С другой стороны, если вы будете подключаться на loopback интерфейс (MQ сервер будет на том же сервере что и источник заданий), то оверхэда практически не будет, операционная система в этом случае опускает большую часть сетевого стэка.
    Ответ написан
    Комментировать
  • Библиотека для оптимизации изображений?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    вы нагуглили то что нужно.

    Еще есть частично бесплатная API у tinyjpg.com: https://tinypng.com/developers
    500 картинок в месяц, но нужно быть осторожным с png с прозрачностью.
    Ответ написан
    Комментировать
  • Насколько код ООП и что бы вы посоветовали по его улучшению?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    забейте на время на MVC, почитайте про SOLID.

    1) mysql_* функции депрекейтед, используйте pdo (mysqli слишком низкоуровневая штука)
    2) делать 2 раза md5 не имеет никакого смысла. Сейчас можно генерить миллиарды хэшей в секунду на видеокартах так что подбор коллизии к хэшу займет не сильно много времени и большая часть паролей будет подобрана за первые пару часов. Используйте password_hash и password_verify. Для PHP < 5.5 есть флэбэк написанный на PHP.
    3) вы нарушили принцип единой ответственности, это к вопросу о том насколько ваш код ООП. Ну и принцип инверсии зависимостей туда же....
    Ответ написан
    5 комментариев
  • Куда сохранять данные - в БД или документ?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    если хранить это все не в БД.

    БД не допустит конфликтов по записи и сделает это в памяти перед записью на диск, в случае с файлами вам придется баловаться с локами, и что бы сделать это хоть сколько нибудь эффективно вам придется потратить чуть чуть времени.

    другой вопрос какуб СУБД использовать, можно просто в nosql хранить (key-value хранилища) и мэпить на файлы.
    Ответ написан
    Комментировать
  • Для каждой статьи отдельная таблица с лайками?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Нормальная форма

    Грубо говоря лайки это связь многие-ко-многи статей и пользователей. Если вам надо хранить дополнительную информацию (вроде времени, когда пользователь лайкнул) то вводится промежуточная таблица и связывается и с пользователями и со статьями.
    Ответ написан
    Комментировать
  • Как создавать классы в phpstorm?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Комментировать
  • Как организовать фабрику для создания объектов?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    сразу скажу не использую ORM

    Сразу скажу - используйте ORM.

    class UserService{

    И где тут DDD? Где единый язык?

    Вопрос такой, где производить сборку готовой сущности для дальнейшего использования,

    В репозитории или в одной из его зависимостей. В частности в Doctrine2 репозиторий запрашивает сущность в entity manager-а, который загружает их сначала в unit of work, который хранит все в identity map для того что бы не допускать дублей сущностей (если мы будем каким либо образом запрашивать одну и ту же сущность, ORM вернет вам один и тот же объект, что делает использование ORM собственно и удобным). Внутренний мэппер мэпит данные из базы на сущности с использованием гидраторов.

    При сохранении происходит flush Unit-of-Work, при котором вычисляются изменения во всех сущностях и генерится SQL.

    то есть вам в любом случае нужно реализовать мэппер объектов либо взять готовый, затем вам нужно реализовать Unit-of-work, затем лоадер данных из базы ну и т.д. Я обдумывал вариант легкой замены Doctrine2 и понял что это в принципе практически не возможно. Именно по этой причине существует не так много реализаций data-mapper, для PHP это только доктрина, для Java это Hibernate, для Python - SQLAlchemy... и как бы больше реализаций и нет.

    Дядя Боб в одном из своих докладов на тему архитектуры приложенй (запамятовал название, поищу) рассказывал на эту тему много чего, мол и про загоны "не использовать ORM" которые были в 90-х, и почему реализация дата мэппера это весьма сложная задача....

    p.s. вывод - берите Doctrine2 ORM и не засоряйте себе голову попытками реализовать дата мэппер самостоятельно - это очень сложная задача. Именно поэтому не так много реализаций этого подхода.
    Ответ написан
    2 комментария
  • Развитие в веб программировании. Какой путь?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Какой путь?

    Прямо и немного на лево.

    проект планирую долго поддерживать хочу попробовать перейти на что-то новое

    Node.js + MongoDB


    Может не стоит? Оцените профит, риски... хорошенько подумайте. Монга как основное хранилище данных вообще весьма сомнительный выбор. Лучше храните все в mysql/postgresql и агрегируйте в монгу, используйте read model, cqrs...
    Ответ написан
    Комментировать
  • Стоит ли переходить на MongoDB для блога (PHP)?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    монга - документно-ориентированная база. Подумайте хорошенько. Если вы не планируете вводить связи между записями - то смело берите монгу. В противном случае не стоит.
    Ответ написан
    5 комментариев