Задать вопрос
  • Что входит в отладку скрипта на PHP?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    В отладку входит два основных механизма:
    1. Включение полного отображения ошибок (или логирования, если на боевом сервере)
    2. Пошаговая трассировка с контролем состояния переменных (с использованием IDE или вручную через var_dump/die).

    В вашем случае, очевидно что не был выполнен пункт №1. Какой бы ни была причина проблем, РНР всегда выдаст ошибку. Так что в вашем случае надо было просто убедиться, что error_reporting=E_ALL, а display_errpos=1

    А вот нижеследующее утверждение не имеет смысла
    PHP данную ошибку не показывал, т.к. не использовалась функция проверки записи в директорию is_writable().

    РНР не нужны никакие функции, чтобы сообщить об ошибке. А is_writable() обычно используется как раз наоборот, чтобы подавить ошибку и дальше работать как ни в чём не бывало. Ну или в лучшем случае выбросить какую-нибудь бессмысленную ошибку типа "Не могу записать в файл", не говорящую ничего о реальной причине проблемы.
    Ответ написан
    4 комментария
  • Будут ли вызваны в PHP 8.4 хуки свойств при создании объекта через PDO fetchObject?

    Vamp
    @Vamp
    1. Создаётся объект без вызова конструктора.
    2. В объекте ищется поле с именем, совпадающим с именем колонки.
      1. Если поле найдено, вызывается хук set. Даже если у поля область видимости private.
      2. Если поле найдено, а хука нет, в поле просто сетается значение. Даже если у поля область видимости private.
      3. Если не найдено, вызывается магический метод __set
      4. Если __set отсутствует, создаётся динамическое поле с именем колонки.

    3. Вызывается конструктор.


    PDO::FETCH_PROPS_LATE не работает совместно с методом fetchObject. Конструктор по-прежнему вызывается только в конце. Чтобы переставить вызов конструктора наверх, нужно вызывать методы setFetchMode и fetch:
    $stmt = $pdo->query('SELECT * FROM tbl_name');
    $stmt->setFetchMode(PDO::FETCH_CLASS | PDO::FETCH_PROPS_LATE, $class, $constructorArgs);
    $obj = $stmt->fetch();
    Ответ написан
    Комментировать
  • Будут ли вызваны в PHP 8.4 хуки свойств при создании объекта через PDO fetchObject?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега PHP
    Проверка показала, что будут:
    class Tmp
    {
        public string $name
        {
            set (string $name) {
                $this->name = strtoupper($name);
            }
        }
    }
    
    var_dump($pdo->query("SELECT 'lowercase' as name")->fetchObject(Tmp::class));
    
    object(Tmp)#550 (1) { ["name"]=> string(9) "LOWERCASE" }
    Ответ написан
    2 комментария
  • MySQL JSON_OBJECT Приводит значение к строковому типу, возможно ли это как то обойти?

    @SanekIrk Автор вопроса
    Смог добиться нужного результата путём оборачивания строки (или любой другой не json тип) в кавычки, а потом конвертируя результат в json. Теперь весь `CASE WHEN` стал возвращать json:
    SELECT
        JSON_OBJECT(
            1,
            (
                CASE 'one'
                    WHEN 'one' THEN JSON_ARRAY(1, 2)
                    WHEN 'two' THEN CONVERT(JSON_QUOTE('1'), JSON)
                END
            )
        );

    По скорости выполнения запроса сильных просадок не заметил.
    Ответ написан
    Комментировать
  • Не удается подключить сервер к консоли администрирования 1С. В чем может быть проблема?

    hint000
    @hint000
    у админа три руки
    1С и консоль администрирования 1С на данном сервере не установлены.
    А вы пытаетесь подключиться именно к серверу 1С, который и не установлен.
    Потребовалось подключить базы, расположенные на другом сервере под управлением Win 2019 с SQL 2019 (№2).
    У вас два варианта.
    (1) Таки установить 1С сервер на Win 2019. Но он потребует лицензию (именно для сервера 1С). Но работать будет быстро.
    (2) Добавить информационную базу 1С на Win 2008 R2, указав в параметрах имя или адрес Win 2019 и имя БД. Поскольку сервер 1С и сервер SQL разнесены на разные хосты, то работать будет несколько медленнее. Зато не потребуется дополнительной лицензии на сервер 1С.

    Клиент подключается именно к серверу 1С, т.е. в первом случае к Win 2019, а во втором к Win 2008 R2, и клиенту не важно (он не знает) где на самом деле находится БД в SQL.

    P.S. При любом из двух вариантов вам не требуется явно (руками) указывать порт, ПО само знает, какие порты используются по умолчанию. Такое прописывание руками только ещё больше запутывает вас насчёт того, к чему же на самом деле вы пытаетесь подключиться.
    Ответ написан
    1 комментарий
  • Сетевая карта ПК переключается в 100mb/s. Как исправить?

    xez
    @xez
    TL Junior Roo
    Заменить провод и/или заменить роутер.
    Ответ написан
    6 комментариев
  • Не получается сделать REDIRECT порта для всех IP кроме определнных. Что я не понимаю?

    @dronmaxman
    VoIP Administrator
    # Разрешаем "исключения" без редиректа
    iptables -t nat -A PREROUTING -p tcp -s 109.194.11.11 --dport 443 -j ACCEPT
    iptables -t nat -A PREROUTING -p tcp -s 178.218.22.22 --dport 443 -j ACCEPT
    
    # Всё остальное перенаправляем на 4433
    iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-port 4433
    Ответ написан
    Комментировать
  • Как сделать экранирование символов в Python для SQL запроса?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Не нужно ничего экранировать. Нужно использовать параметризованные запросы с плейсхолдерами.
    Ответ написан
    6 комментариев
  • После переезда на новый хостинг перестал работать сайт?

    Adamos
    @Adamos
    Старый сайт вдруг сломался при переезде с хостинга на свой сервер?
    Скорее всего - настроенный по дефолту php.ini с выключенным short_open_tag.
    Ответ написан
    3 комментария
  • Как реализовать библиотеку классов на JavaScript?

    VoidVolker
    @VoidVolker Куратор тега JavaScript
    Dark side eye. А у нас печеньки! А у вас?
    Правильнее так:

    Type.js
    class Type
    {
        isArray() {}
    }
    
    export default Type

    Dialog.js
    class Dialog 
    {
        show() {}
    }
    
    export default Dialog

    CRM.js
    import Type from './Type.js'
    import Dialog from './Dialog.js'
    
    export { Type, Dialog }

    И далее исходный код скармливается сборщикам типа babel, gulp, rollup и прочим. И вот то, что вы привели - результат работы с кодом этих сборщиков для совместимости со старыми браузерами. Для ноды само собой сборщики не используются - там они не нужны. Простой пример реализации библиотеки для ноды/браузера с использованием сборщиков rollup и babel: @voidvolker/enum.
    Ответ написан
    1 комментарий
  • Как открыть скомпилированный Vue проект локально?

    dlnsk
    @dlnsk Автор вопроса
    ПК Партнер 01.01 -> ПК Поиск -> IBM PC
    Решил внедрением всего и вся в итоговый html с помощью:
    https://www.npmjs.com/package/vite-plugin-singlefile
    Ответ написан
    Комментировать
  • Почему нет доступа к exposed параметру из скрипта?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Компонент VImg после монтирования запускает свой асинхронный процесс подгрузки изображения (событие loadstart). По завершению загрузки выдаётся событие load, при ошибке событие error. После load становятся доступными параметры изображения (naturalWidth, naturalHeight, currentSrc).
    Привязывайтесь к этим событиям, чтобы точно получить нужные данные.
    Ответ написан
    1 комментарий
  • Как заставить typescript поверить, что в объекте есть свойство?

    @modelair
    unsocial
    есть такая штука - typeguard. он сообщает ts'у, что этот объект определенного типа, который указан после is. вот простенький, дальше разберешься, думаю.

    function isData(data: any): data is { id: number | string } {
      return data.id !== undefined
    }
    Ответ написан
  • Как заставить typescript поверить, что в объекте есть свойство?

    WblCHA
    @WblCHA
    Тебе надо юнион здесь и тогда тс поймёт, что дата может быть только одного типа после проверки.
    export async function upsert(
      path: string,
      data: { id?: never } | { id: number | string }
    ) {
      if (data.id !== undefined) {
        return update(path, data)
      } else {
        return create(path, data)
      }
    }

    Но даже это не до конца верно, потому что у тебя передаваемый объект полностью должен быть типизирован и тогда получаем что-то в этом роде:
    interface SomeDataCreate {
      name: string
    }
    
    interface SomeDataUpdate {
      id: number | string
      name: string
    }
    
    export async function upsert(
      path: string,
      data: SomeDataCreate | SomeDataUpdate
    ) {
      if ("id" in data) {
        return update(path, data)
      } else {
        return create(path, data)
      }
    }
    Ответ написан
    1 комментарий
  • Как работать с минифицированным JS?

    VoidVolker
    @VoidVolker Куратор тега JavaScript
    Dark side eye. А у нас печеньки! А у вас?
    Никак. С кодом после минификации не надо никак работать. Минифицированный код предназначен для доставки его по сети максимально быстро на клиент. Для изменения кода вам следует вносить изменения в исходный код и уже только потом его минифицировать, а не наоборот. Если исходного кода нет - то пропускаете через любой деобфускатор и вручную восстанавливаете исходный код. Ну или пишете сами с нуля то же самое.
    Ответ написан
    2 комментария
  • Как изменить букву диска в линукс?

    paran0id
    @paran0id Куратор тега Linux
    Умный, но ленивый
    Обращайтесь к дискам по uuid, или по id, там в /dev/disk/by-* симлинки прописаны.
    Ответ написан
    6 комментариев
  • Куда исчезают записи в базе данных mariadb, innodb?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Никуда.
    Вы смотрите на, по своему определению, приблизительное значение. 700к или 900к - значения одного порядка, допустимая флуктуация для статистики планировщика.

    об этом раньше было отдельная сноска в интерфейсе phpmyadmin, не знаю как сейчас. Никто не пересчитывает всю таблицу, чтобы узнать, 895342 там записей или 902542 записей.
    Ответ написан
    Комментировать
  • Как называется такая вложенность в php?

    Это называется PHP. Потому как PHP изначально создавался как сам себе шаблонизатор HTML. Именно поэтому в коде присутствуют открывающие и закрывающие конструкции "<?php" и "?>"

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

    <?php if ($isSent): ?>
    
        <p>Email sent successfully!</p>
    
    <?php else: ?>
    
    <form method="post" action="<?php echo $_SERVER["PHP_SELF"]; ?>">
        <label for="subject">Тема письма : </label> <br>
        <input type="text" name="subject" size="30"> <br>
    
        <label for="elvismail">Содержание письма : </label> <br>
        <textarea name="elvismail" id="" cols="30" rows="10"></textarea> <br>
    
        <input type="submit" name="submit">
    </form>
    
    <?php endif; ?>


    Погуглите "php endif endfor"
    https://www.php.net/manual/en/control-structures.a...
    Ответ написан
    4 комментария
  • Как разместить сам flex-контейнер (котором есть перенос по рядам) по центру?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Вы бы лучше вместо картинок сделали пример на том же JSFiddle или CodePen.
    А так, в общем случае
    div.operation-selector {
      width: 860px;
      margin: auto;
    }
    Ответ написан
    Комментировать