Задать вопрос
  • Как парсить без бана?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Парсеры палятся на том, что ведут себя как роботы. Люди не обходят все доступные ссылки, только некоторое подмножество без ухода на большую глубину. Чтобы не попасться, надо изобразить группу людей шарящихся по сайту. Для этого надо после разбора страницы входа парсить только две-три ссылки с неё, делать случайные паузы между запросами, потом сбрасывать принятые куки, менять user agent и прокси и парсить другие две-три ссылки. Естественно, прокси не должны быть публичными. Если вы могли найти и скачать их список, то разработчики защиты тоже уже его скачали.
    Ответ написан
    Комментировать
  • SQL как найти записи с одинаковыми значениями разных столбцов?

    SELECT * FROM table WHERE keyword = title - это как-то слишком очевидно.
    Может вам надо найти разные записи, у которых keyword и title совпадают?
    SELECT * FROM table t1, table t2 WHERE t1.keyword = t2.title, что-нибудь вроде этого.
    Ответ написан
    Комментировать
  • Почему возникает ошибка при запуске Битрикс в docker?

    smilingcheater
    @smilingcheater
    Вы указали в конфигах подключения в MYSQL хост Localhost, но база у вас в отдельном контейнере, db.
    Указывайте его в качестве хоста для подключения
    Ответ написан
    2 комментария
  • Slim 3 не принимает GET параметры?

    Понимаю, что вопрос задан уже давно, но может кому пригодится. Что бы получить массив $_GET, то это примерно так:

    //для адреса http://site.ru/send/sms?phone=+7000000000
    $app->get('/send/sms', function(Slim\Http\Request $request, Slim\Http\Response $response, $args){
            //$request->getQueryParams() - весь массив $_GET
    	echo $request->getQueryParam('phone');
    
    });
    Ответ написан
    Комментировать
  • Позднее статическое связывание php: как это работает?

    MegaMufa
    @MegaMufa
    Смотрите. Есть такая простая иерархия классов:
    class A
    {
        public static $text = 'class A';
    
        public function selfTest()
        {
            echo self::$text;
        }
    
        public function staticTest()
        {
            echo static::$text;
        }
    }
    
    class B extends A
    {
        public static $text = 'class B';
    }


    Мы создаем экземпляк субкласа и вызываем методы, определенные в предке.
    $obj = new B();
    $obj->selfTest(); // выведет "class A"
    $obj->staticTest(); // выведет "class B"

    self всегда указывает на тот класс, в котором он написал. Здесь метод описан в классе A, и self указывает на класс A, хоть и вызывается из класса B.
    Значение static вычисляется при вызове. И static указывает на класс объекта в котором произошел вызов. В нашем случае он указывает на B, хотя сам код описан в классе A.

    Зачем это надо? Для того, что бы можно было переопределять статичные члены вашего класса в наследниках и вы могли обращаться к новым значениям из методов, описанных в предке.

    С обычными не статичными членами это и так работает, потому что они собираются, когда вы создаете объект класса. Что бы это работало для статичных методов, надо использовать static
    Ответ написан
    1 комментарий
  • Битрикс логирование действий пользователей?

    marina_k
    @marina_k
    Веб-разработка
    Еще в настройках каждого инфоблока можно во вкладке "Журнал событий" проставить галочки
    1. Записывать добавление раздела
    2. Записывать изменение раздела
    3. Записывать удаление раздела
    4. Записывать добавление элемента
    5. Записывать изменение элемента
    6. Записывать удаление элемента
    Ответ написан
    Комментировать
  • Когда в PHP использовать интерфейсы, а когда абстрактные классы?

    try4tune
    @try4tune
    С точки зрения архитектуры:

    Интерфейс описывает свойства. Обратите внимание на классические названия интерфейсов: Throwable, Countable, Comparable, Iterable и т.д. Возьмем, к примеру, интерфейс Rollable (катящийся), и Foldable (складывающийся).

    Абстрактный класс же описывает сущность. Например, стол: Table_Abstract. Стол может быть деревянным, тогда будет Table_Wood extends Table_Abstract. Также стол может быть хирургическим: Table_Surgical extends Table_Abstract. В таком случае Table_Abstract объединяет общий свойства всех столов (скажем, площадь поверхности, наличие ножек и т.п.). А конкретный класс описывает сущность определенного типа столов.

    Связью же интерфейсов и классов Вы описываете свойства. Например, стол можно катить: Table_Abstract implements Rollable. Деревянный стол, например, можно сложить: Table_Wood implements Foldable.
    Ответ написан
    5 комментариев
  • Какой параметр php.ini влияет на такую ошибку?

    Melkij
    @Melkij
    PostgreSQL DBA
    Не настройка. Версия PHP.
    empty, являясь языковой конструкцией, а не функцией, до PHP5.5.0 могла проверять только переменные.
    ru2.php.net/empty
    Ответ написан
    Комментировать
  • Есть ли от крона нагрузка?

    FFxSquall
    @FFxSquall
    Могу писать код, могу не писать
    Нагружать сервер будет сама задача которая будет выполняться. Если скрипт выполняется быстро и почти не потребляет ресурсов, то хоть каждую минуту его запускай. Проще говоря, всё зависит от конкретной задачи. Скажем если у нас php скрипт и мы знаем, что он быстрее чем за 2-3 мин. свою работу не закончит, то запуск каждую минуту может привести к не очень хорошему результату.
    Ответ написан
    2 комментария
  • Сколько времени нужно закладывать в детальный технический аудит сайта?

    webinar
    @webinar Куратор тега Веб-разработка
    Учим yii: https://youtu.be/-WRMlGHLgRg
    Bitrix и большие нагрузки несовместимы. Так что надо сначала просчитать сколько времени уйдет на попадание в топ поисковиков, оценить ожидаемый трафик. Параллельно делать новый сайт, который потянет ожидаемую нагрузку, вероятно увеличить мощность железа.
    Но прежде всего озвучить клиенту цифру в $ за попадание в топ российской выдачи по запросу "обувь", возможно другие вопросы отпадут сами собой.
    Ответ написан
    6 комментариев
  • Сколько времени нужно закладывать в детальный технический аудит сайта?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега Веб-разработка
    Как и в случае с любой другой задачей в мире, если вы не знаете, сколько времени и сил на неё понадобится, это означает одно из двух:
    1. Задача слишком общая и её нужно дробить, оценивая подзадачи.
    2. Вы некомпетентны в данном вопросе и задачу нужно отдать тому, кто нужными знаниями обладает. Если у вас есть желание повысить свой уровень, то нужно стоять над душой у этого человека во время работы и задавать вопросы.

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

    От того, что вам напишут в ответах "от дня до года", вам легче не станет, а ничего кроме этого написать и невозможно, потому что в описанной вами задаче огромное количество подвижных частей и взаимозависимых переменных.
    Ответ написан
    5 комментариев
  • Битрикс. Чпу в умном фильтре?

    Есть из коробки. Читайте документацию к компоненту умного фильтра.
    Ответ написан
    1 комментарий
  • Что такое framework Agnostic?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега Веб-разработка
    Фраза framework agnostic означает, что какое-либо решение не завязано на какой-то конкретный фреймворк и может завестись под любым (возможно, при помощи какого-то адаптера).
    Ответ написан
    Комментировать
  • Как отследить появление новых элементов в DOM?

    @iShatokhin
    JS developer
    $(elem).on("DOMNodeInserted", function (event) { /* ваш код */ });
    Ответ написан
    6 комментариев
  • Умеет ли phpstorm делать поиск/замену при массовом поиске в файлах?

    @SilverSlice
    Edit - Find - Repalce in path
    Ответ написан
    Комментировать
  • Как реализовать гостевую книгу (или отзывы) на drupal7 ?

    UksusoFF
    @UksusoFF
    Делал так же как предложил @Prognosticator плюс Rules еще для оповещения о добавлении отзыва.
    Или еще можно сделать материал типа страница и разрешить ее комментировать.
    Ответ написан
    Комментировать
  • Как совершить печать страницы определенной области ?

    WaRstim
    @WaRstim Автор вопроса
    Решение :
    @media print { /* Стиль для печати */
    body{
    	visibility: hidden;
    }
    /* Блок который нужно отобразить */
    .box {
    	visibility: visible;
     }
     }
    Ответ написан
    1 комментарий
  • Существуют ли продвинутые php-курсы на русском языке?

    MegaMufa
    @MegaMufa
    https://github.com/yiisoft/yii2

    В свое время в отделе, в котором я работал, нужно было написать небольшой фреймворк для специфичных задач так как существующие не были сильно избыточны. Это дело поручили мне, а с пыхом я был знаком только по слухам. Хотя раньше шпилил на др языках.

    Для того что бы "проникнуться" духом пыхыпы перелопатил половину исходников этого фреймворка (правда тогда это была первая версия). Понял очень многое: как строятся сложные системы на пыхе, как в нем патерны применять, какие есть хаки и фичи в языке.

    Это муторно и скучно, но, поверьте, оно того стоит.

    А без английского языка выше джуниора подняться не получиться. Актуальная информация только на оргинале. НА русский переводят уже устаревшую.
    Ответ написан
    Комментировать
  • Существуют ли продвинутые php-курсы на русском языке?

    @comAT0Zz
    >И ли же их впринципе не сущствует, и дальнейшее обучение стои строить осваивая какой либо фреймворк?
    Дальнейшее обучение лучше строить на том, чтобы попытаться написать свой фреймворк для какого-нибудь проекта. Спросите знакомых, может кому-то жизненно необходим какой-либо узкоспециализированный сайт или сервис или crm или еще чего-нибудь, в крайнем случае придумайте сложный проект. Заодно и ТЗ писать научитесь, а также разберетесь в вопросах проектирования приложений, оптимизаций, костылей :)

    Разбирать существующие фреймворки, имхо, стоит лишь тогда, когда будете уверенно себя чувствовать в коде. Чтобы не метаться в панике, когда наткнетесь на баг фреймворка, а самостоятельно залатать.
    Ответ написан
    Комментировать
  • Почему не запускается cron скрипт?

    Indermove
    @Indermove Автор вопроса
    C#/.NET back-end разработчик
    Все нашел ответ на свой вопрос:

    1) Кронтаб нужно запускать так: sudo crontab -e - это нужно чтобы cron запускал скрипты из под root.
    2) Инструкции для cron должны быть такими. Нужно обязательно писать bash перед указанием пути к скрипту. После указания пути к скрипту дописать >/dev/null 2>&1
    Пример:
    0 1 * * * bash /bin/bash /usr/share/script.sh >/dev/null 2>&1
    0 2 * * * bash /bin/bash /usr/share/script2.sh >/dev/null 2>&1
    * * * * 1 bash /bin/bash /usr/share/script3.sh >/dev/null 2>&1

    #!/bin/bash
    rsync --archive /home/share --delete /mnt/backup/neon_backup
    rsync --archive /var/www/html/vtgr --delete /mnt/backup/neon_backup

    3) Сами скрипты действительно должны быть лишены sudo, так как и так запускаются из под пользователя root.
    Пример:
    #!/bin/bash
    
    cd /mnt/backup/neon_backup/MySQL_backup
    mysqldump -u root -pnppwd --all-databases > mysql_backup.sql
    set > /tmp/script-environment
    tar cvjf back_mysql.tar.bz2 mysql_backup.sql
    Ответ написан
    Комментировать