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

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    $result = preg_match('/^code\d+$/', $str) ? 1 : 2;
    Ответ написан
    Комментировать
  • Какие знания/нвыки необходимы для написания своего API?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    REST, HTTP. Можете попробовать для начала с SIlex побаловаться если API простая. Или рассмотреть варианты всяких parse.com
    Ответ написан
    Комментировать
  • Gочему не могу прочитать cookie в php?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    1) зачем посылать запрос на сервер что бы создать куки? Это же можно сделать на клиенте.
    2) когда вы создаете куку, она в path (поскольку вы не задали значение сами) запихивает текущую директорию (в контексте URI а не файловой системы) и если вы хотите прочитать что-то по ссылке, "директория" которой отличается, естественно что у вас ничего не выйдет. Проверить легко и просто, сравните ссылку на которую вы делаете запрос, там где куки должны читаться, с тем, что записано в path у вашей куки (в дебагере браузера можно глянуть).
    Ответ написан
    Комментировать
  • Какая архитектура mysql необходима для создания простой социальной сети?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    У вас 2 варианта:
    - предложите хоть тут свой вариант архитектуры базы данных под вашу задачу
    - забейте может? Может не нужна вам эта ваша соц сеть? Может стоит начать с бложиков?
    Ответ написан
    2 комментария
  • Скажите, ajax hash, зачем он?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Что бы менять uri страницы без перезагрузки. html5 history api на старых браузерах нету, да и хэши проще.
    Ответ написан
  • Как определить узкое на сервере?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    www.xdebug.org/docs/profiler - использовать только для тестов, в продакшене стоит отключить.

    Есть подозрения что у вас какая-то беда с ресолвингом DNS серверов с memcache и/или базой данных. Проверьте может?
    Ответ написан
    8 комментариев
  • Для чего используются транзакции в mysql?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Транза́кция (англ. transaction) — группа последовательных операций с базой данных, которая представляет собой логическую единицу работы с данными. Транзакция может быть выполнена либо целиком и успешно, соблюдая целостность данных и независимо от параллельно идущих других транзакций, либо не выполнена вообще и тогда она не должна произвести никакого эффекта. Транзакции обрабатываются транзакционными системами, в процессе работы которых создаётся история транзакций.

    (c) Wikipedia

    То есть если нужно сделать транзакцию, делаем транзакцию. Если нет - не делаем... Вопрос в том какой уровень надежности вы хотите получить.
    Ответ написан
    Комментировать
  • В чем проблема с роутингом ?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    есть мнение что вы используете относительные ссылки при подключении css...
    Ответ написан
    2 комментария
  • Где научиться работать с composer?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    https://getcomposer.org/doc/ - тут есть все. Вообще все что нужно. Если здобрить гугл транслейтом всеравно довольно понятно все.

    Когда его нужно ставить локально, когда глобально

    как хотите или как вам удобнее. Можете всегда локально ставить, можете всегда глобально. Я ставлю глобально только на своей машине и на билд сервере... Хотя при моей схеме ставить composer локально и не нужно, так как он нужен только на локальной машине и на билд сервере... Если же вам при деплое на сервере нужен composer то имеет смысл просто закоммитить composer.phar или поставить его рядом с проектом на целевом сервере.

    как закачать расширение

    смотря что вы подразумеваете под "закачать". Установить , composer require, залить на packagist - читаем мануал на packagist или ставим напрямую из github/bitbucket.

    как обновить проект, как начинать новый проект

    composer update и composer init/create-project соответственно.

    https://getcomposer.org/doc/03-cli.md - судя по всему вам сначала сюда.
    Ответ написан
    Комментировать
  • Как сделать мгновенную доставку сообщений (Чат) как в ВК?

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


    Да, это называется pooling, потому придумали long pooling при котором опрос сервера происходит один раз, и ждет пока не придут какие-то данные, или соединение оборвется по таймауту. А потом снова. Это позволяет уменьшить количество запросов с 1-ого в секунду до 1 скажем в пол минуты или итого меньше. Зависит от web сервера, keep alive-ов всяких и т.д. Так же делей доставки невилируется так как мы ждем до момента получения данных.

    Самым же продуктивным способом является установление постоянного соединения с сервером и двусторонних обмен данным. это позволяют сделать websockets. Одно но, если браузер пользователя не поддерживает websockets нужно делать фэлбэк в long pooling. Так же пользователь может сидеть за HTTP проксями (например, как добрая половина пользователей вконтактика, с работы) которые не понимают ничего кроме старого доброго HTTP 1.1 и режут все websocket соединения.

    Для php есть ratchet.
    Ответ написан
    6 комментариев
  • PHP Как автоматически подгружать классы из разных директорий?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    В дополнение @Roquie, используйте PSR-4. И в неймспейсах вида classes\core\router смысла не больше чем в очередном велосипедном фреймворке. Лучше оформить как VendorName\Routing\Router хотя бы по смыслу будет понятно что где и зачем. А если вы еще и как composer пакет оформите свою поделку, будет еще лучше. МОжно будет управлять автозагрузкой при помощи composer.json и красиво и удобно использовать пакет в проектах.
    Ответ написан
    5 комментариев
  • Как правильно реализовать ООП класс базы данных с PDO?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Вам нужен класс Connection, в котором есть методы connect и exec (для запросов). И не делайте подключения прямо в конструкторе, лучше в exec сделать проверку и подключать при необходимости (ленивое подключение). Зачем нужно оборачивать соединение? Что бы можно было мокать в тестах.

    Так же вам нужен класс Query умеющий строить запросы и который будет принимать метод exec класса Connection. Так же можно его мокать в тестах.

    Так же можно замутить QueryBuilder что бы совсем круто было.... Вот его мокать в тестах не стоит, ибо надоест быстро.

    Проектируйте интерфейсы классов сначала. Клиенский код (тот который будет использовать вашу библиотеку) не должен знать о реализации интерфейса ничего. Он так же ничего не должен знать о PDO. Так же было бы неплохо перед тем как выполнять запросы брать мета данные таблиц, с которыми вам нужно работать (их можно кешировать) и делать prepared statements внутри Query.

    Ну и да, можете ориентироваться на популярные реализации DBAL. Например doctrine/dbal
    Ответ написан
    5 комментариев
  • Как правильно настроить отправку почтовых сообщений с сервера?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    если на сервере не настроен postfix ничего и не придет. Либо придет в спам как письмо отправленное с ненадежного сервера. Хотите надежности, ищите SMTP провайдера.

    И да, используйте готовые решения, аля swiftmailer. Всегда используйте для почты что-то готовое. Будет меньше проблем.
    Ответ написан
    Комментировать
  • Фильтрация входных данных, хочу уточнить, как лучше?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Нужно фильтровать перед использованием. И фильтровать нужно всегда. Вопрос только как используются данные.

    Для БД - prepared statements решают проблему фильтрации целиком и полностью
    Для eval/exec нужно уже придумывать как фильтровать, проще вообще не использовать переменные полученные от пользователя для eval/exec.
    Для фильтрации от XSS нужно чистить при выводе переменной.
    Ответ написан
  • Как реализовать упоминание пользователя как в twitter или vk?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    вы про автокомплит? Тут да, по вводу символа выводится подсказка. На сервере парсим, генерим ссылку на пользователя и если пользователь такой существует можем ему написать что его упомянули.

    stackoverflow.com/questions/6157992/twitter-style-...
    hawkee.com/snippet/9391
    Ответ написан
    Комментировать
  • Свой PUSH сервер для Android без node.js, есть ли решения?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    bash + curl, и проблем нету.

    https://packagist.org/packages/endroid/gcm - я это использую на некоторых проектах. На java есть официальный клиент.
    Ответ написан
  • Как сделать скриншот на PHP?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    exec (или очередь задач) + phantom.js
    Ответ написан
    Комментировать
  • Что представляет собой тестирование ?

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

    Модульные, они же юнит тесты, предназначены для тестирования отдельных модулей/классов. Суть их в том, что мы тестируем поведение только одного класса за раз. Если класс ссылается на инстансы других классов - мы их мокаем. То есть подсовываем им фэйковый класс, который имеет тот же интерфейс, но внутри не реализациа методов, а проверка, вызывали ли метод, с каким аргументами, сколько раз вызывали и т.д. Так же методы мока могут возвращать стабы (заглушки), какие-то захардкоженные под какой-то кейс данные. То есть если мы пишем класс по работе с базой данных, сокет-сервер и т.д., нам стоит соединение с базой, сокеты и т.д. оборачивать в классы, что бы можно было потом подменить на моки это добро. Если у вас в юнит тестах идет реальная работа с файловой системой или что-либо в этом духе, то это уже попахивает интеграционными тестами. Подробнее можно почитать в документации к phpunit. Так же есть такая методология разработки как TDD, советую почитать "Экстримальное программирование" Кента Бэка в этом ключе.

    Сразу хочу отметить что юнит тесты это хорошо, но вот только рядовой разработчик на PHP редко пишет что-то, что стоит покрывать юнит тестами. Времени на их поддержку нужно не мало, а требования у заказчиков частенько меняются. В итоге тесты начинают комментить и толку от них становится ноль. А вот если вы пишите компонент/библиотеку, то тут юнит тесты обязательны (ну... не то что бы, но желательны). Так что я бы на вашем месте сконцентрировал внимание на первом этапе на интеграционных и приемочных тестах.

    Интеграционное тестирование - тестирование нескольких модулей в связке. То есть мы тестируем наш компонент или его самодостаточный кусок в реальных условиях. Если этот компонент для работы с файлами - разрешаем ему доступ к файлам. Если база данных - то даем реальное соединение с базой. А можем что-то и замокать. Это как говорится, зависит от задачи. Скажем обращение к сторонним апишкам стоит мокать и стабить. Главная цель этих тестов, удостовериться что модули вместе работают хорошо. Особенно важно это когда модули пишут разные люди.

    Функциональное тестирование - это тестирования всего приложения в сборе. Если это REST API, то у нас через curl дергаются реальные методы, отправляются более менее реальные запросы и валидируются ответы. Если web-страничка, то это UI тесты с силениумом/phantom.js/zombi.js или, если нам не нужно еще и js тестить, просто curl + какой виртуальный браузер на том же php. Вообще по хорошему функциональные тесты не допускают никаких моков и т.д. но опять же если очень хочется то можно (опять же обращение к сторонним сервисам, контроля за которыми у нас нету).

    Но реалии таковы, что UI тестами покрывать проект не слишком удобно. Вопервых UI может меняться, а поддерживать их так же нужно. Во вторых это скучно. В третьих тесты могут просто падать... вот взяли и упали. И потом начинается, так, тесты опять упали... что там упало? А, не страшно, можно релизить. Так же на больших проектах UI тесты отрабатывают долго, очень долго, некоторых их просто ночью гоняют. Толку от тестов при таком подходе не слишком много, ибо разработчику стоит знать о том что что-то сломалось как можно быстрее. А так он приходит, видит что тесты опять красные, чинит эти красные тесты, и запускает... ждет... проходит пол часа к примеру, и где-то в другом месте отвалилось... Короче сами понимаете.

    Приемочное тестирование - по сути те же функциональные тесты, но подаются в контексте фича-спеков. Если вы работали когда-нибудь с QA отделом, то возможно слышали про такие штуки как acceptance criteria. То есть это тот чек лист, который должен проверить тестировщик что бы удостовериться что все хорошо. На основе этого чек листа можно написать функциональные тесты. Так же есть инструменты вроде Cucumber/Behat, которые позволяют писать спецификации в виде стэпов. В этом случае спецификации для этих инструментов могут писать QA а вы просто имплементите для них степы. То есть уменьшается прослойка между "acceptance criteria" и готовыми к выполнению тестов. Более того, стэпы можно реюзать, комбинировать, масса стэпов есть готовых, вам же необходимо только предоставить стэпы подготвалливающие систему (загрузка/генерация фикстур и т.д.). Короче лепота и удобно. Но медленнее интеграционных, зато не такие жесткие как функциональные, за счет этого их проще поддерживать. QA пишут спеку, реализуем тесты под эту спеку, пишем код под тесты, тесты зеленые - функционал готов.

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

    Ну и опять же, есть такая вещь как здравый смысл. Некоторые вещи скажем можно вообще забить и не покрывать тестами, некоторые стоит покрыть. Некоторые не полностью, некоторые с как можно большим покрытием.... Скажем тестить UI (именно как выглядит, где какой элемент) вообще бессмысленно. На это нужно куча ресурсов. Хотя может и есть проекты где это оправдано.

    Короче почитайте про TDD и ATDD (можно и BDD затронуть, но тут не только от программиста зависит, менеджеры, заказчик или продукт-оунер тоже должны быть вовлечены, по сути этот подход хорошо работает в рамках продукта какого-то, на фрилансе и в аутсорсе редко можно встретить) , Continious Integration и Continious Delivery.
    Ответ написан
    Комментировать
  • Как исправить ошибку с array?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Как улучшить код for? - вы начали аккаунты уже к вопросам создавать?
    Ответ написан
    2 комментария