Ответы пользователя по тегу PHP
  • Как в composer отменить измененные файлы? (composer revert modified files )?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Маленькая поправка - не update а install. Последнее установит именно те версии, которые у вас стояли (пл composer.lock).

    Если у вас composer ставил зависимости с prefer-dist (тобишь скачивал архив), то да. Только удалить директорию и выполнить composer install.

    Если у вас composer клонил пакет и делал чекаут, можно вручную сделать чекаут директории нужной, либо composer сам предложит это сделать.
    Ответ написан
  • Стоит ли сегодня переплачивать за сайт на ruby? Или сэкономить на php?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Мне не понятно почему в два раза дороже. Ладно бы там на 30% дороже, но в два? Сроки разработки этого проекта на Ruby даже чуть меньше, чем на PHP или приблизительно равны. Покрытие кода тестами и прочее сильно много разницы в сроках так же не дает.

    Вывод, либо вы нашли разработчика на Ruby с завышеным рейтом, либо разработчика на PHP с рейтом в два раза ниже. Если второе, то стоит задаться вопросом, а хватит ли у него квалифакации? Может быть во время оценки он не учел покрытие кода интеграционными/функциональными тестами, может еще чего.

    По хорошему стоимость не должна так уж сильно различаться. Рейт сильного Symfony девелопера не ниже рейта хорошего RoR девелопера. Сроки по вашему скудному описанию скорее меньше будут у RoR. Вывод, RoR должен обойтись дешевле. По возможностям Symfony больше подходит для долговременных проектов, он быстрее Ruby (на hhvm так прилично быстрее), но под RoR больше качественных готовых решений, что так же должно сократить сроки разработки.

    Словом... мутно как-то. Опишите как вы получили "в 2 раза дешевле".
    Ответ написан
  • Как послать заголовок несколько раз?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Никак. Один заголовок указывающий кодировку на страницу. Решение - приводить куски страниц в разной кодировке к одной.
    Ответ написан
    Комментировать
  • Как хранить настройки сайта, чтобы они были доступны везде?

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

    Вот вам простенький примерчик, но лучше взять чего готовое. А лучше вообще взять Silex или чего такого.
    class Container
    {
        private $definitions;
        private $settings;
        private $instances;
    
        public function __construct(array $settings = array())
        {
              $this->instances = [];
              $this->definitions = [];
              $this->settings = $settings;
        }
    
        public function get($name) {
            if (!isset($this->instances[$name])){
                 if (!isset($this->definitions[$name])) {
                       throw new \InvalidArgumentException(sprintf('service "%s" not defined', $name));
                 }
                 $this->instance[$name] = $this->definitions[$name]($this);
            }
    
            return $this->instance[$name]; 
        }
    
        public function getParam($name) {
              return array_key_exists($this->settings, $name) ? 
                    $this->settings[$name] : null;
        }
    
        public function setParam($name, $value) {
             $this->settings[$name] = $value;
        }
    
        public function setDefinition($name, $definition) {
             if (!is_callable($definition)) {
                 throw new \InvalidArgumentException('Service definition should be callable');
             }
    
             $this->definitions[$name] = $definition;
        }
    }


    Использование:
    // params.php
    return [
        'db.hostname' => 'localhost',
        'db.username' => 'user',
        'db.password' => 'pass'
    ];
    
    // services.php
    $container = new Container(require __DIR__ . '/params.php');
    $container->setDefinition('db', function (Container $c) {
        return new DB($c->getParam('db.hostname'), $c->getParam('db.username'), $c->getParam('db.password'));
    });
    
    return $container;
    
    //app.php
    $container = require __DIR__ . '/container.php';
    
    $db = $container->get('db');
    $db->query('...');
    Ответ написан
    Комментировать
  • Правильная обработка ajax методов?

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

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

    tumblr_loqfm0r1UJ1qludboo1_500.gif

    По делу если, то конструктор должен вызваться один раз, если это действительно весь код который учавствует во всей этой вакханалии. Самым простым вариантом будет поставить xdebug, поставить бряку в конструкторе и посмотреть call trace в случае если действительно вызывается дважды. Более изысканные способы подразумевают различные комбинации var_dump и die в разных частях кода.
    Ответ написан
    4 комментария
  • Как присвоить класс странице, в зависимости от URL?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    if( preg_match('/^\/catalog/i', $_SERVER['REQUEST_URI'])) { ... }
    Ответ написан
    Комментировать
  • Есть ли браузер на PHP?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    breach.cc это именно браузер, оболочка. Насколько я понял там на JS чисто UI и модули, webview берется из хромиума.

    На PHP уж точно нету. Если рендереры HTML/CSS на Canvas, есть примитивные интерпритаторы JS н JS... но полноценного браузера нету. Да и это слишком сложно и уж точно никому не нужно.

    Если вам интересно узнать как оно работает, проще почитать. Простенький браузер на JS написать можно, но без JS, с примитивной поддержкой CSS и т.д. Можно думаю и полноценный но займет слишком много времени и опять же никому не нужно.
    Ответ написан
    6 комментариев
  • Как определенному сайту назначить свой php.ini на ubuntu server с apache2?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Все просто, заменить на nginx + php-fpm. Либо apache2-mpm-itk использовать.
    Ответ написан
  • Можно ли делать делать выборку секретных данных из бд по guid?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    эм... а причем тут куки? Обычно это дело либо в сессиях хранится либо пользователь в каждом запросе токен присылает (как публичный ключ).
    Ответ написан
  • Что будет правильно использовать PHP или jquery(AJAX)?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Используйте и то и то.
    Ответ написан
    Комментировать
  • Предотвратить SQL Injection без использования bindParam?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Это равносильно:

    $sql = $db->prepare('"SELECT * FROM users WHERE email = :email');
    $sql->bindParam(':email', $email, PDO::PARAM_STR);
    $sql->execute();
    $rows = $sql->fetchAll();


    То есть все параметры будут расцениваться как строки.
    Ответ написан
    Комментировать
  • Парсинг многоэтажного json?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Я все же сильно сомневаюсь в том что у вас стандартный JSON. Он у вас игнорируется, не парсится. Так что можно предположить вто чнутри json еще один json как строка и его надо парсить отдельно. Ибо если бы была ошибка по глубине json_decode выдал бы null и тогда можно было бы отлавливать это через json_get_error (или как-то так). В документации есть пример как хэндлить такие случаи.

    Так же попробуйте сторонние парсеры: https://github.com/Seldaek/jsonlint например. Оно должно нормально разобрать если у вас нормальный json.

    Если же у вас слоенка с JSON то нужно вручную рекурсивно обходить полученный массив/объект и пробовать делать json_decode. Если поддается, оставляем. НЕ поддается - оставляем старое значение.
    Ответ написан
    Комментировать
  • В чем лучше всего хранить время и дату в таблице MySQL?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    habrahabr.ru/post/61391
    только дату - в date, только время в time...

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

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Любой фреймворк с CRUD генерацией. Думаю вам будет идеальны штуки типа Yii2 хотя я бы рекомендовал вам все же потратить чуть больше времени и осилить хотя бы laravel. Авось меньше говнокода будет.
    Ответ написан
    Комментировать
  • Стоит ли заморачиваться с MVC и одной точкой входа?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Стоит. А еще лучше взять хотя бы микро-фреймворк типа silex и не писать велосипеды. А еще лучше сделать это как SPA на AngularJS с REST-api на сервере. Но это уже на ваш вкус.

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

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Компонент security, который может предоставить доступ к инстансу текущего пользователя. Что бы не создавать все руками используйте Dependency Injection. Например PHP-DI. То есть если какому-то компоненту понадобился доступ к пользователю текущему - просто указываем в зависимостях у оного компонент security у которого есть метод getUser. В итоге если этот наш компонент понадобился где-то еще, мы уже его записываем как зависимость. Все что связано с ресолвом зависимостей ложится на плечи нашего DI контейнера.

    Подробнее можно узнать почитав про "принцип инверсии зависимостей".
    Ответ написан
    1 комментарий
  • Стоит ли оставаться на работе?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Попишите на Symfony2+Doctrine. Из вашего описания будет достаточно паралелий. В частности "data-mapper, сервисы в yml" и т.д. Заодно подтяните уровень.

    А вообще оставайтесь. Будет неплохой опыт... наверное. И да, раз вас взяли джуниором, вас должны учить. Либо вы должны учиться сами. А точне вы должны учиться сами и вам в этом должны хоть как-то помогать.
    Ответ написан
    Комментировать
  • Оправдает ли себя HipHop PHP?

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

    Вообще проще прогнать вашу тулзу через HHVM и посмотреть что будет. Но прирост если и будет то не в 20 раз а в 2-5 раз максимум. Но опять же нужно проверять. Просто поставьте hhvm (есть пакеты под основные дистрибьютивы) и прогоните тест.

    Вообще у меня есть подозрения что и на php можно ускорить все в разы пересмотрев архитектуру приложения. В частности - паралелизация, работать в несколько потоков будет оно явно быстрее если нету зависимостей по данным между тестами. Ну и т.д.
    Ответ написан
  • Как настроить PHP через fastCGI/Nginx в ubuntu server 14.04 в virtualbox с пробросом доступа из Хост машины?

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

    php тут вообще не причем. Вам нужно только до nginx достучаться, все остальное уже в пределах виртуалки работает. Если вы захотите xdebug удаленно использовать опять же нету проблем если вы сеть настроили.
    Ответ написан