Задать вопрос
  • Кто правил ошибку "ALTER TABLE `b_iblock_element_property` CHANGE `ID` `ID` int NOT NULL auto_increment"?

    @Okeanchik
    Пошаговая инструкция:
    1. Создать резервную копию:
    Перейдите: Настройки → Инструменты → Резервное копирование.

    2. Проверьте зависимости
    Настройки → Настройки продукта → Настройки модулей → Инфоблоки → SQL-запрос
    Вставить запрос и выполнить:
    SELECT TABLE_NAME, COLUMN_NAME 
    FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE 
    WHERE REFERENCED_TABLE_NAME = 'b_iblock_element_property' AND REFERENCED_COLUMN_NAME = 'ID';


    3. SQL-запрос для изменения типа (2 варианта)

    Вариант 1. Простое изменение (если после шага 2 будет надпись "нет данных")
    ALTER TABLE `b_iblock_element_property` 
    MODIFY `ID` BIGINT NOT NULL AUTO_INCREMENT;


    Вариант 2. Безопасное изменение (если будут данные зависимостей)
    SET FOREIGN_KEY_CHECKS=0;
    ALTER TABLE `b_iblock_element_property` 
    MODIFY `ID` BIGINT NOT NULL AUTO_INCREMENT;
    SET FOREIGN_KEY_CHECKS=1;


    4. Проверьте результат
    DESCRIBE `b_iblock_element_property`;
    Должно получиться так:
    +---------------------+------------+------+-----+---------+----------------+
    | Field               | Type       | Null | Key | Default | Extra          |
    +---------------------+------------+------+-----+---------+----------------+
    | ID                  | bigint(20) | NO   | PRI | NULL    | auto_increment |  <-- Успех!
    | ...                 | ...        | ...  | ... | ...     | ...            |
    +---------------------+------------+------+-----+---------+----------------+


    5. Почистить кэш
    очистите кеш Битрикс (Админка → Настройки → Настройки продукта → Автокеширование → Очистка файлов кеша →Все).

    6. Если что-то пойдет не так
    Откатитесь на бэкап
    Ответ написан
    Комментировать
  • Есть ли список распространённых и общепринятых слов для именования переменных в PHP?

    vitaly_74
    @vitaly_74
    Может вы имеете ввиду кембриджский словарь существительных?
    Ответ написан
    Комментировать
  • Почему в качестве this здесь worker?

    kaverza
    @kaverza
    Потому-что cachingDecorator возвращает функцию, ссылка на которую присвоена методу slow объекта worker.

    вот альтернативные варианты записи

    worker { 
        slow: function(x) {
            // this = worker
        }
    }

    worker.slow = function(x) {
      // this = worker
    }


    function test() {
       // this = window;
    }
    worker.slow = test; // передали по ссылке, теперь this = worker


    const resFunc = cachingDecorator(worker.slow); // вернул функцию function(x), this = window
    worker.slow = resFunc; // передали по ссылке, this = worker


    советую почитать про замыкания, там более подробно все это описано.
    Ответ написан
    1 комментарий
  • Как в symfony/panther задать папку для скачивания файлов?

    glaphire
    @glaphire Автор вопроса
    PHP developer
    Нашла ответ на свой вопрос :)
    1. Panther это хорошо, но тонкая настройка хрома там сейчас не реализована. Переписала на php-webdriver.
    2. На wiki весьма скудные примеры, как добавлять настройки хрому, через setExperimentalOptions() настраиваются почти все параметры, даже если это настройки профиля.
    3. Правильный ответ я нашла с помощью stackoverflow: ccылка
    Упрощенно код выглядит так:
    <?php
    
    use Facebook\WebDriver\Chrome\ChromeOptions;
    use Facebook\WebDriver\Remote\DesiredCapabilities;
    use Facebook\WebDriver\Remote\RemoteWebDriver;
    
    class ParserService
    {
        private $webdriver;
    
        public function __construct()
        {
            $host = 'http://localhost:4444';
            $options = new ChromeOptions();
            $options->setExperimentalOption("prefs", [
                "download.prompt_for_download" => false,
                "download.directory_upgrade" => true,
                "safebrowsing.enabled" => true,
                "download.default_directory" => "/path/to/dir",
            ]);
            $caps = DesiredCapabilities::chrome();
            $caps->setCapability(ChromeOptions::CAPABILITY, $options);
            $this->webdriver = RemoteWebDriver::create($host, $caps);
        }
    }
    Ответ написан
    Комментировать
  • В чем может быть проблема (dovecot + IMAP)?

    @hendrixix Автор вопроса
    Linux не поддерживает digest-md5 авторизацию, которую использует Outlook. Отключил данный тип в настройках dovecot.
    Ответ написан
    1 комментарий