• Как читабильнее или правильнее писать тернарную операцию в return, если в двух случаях будут возвращены массивы?

    27cm
    @27cm
    TODO: Написать статус
    Как по мне, так самый читабельный и правильный вариант:
    if (!empty($errors)) {
        return [	
            'data'    => $errors,
            'status'  => 'error',
            'message' => $message,
        ];
    }
    return [
        'data'    => $data,
        'status'  => 'success',
        'message' => 'Done',
    ];


    Или вот так:
    $status = 'success';
    $message = 'Done';
    
    // ...
    
    if (!empty($errors)) {
        $data = $errors;
        $status = 'error';
    }
    
    return [
        'data'    => $data,
        'status'  => $status,
        'message' => $message,
    ];


    Но ни один из ваших вариантов с ?: оператором в данном случае я бы не назвал читабильным.
    Ответ написан
    Комментировать
  • Как создать проект на Symfony2 с конфигами на PHP, а не на YAML?

    @unity_ultra_hardcore
    В бандле у вас есть файл DependencyInjection/AcmeAppExtension.php.
    Если его содержимое привести примерно к такому виду, то должно получиться (правда сам я не пробовал этим заниматься).
    <?php
    
    namespace Acme\AppBundle\DependencyInjection;
    
    use Symfony\Component\DependencyInjection\ContainerBuilder;
    use Symfony\Component\Config\FileLocator;
    use Symfony\Component\HttpKernel\DependencyInjection\Extension;
    use Symfony\Component\DependencyInjection\Loader;
    
    /**
     * This is the class that loads and manages your bundle configuration.
     *
     * To learn more see {@link http://symfony.com/doc/current/cookbook/bundles/extension.html}
     * @codeCoverageIgnore
     */
    
    class AcmeAppExtension extends Extension
    {
        /**
         * {@inheritdoc}
         */
        public function load(array $configs, ContainerBuilder $container)
        {
            $configuration = new Configuration();
            $this->processConfiguration($configuration, $configs);
    
            $loader = new Loader\PhpFileLoader($container, new FileLocator(__DIR__ . '/../config/'));
            $loader->load('services.php');
    
            if ($container->getParameter('kernel.environment') == 'dev') {
                $loader->load('services_dev.php');
            }
    
            if ($container->getParameter('kernel.environment') == 'test') {
                $loader->load('services_test.php');
            }
        }
    }

    P.S. я лично тоже считаю, что это большая глупость - отказываться от yml в пользу php-конфигов: это нарушает основной принцип конфигурации - ее детерминированность. В php-конфиге можно наворотить какой-то логики при вычислении того или иного параметра, что отрицательно скажется на удобстве поддержки проекта.
    Ответ написан
    Комментировать
  • Стоит ли работать программистом?

    copist
    @copist
    Empower people to give
    Я тут всем пролайкал ответы. Отвечу и сам.

    Денежный вопрос стоял остро, первые несколько лет, пока я сортировки пузырьками писал сам и фантазировал на тему своего мегакрутого фреймворка, который на поверку был 10% от Yii или Zend Framework.

    Затем мега скачок. И в стартапах поработал, и в интерпрайзе, и на фрилансе. Почему-то всё стало легко. И дедлайны легко переживаю. Постепенно выбрал себе специализацию: веб-архитектор и backend-разработчик.

    Самообразование идёт без проблем. За технологиями, в общем-то слежу, но не рвусь знать вообще всё. Тут прочитал книгу, тут статью, там попробовал покодить, здесь знаю у кого спросить. Хорошие умные ребята встречались, многому научили, всегда помогут. В общем, я в тренде и я не один, если что - не закопаюсь.

    Знаю 15+ языков программирования, в разной степени.

    Что я всегда за собой замечал - всё в IT всегда было в удовольствие. И сервера ставил, и интернет-магазины делал с интересом, и веб-порталы кодил.

    Ответом на часть твоих вопросов будет следующее:
    * Чтобы нравилась работа, делай то что нравится тебе
    * Чтобы стОило, делай то, что нужно другим
    * Когда первое и второе совпадут, ты будешь финансово обеспечен и морально удовлетворён

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

    Daemon23RUS
    @Daemon23RUS
    В моем случае наиболее подошел вариант с CRON. Я добавил прверку каждые 5 минут
    php /var/............/getmails2.php > /dev/null 2> /dev/null
    а в скрипте проверяю почту и выполняю действия. Начало:
    $ml = imap_open ("{imap.mail.ru:993/imap/ssl}", "***@mail.ru", "pass******");

    У меня не критичная ко времени процедура, 5 минут мне вполне хватало.
    P.S я забираю почту со стороннего сервера.
    Ответ написан
    Комментировать
  • Может ли прерываться работа PHP скрипта при закрытии браузера?

    @dmitryKovalskiy
    программист средней руки
    Нет
    Ответ написан
    Комментировать
  • Файлы для определенных пользователей?

    27cm
    @27cm
    TODO: Написать статус
    Хочется - делай. Вопрос в чем?

    В поисковике искать "php file upload", "php file download", "php file remove"...
    Ответ написан
    2 комментария
  • Как контролировать работу удаленного программиста?

    MpaK999
    @MpaK999
    Буду!
    Возьмите стороннего разработчика уровнем выше, на почасовку, чтобы он просто раз в день-два на час-полтора делал код ревью. Думаю через неделю вердикт у вас будет.
    Ответ написан
    Комментировать
  • Как контролировать работу удаленного программиста?

    @mikhailovtimur
    Все, что описано ниже потребует от Вас больше времени на контроль, общение и т.п.
    1. Разбивайте задачи, что бы длительность была не более 4-х часов
    2. Просите предварительную оценку каждой задачи в часах, и если будет сильно из нее вылезать в процессе просите что бы объяснял почему. Не платите если вылез за оценку без предупреждения
    3. Подключите еще одного разработчика или нескольких, создайте конкуренцию, что бы они видели друг друга, пускай они оба оценивают одну и ту же задачу, а вы решайте кто будет делать
    4. Давайте отрицательную обратную связь. Не выдержал сроки - получает первый раз предупреждение, потом штраф

    p.s. А так же учтите советы Евгений и Максим Тимофеев
    Ответ написан
    Комментировать
  • Как получить доступ к свойству объекта PHP?

    Melkij
    @Melkij
    PostgreSQL DBA
    var_dump физически (ext/standard/var.c, функция php_var_dump) не может отработать и ничего не вывести.
    Если у вас действительно нет никакого stdout, значит падаете в другом месте. Запустите в CLI, там поменьше логов смотреть надо. Проверьте код возврата скрипта.
    Ответ написан
    Комментировать
  • Как не заплыть жиром, работая удаленно программистом?

    Сидячая работа хорошо для кача, суеты большой нет ) сидишь работаешь, кушаешь, ходишь качаешься )
    Ответ написан
    Комментировать
  • Критично ли отсутствие ИП/ООО у web-разработчика для поиска клиентов?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    Если заказчики юр.лица - 99% комфортней заказывать у юр.лица.
    В целом наличие юр.лица придает некую серьезность в глазах людей далеких от IT.
    UPD
    С чего такие заблуждения? Самая главная причина, это списание средств со счёта юр лица. В налоговую нужно принести бумажное подтверждение траты этих денег. И просто вася с улицы, это геморрой списывания на левые траты этих денег. А ИП или ООО даст нормальные акты, договор. Всё с печатями. Налоговая довольна, заказчик не ломает голову, как снять со счёта юрика денег, для оплаты работы васи.
    А вот Петя умный. Петя готовит типовой договор подряда на свои услуги. Договор подряда между физ лицом и ИП, физ лицом и ООО. И сразу говорит об этом заказчику. Тогда заказчик не ломает голову, как оплатить работу. Ибо договоры подряда "не привычны" многим заказчикам. Они привыкли работать с юрлицами и тупо забыли/не знают о договорах подряда.

    А еще "умный" Петя стоит примерно на 30% дороже чем его конкуренты с юр.лицом. Потому что 13% НДФЛ, 22% ПФ, 2.9% ФСС и 5.1% ФОМС явно проигрывают схеме с ООО (6+9 легально или 6+7 не совсем легально), не говоря уже про ИП. (крайне актуально как для компаний с ограниченным бюджетом (берегут каждую копейку), так и для дорогих проектов (сумма отличий в абсолютных значениях будет велика))

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

    Можно попробовать абстрагироваться на уровне ORM, если таковой есть - т.е. объекты одних классов извлекаются через одно подключение к БД, другие - через другое. Если SQL-запросы пишете сами, то и думать нечего - структириуете код, как считаете естественным, и где-то в каком-то классе или контроллере (например, Logger) храните в поле необходимое подключение к БД. В другом модуле/классе - другое.
    Ответ написан
    Комментировать
  • Как устранить тормоза виртуальной машины под OS X 10.10?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Не хочу разводить холивары, купите параллели, все работает как надо и винды и линуксы. С VirtualBox в плане производительности не подружился ни в линуксе (KVM пользую везде.), ни в винде (только в виртуалке её и вижу теперь), ни в OS X (пользую параллели).
    Ответ написан
    7 комментариев
  • Совет по PHP(freelance)?

    butteff
    @butteff
    Раз в тысячу лет заправляю свитер в носки
    Зайдите на hh.ru и поищите требования на зарплаты выше 100к для вакансии "Разработчик php" или иной, интересующей Вас с максимальной оплатой. И начинайте эти технологии, фреймворки, системы контроля версий, базы данных учить. Читайте книги, статьи по теме и смотрите видеокурсы. Чтобы закрепить материал попытайтесь делать что-то свое.
    Затем идите и получайте опыт в реальных проектах на реальных рабочих местах. Какие-то наработки и портфолио, код, у Вас уже будет, поэтому устроиться куда-то особых проблем вызвать не должно. По-другому никак. В процессе обучения хорошо бы и проект делать покруче и наставника иметь.

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

    @Justlexa
    Сохранять в XML, понятный Excel'ю. Сделайте всё необходимое форматирование на пробном листе Excel, сохраните им же в XML (см. перечень доступных форматов) и сохраняйте данные по такому же шаблону (принципиально важными для корректного отображения такого самодельного XML в Excel'е являются несколько заголовков и немного стилей). Если немного усовершенствовать такой вид, то там уже и до нативного для Office 2007+ формата XLSX недалеко.
    Пользуюсь таким подходом в корпоративной генерилке отчётов, претензий по совместимости не наблюдалось. На первых порах тоже использовал PHPExcel, но отказался от него уже при формировании XLS на 300-400 строк из-за резкого падения производительности.
    PS: разумеется, кириллицу всю преобразовывать в UTF-8.

    PPS: небольшой пример
    <?php
    # ....
    print("<?xml version=\"1.0\"?><?mso-application progid=\"Excel.Sheet\"?>");
    ?>
    <Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
     xmlns:o="urn:schemas-microsoft-com:office:office"
     xmlns:x="urn:schemas-microsoft-com:office:excel"
     xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
     xmlns:html="http://www.w3.org/TR/REC-html40">
     <OfficeDocumentSettings xmlns="urn:schemas-microsoft-com:office:office">
      <Colors>
       <Color>
        <Index>2</Index>
        <RGB>#E8FDE8</RGB>
       </Color>
       <Color>
        <Index>3</Index>
        <RGB>#FDFDE8</RGB>
       </Color>
       <Color>
        <Index>4</Index>
        <RGB>#FDE8E8</RGB>
       </Color>
      </Colors>
     </OfficeDocumentSettings>
     <Styles>
      <Style ss:ID="s16">
       <Alignment ss:Horizontal="Center" ss:Vertical="Center"/>
       <Font ss:Size="12" ss:Color="#000000" ss:Bold="1"/>
       <Interior/>
       <Protection/>
      </Style>
      <Style ss:ID="s17">
       <Alignment ss:Vertical="Center"/>
       <Borders>
        <Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1" ss:Color="#000000"/>
        <Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1" ss:Color="#000000"/>
        <Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1" ss:Color="#000000"/>
        <Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1" ss:Color="#000000"/>
       </Borders>
       <Font ss:Color="#000000"/>
       <Interior ss:Color="#E8FDE8" ss:Pattern="Solid"/>
       <Protection/>
      </Style>
      <Style ss:ID="s18">
       <Alignment ss:Vertical="Center"/>
       <Borders>
        <Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1" ss:Color="#000000"/>
        <Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1" ss:Color="#000000"/>
        <Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1" ss:Color="#000000"/>
        <Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1" ss:Color="#000000"/>
       </Borders>
       <Font ss:Color="#000000"/>
       <Interior ss:Color="#FFFFFF" ss:Pattern="Solid"/>
       <Protection/>
      </Style>
      <Style ss:ID="s19">
       <Alignment ss:Vertical="Center"/>
       <Borders>
        <Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1" ss:Color="#000000"/>
        <Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1" ss:Color="#000000"/>
        <Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1" ss:Color="#000000"/>
        <Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1" ss:Color="#000000"/>
       </Borders>
       <Font ss:Color="#000000"/>
       <Interior ss:Color="#FDFDE8" ss:Pattern="Solid"/>
       <Protection/>
      </Style>
      <Style ss:ID="s20">
       <Alignment ss:Vertical="Center"/>
       <Borders>
        <Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1" ss:Color="#000000"/>
        <Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1" ss:Color="#000000"/>
        <Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1" ss:Color="#000000"/>
        <Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1" ss:Color="#000000"/>
       </Borders>
       <Font ss:Color="#000000"/>
       <Interior ss:Color="#FDE8E8" ss:Pattern="Solid"/>
       <Protection/>
      </Style>
     </Styles>
     <Worksheet ss:Name="Пример">
      <Table>
       <Column ss:Width="210"/>
       <Column ss:Width="64"/>
       <Column ss:Width="80"/>
       <Column ss:Width="210"/>
       <Column ss:Width="270"/>
       <Row ss:Height="15.75">
        <Cell ss:StyleID="s16"><Data ss:Type="String">Столбец 1</Data></Cell>
        <Cell ss:StyleID="s16"><Data ss:Type="String">Столбец 2</Data></Cell>
        <Cell ss:StyleID="s16"><Data ss:Type="String">Столбец 3</Data></Cell>
        <Cell ss:StyleID="s16"><Data ss:Type="String">Столбец 4</Data></Cell>
        <Cell ss:StyleID="s16"><Data ss:Type="String">Столбец 5</Data></Cell>
       </Row>
    <?
      while ($row = mysqli_fetch_assoc($res)) {
    ?>
       <Row ss:Height="15.75">
        <Cell ss:StyleID="s18"><Data ss:Type="String"><?=$row['str1']?></Data></Cell>
        <Cell ss:StyleID="s18"><Data ss:Type="String"><?=$row['str2']?></Data></Cell>
        <Cell ss:StyleID="s18"><Data ss:Type="String"><?=$row['str3']?></Data></Cell>
        <Cell ss:StyleID="s18"><Data ss:Type="String"><?=$row['str4']?></Data></Cell>
        <Cell ss:StyleID="s18"><Data ss:Type="String"><?=$row['str5']?></Data></Cell>
       </Row>
    <?
      }
    ?>
      </Table>
     </Worksheet>
    </Workbook>
    <?
    Ответ написан
    2 комментария
  • Как выбрать строки из БД, которые в одной ячейке содержат определенный параметр?

    Karponter
    @Karponter
    JSON хранить в базе в Вашем конкретном случае (хранение заказа со списком товаров и прочим) не есть хорошо. Попробуйте перестроить базу. Хранить в таблице сам заказ и его общую стоимость к примеру, и подвязывать его идентификатор к связующей таблице а-ля GOODS-ORDER много ко многому.
    Ответ написан
    3 комментария
  • Как выбрать строки из БД, которые в одной ячейке содержат определенный параметр?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Никак.
    В базе данных нельзя хранить сериализованные данные.
    Ты должен перед записью декодировать их, и записать все значения в соответствующие им ячейки.
    И потом выбирать нужные строки обычным способом.
    Ответ написан
  • Авторизация в PHP + MVC, где осуществлять проверку?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Читаем про HTTP Middelware, request-response фреймворки, не зацикливаемся на MVC. В итоге влоу выходит таким:

    Предположим что у нас есть интерфейс Kernel содержащий метод handle, который на вход принимает Request и на выход выдает Response. Далее...

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

    Профит - все можно покрыть тестами, все удобно скейлится, есть кучи готовых реализаций. В конце концов есть PSR-7.

    В любом случае аутентификацию надо делать во фронт-контроллере, а авторизацию - уже могут быть варианты.
    Ответ написан
    6 комментариев
  • Какую систему управления версиями посоветуете для веб-разработки (PHP, js, html/css)?

    k12th
    @k12th
    console.log(`You're pulling my leg, right?`);
    Как было принято отвечать в свое время на вопрос о дистре линукса — «то же самое, что у ближайшего гуру». Ближайший гуру у вас — интернет.
    Ставить централизованную в 2015 году? В чем смысл осваивать SVN, если на следующей работе 90% придется осваивать git?
    git, конечно, сделан Хищниками для Чужих, но руководств полно.
    Ответ написан
    2 комментария