• Как убрать кучу аргументов у класса?

    SilenceOfWinter
    @SilenceOfWinter Куратор тега PHP
    та еще зажигалка...
    Ответ написан
    Комментировать
  • Как исправить 'str' object is not callable?

    @deliro
    Как же вы одолели, мамкины ботописцы, по 50 постов в день от вас. Откуда вы взялись такие бездари? И хоть бы один толковый вопрос про питон, архитектуру, что угодно. Нет, все ваши вопросы связаны с тем, что вы, бездари, не в силах взять свои малюсенькие ручонки в кулак, засунуть туда свою лень и прочитать три десятка страниц учебника по языку, на котором пишете.
    Ответ написан
    2 комментария
  • Как настроить 2 рабочих стола на двух мониторах под windows?

    @Sn0wSky
    Нажмите правой кнопкой по панели, зайдите в настройки, промотайте в самый низ, там будут настройки для нескольких мониторов. Не помню, как по-русски, но в первом select'e будет возможность показывать открытые окна только для текущего монитора
    vHWxSIZ.png
    Ответ написан
    4 комментария
  • Как выйти из рабочего коматоза?

    @AnneSmith
    самая ленивая
    легко
    научитесь получать максимум оплаты за свой минимальный труд, а не доказывать, что вы можете работать круглосуточно и бесплатно

    когда вы выровняете этот баланс, у вас не будет выгорания
    а когда вы повернете этот баланс в собственную сторону, вы станете свободным человеком

    все остальные советы про усталвозьмтотпуск можете отставить советчикам этого метода

    такое лечат только деньги
    Ответ написан
    2 комментария
  • Как написать код который будет генерировать случайный массив?

    mmmaaak
    @mmmaaak
    <?php
    
    function randomString($count = 5, $length = 15) {
        $chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
        $charsLen = strlen($chars);
        $res = [];
        for($i = 0; $i < $count; $i++) {
            $tmp = '';
            for ($j = 0; $j < $length; $j++) {
                $tmp .= $chars[rand(0, $charsLen - 1)];
            }
            $res[] = $tmp;
        }
        return $res;
    }
    
    var_dump(randomString());
    Ответ написан
    Комментировать
  • С чего начать изучение Laravel?

    laracast.com отличный ресурс
    Ответ написан
    Комментировать
  • Какую взять ORM для своего проекта?

    @D3lphi
    Возьмем ORM из двух популярных PHP-фреймворков. Первая будет Eloquent ("Родная" для фреймворка Laravel), а вторая - Doctrine (Одна из доступных ORM в фреймворке Symfony). Кардинальным отличием этих двух "систем" является то, что первая разработана на основе паттерна Active Record, а вторая - с использованием паттерна Data mapper. Чем же они отличаются? Приведу абстрактные примеры кода для первого и второго паттерна:

    Active Record:
    $user = new User(); // Создаем "сущность" нового пользователя.
    $user->login = 'D3lph1'; // Устанавливаем его логин равным 'D3lph1'.
    $user->password = '123456'; // Устанавливаем пароль этому пользователю.
    $user->save(); // Сохраняем пользователя.


    Все, новый пользователь создан и находится в базе данных. Теперь, Data mapper:
    $user = new User();
    $user->login = 'D3lph1'; // Устанавливаем его логин равным 'D3lph1'.
    $user->password = '123456'; // Устанавливаем пароль этому пользователю.
    
    $manager = ... // получаем объект менеджера (Например, из DI контейнера).
    $manager->persist($user); // "Скармливаем" новоиспеченного пользователя нашему менеджеру.
    // $manager->persis($user1); // Мы можем создать еще одного пользователя и уведомить менеджер об этом.
    // $manager->persis($user2); // И еще одного...
    $manager->flush(); // После выполнения этого метода данные отправятся в базу данных.


    Очевидно, первый способ куда проще. Но не все так просто. Дело в том, что паттерн Active Record нарушает принцип единственной ответственности (Single responsibility SOLID). И поэтому, в какой-то степени, может считаться антипаттерном. (Но это ни в коем случае не значит, что его не нужно использовать, для большинства проектов "хватит" за глаза). Наша сущность пользователя делает слишком много. Она не только представляет данные, но и еще работает с ними. В больших проектах это может усложнить поддержку кода. Data mapper, напротив же, разделяет представление данных в сущность (user) и работу с данными (manager, в данном примере. Также, за работу с данными отвечает репозиторий. Вы столкнетесь с ним, как только вам потребуется получить данные из БД (Doctrine)). В небольших проектах вы не заметите особой разницы. Разве что во втором случае увеличится количество классов. Так, в Eloquent вы создаете 1 модель, а в Doctrine - сущность и репозиторий.

    Все современные ORM включают в себя также, так называемые, query builder'ы. Они помогают отказаться от языка запросов, такого как SQL. Вы будете составлять запросы таким образом:
    $result = $qb
          ->select(['id', 'login'])
          ->where('id', '<>', 3)
          ->get();


    Собственно, query builder'ы помогают абстрагироваться от конкретной СУБД. То бишь, вы написали запрос 1 раз, а затем от того, какую СУБД вы используете будет зависеть выходной sql код. Генерация этого кода будет произведена абсолютно прозрачно для вас.

    Обе ORM имеют работать с отношениями. Вам нужно будет указать, как таблицы относятся друг к другу, а затем вы сможете удобно обращаться к связанным сущностям.

    Теперь конкретно. Так как вы только начинаете осваивать ORM, я бы порекомендовал начать с Eloquent. Она гораздо проще, чем Doctrine, да и более производительная, к тому же. Как освоите Eloquent, смело учитесь работать с Doctrine. Она обязательно должна быть "в копилке" ваших скиллов, так как является самой мощной в "мире" PHP.

    Успехов!
    Ответ написан
    2 комментария
  • Как построить простоую MVC структуру на php?

    skobkin
    @skobkin
    Гентушник, разработчик на PHP и Symfony.
    Посмотреть на MVC-микрофреймворки.
    Ответ написан
    Комментировать
  • Будет ли когда-либо исправлен баг оператора typeof(null) in js?

    webirus
    @webirus
    Тыжверстальщик! Наверстай мне упущенное...
    Крик души? При чем тут Тостер и ошибка языка?
    Ответ написан
    1 комментарий
  • Какое сходсто и различия?

    @EverOne
    R&D Management since 2011
    По кукам ты узнаёшь пользователя, это как пропуск на завод. Куки - полупостоянная субстанция, иногда теряются (Тут можно варьировать).
    Токен это скорее как запись в журнале, подтверждающая что именно вы входите на территорию именно через этот КПП и именно сейчас. Вы даете свой пропуск, а вам в ответ дают ваш номер, показывая жетончик номером в кабинете все знают что вам вход разрешен, но никто не знает кто вы именно. (Тут тоже можно варьировать, получать данные юзера по его токену). Токен - временная субстанция.
    Кеш - файлы вашего сайта на стороне пользователя или на кеширующем сервере, ускоряют загрузку сайта.
    А вам, скорее всего, нужен хэш. Это просто контрольная сумма. (Однозначно). Используется для генерации токенов или любой другой сущности. Как раз и есть тот самый номер на жетончике.
    Ответ написан
    2 комментария
  • Как обезопасить сайт работающий с API?

    sayber
    @sayber Куратор тега PHP
    Да, я программирую на PHP и еще асинхронно!
    JWT, ApiDoc и конечно https
    Забыть о сессиях и всякой остальной фигне.

    Конечно должны быть кастомные реквесты, жесткие модели и серьезная валидация данных.
    Ответ написан
    9 комментариев
  • Важно ли высшее образовании для web разработки?

    sim3x
    @sim3x
    Нет
    Ответ написан
    Комментировать
  • Открывать ИП или нет?

    vaux
    @vaux
    Курящий лыжник
    На статус ваше ИП никак не повлияет. По опыту могу сказать, что статус у ИП-фрилансера даже ниже, чем у официально трудоустроенного. Фактически такой ИП воспринимается как безработный. Хотите реальный статус - регистрируйте полноценное юр. лицо, открывайте компанию, арендуйте офис, нанимайте сотрудников и т.д.

    Налог у ИП на УСН - 6%. Копейки. В вашем случае он вообще может стать равным 0%, поскольку покроется с выплаты обязательных страховых взносов. Касаемо счета - есть банки, которые не берут плату за обслуживание. Тот же модульбанк.

    Помимо всего прочего вам придется вести какую-никакую бухгалтерию. Считать сумму налога, заполнять декларации, кататься в налоговую для сдачи отчетности. Но тут здорово помогают сервисы типа эльба или мое дело. С ними можно всё это делать в автоматическом режиме и удаленно. Но за деньги.

    Также работа в белую предполагает наличие договоров, актов, счетов. По большому счету это будет нужно только вашему банку, чтобы он понимал, за что идут деньги на ваш расчетный счет. И это заморочка не только для вас, но и для ваших клиентов. Я знаю компании, которые лучше будут работать с фрилансерами в черную, чем связываться с ИП на УСН. Так что смотрите, как бы не вышло так, что вы зря зарегистрируетесь.

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

    EvilsInterrupt
    @EvilsInterrupt
    System programming, Reversing Engineering, C++
    Ну если человек сидит с одного IP и его не банят, значит надо сделать так, как будто по сайту ходит "человек".

    Для этого предлагаю вспомнить общеизвестную задачу "банерокрутилку". Имеется N банеров. Их надо прокрутить каждый по 1 разу и за K секунд.

    В вашем случае в качестве банеров выступают URL-ы. K секунд делим на Т url-ов и получаем время на каждую ссылку. Но. Чтобы внести не детерменированность, то делаем это с разными промежутками времени перед между очередной итерацией парсинга.

    Посмотрите внимательно на вывод:
    site.ru/?page1
    site.ru/?page2
    ...
    site.ru/?pageN .

    Видите?

    В этом решение сразу проглядывается цикл и это может быть достаточным основанием для распознования парсинга.

    Как правило люди пишут "влоб" потому что головою думать не хотят!

    Надо сделать "прогулку" по сайту так: site.ru/?page15, site.ru/?page179, site.ru/?page1, ... Одну страничку за 5 сек посмотрели, а другую 1минуту и т.д. Понаблюдайте за собою, как вы ходите по сайтам? Вы разве за 1-2 сек успеваете прочесть статью? Уверяю вас вы хаотично бродите по сайту. То в личные сообщения, то в избранные, то в поиск заглянете, то из выдачи поиска по какой-то статье. Вот и в парсинг вносите хаотичность

    Конечный вывод в том, что вам нужно выбирать между:
    • Если хотите быстрый парсинг, значит больше прокси
    • Если хотите с одного IP, то придется пожертвовать временем работы
    Ответ написан
    2 комментария