Задать вопрос
  • Освоение Debian для новичков?

    Adamos
    @Adamos
    По большей части перевел свою контору на Линукс.
    Тоже скажу, что задуманное вами - безумие.
    Линь никогда не был и не будет бесплатной заменой майкрософтовской инфраструктуре, заточенной самой на себя и встающей колом, когда вы хотите "мигрировать" и порвать вендор-лок.

    Хотите поиграться с Линуксом - возьмите старый системник и запустите на нем бэкап-сервер, например. Файлопомойку - некритичную, чтобы безболезненно на ней экспериментировать. Уже попытавшись разграничить на этой файлопомойке доступ по AD, вы заглянете в глубину кроличьей норы...
    Ответ написан
    Комментировать
  • Как вставить кусок кода php без ошибки?

    ev_g
    @ev_g
    Web dev.
    Тебе нужно либо закрывать двойные кавычки, добавлять строку и открывать, либо взять переменную в {}.

    Пример 1:
    return "<span class=\"text-muted\">Show:</span> <select class=\"border form-control-sm text-muted\" onchange=\"window.location='" . $_SERVER['PHP_SELF'] . "?page=1&ipp='+this[this.selectedIndex].value+'$this->querystring';return false\">$items</select>";


    Пример 2:
    return "<span class=\"text-muted\">Show:</span> <select class=\"border form-control-sm text-muted\" onchange=\"window.location='{$_SERVER['PHP_SELF']}?page=1&ipp='+this[this.selectedIndex].value+'$this->querystring';return false\">$items</select>";


    Если нужно вставить вызов функции то только разрывать строку:

    return "<span class=\"text-muted\">" . myvalidate($LANG['g_00055']) . "</span> <select class=\"border form-control-sm text-muted\" onchange=\"window.location='" . $_SERVER['PHP_SELF'] . "?page=1&ipp='+this[this.selectedIndex].value+'$this->querystring';return false\">$items</select>";


    И отдельно порекомендую не городить вывод с таким количеством кавычек. Это усложняет правки и разбор кода. Делай простой структурированный вывод html с вставкой нужных php переменных.
    Ответ написан
    Комментировать
  • Как вставить кусок кода php без ошибки?

    попробуйте так:
    return "<span class=\"text-muted\">".myvalidate($LANG['g_00055'])."</span> <select class=\"border form-control-sm text-muted\" onchange=\"window.location='$_SERVER[PHP_SELF]?page=1&ipp='+this[this.selectedIndex].value+'$this->querystring';return false\">$items</select>";
    Ответ написан
    Комментировать
  • Как установить последнюю версию laravel?

    @tukreb
    Читайте ошибки, а не бегите без штанов на улицу, чтобы спросить у первого встречного решение ваших проблем.
    Вам же английским языком говорят, установите ext-fileinfo в систему.
    Ответ написан
    Комментировать
  • Как сделать задержку перед редериктом с полной загрузкой страницы?

    @rPman
    без javascript редирект делают с помощью тега meta
    <meta http-equiv="refresh" content="2;URL=https:/site.ru">


    тут 2 - количество секунд перед редиректом
    Ответ написан
    1 комментарий
  • NZXT Kraken X53 потянет ли 2700х?

    @Mikeoldfield
    Сетевой инженер / системный администратор
    Потянет ли она этот процессор?

    Кто она? Процессора, корпуса?

    И поместится ли она если ее поставить в середине корпуса сверху?

    Процессора в корпуса? Да, процессора поместится. Их, процессорей, в корпус штук 300 поместится.
    Ответ написан
    1 комментарий
  • Как установить статус кода 200 после ошибки от Telegram?

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    Ответ надо посылать со скрипта который обрабатывает запросы от бота
    Можно быстро отправить код 200, закрыть соединение для бота и продолжить выполнение тяжёлой задачи в фоне

    в nginx (php-fpm)
    <?php
    
    //отправляем ответ 200 и закрываем соединение
    http_response_code(200);
    fastcgi_finish_request();
    
    //тут долгая задача


    Apache (mod_php)
    <?php
    ob_start();
    http_response_code(200);
    
    header("Connection: close\r\n"); 
    header("Content-Encoding: none\r\n");
    
    $size = ob_get_length();
    header("Content-Length: ". $size . "\r\n"); 
    ob_end_flush();
    flush();
    
    //тут долгая задача в фоне
    Ответ написан
    Комментировать
  • Как в PHP вынуть номер абонента?

    @Akela_wolf
    Extreme Programmer
    Учитывая что по структуре это ini-файл, используйте parse_ini_file или parse_ini_string
    Ответ написан
    Комментировать
  • Как в PHP вынуть номер абонента?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега PHP
    Похоже, в данном случае спасёт parse_ini_file.
    Ответ написан
    2 комментария
  • Нужно использовать триггеры или нет??

    @Akina
    Сетевой и системный админ, SQL-программист.
    В общем случае - нет.

    Как я понимаю, мысль твоя бредёт вот в каком направлении: мы выполняем INSERT в основную таблицу, а триггер AFTER INSERT, имеющий доступ к сгенерированному значению автоинкрементного ключа именно свежесозданной записи, создаёт записи в связанных таблицах, используя именно это значение.

    Так вот именно эта мысль - она некорректная. Причём по совершенно элементарной причине. Данные для вставки в связанных таблицах (не поля связи - других полей) триггер тоже должен откуда-то взять. А вот корректно передать их достаточно непросто. Их нельзя вставить в блок данных основной записи - там просто места для этого нет, сервер перед выполнением INSERT проверяет входные данные на соответствие количества значений количеству переданных данных, соответствие типов, непревышение размеров и пр. Значит, данные придётся передавать за пределами запроса. Да, тут есть варианты, типа определённых пользователем переменных, временных таблиц и протчая - но всё это ненадёжно, сложно и совершенно несопровождаемо. Следует ещё учесть то, что триггеры - это конструкция неотключаемая. Либо она выполняется при абсолютно любом INSERT, и тогда есть определённые проблемы (триггер, предназначенный для работы при INSERT .. VALUES с единственным блоком данных, вряд ли корректно обработает вставку нескольких блоков данных, INSERT .. SELECT или LOAD DATA), либо для выполнения запросов на массовое добавление триггер надо удалять и потом пересоздавать - а если это происходит в конкурентной среде?

    В общем, триггер - неподходящая идея. Вот хранимая процедура (stored procedure) - это самое оно. Там можно реализовать логику ну практически любой сложности, с любыми обработками и проверками. Хотя и не следует забывать, что триггер выполняется наново для каждой отдельной вставляемой записи, так что его наличие, даже при достаточно простом и компактном коде, сильно скажется на скорости выполнения операций вставки, особенно вставки массовой.

    при регистрации пользователя, я получаю lastInserdId() и добавляю статичные данные для этого пользователя в различные таблицы

    Ненадёжно. Если между вставкой в основную таблицу и получением LAST_INSERT_ID() соединение будет разорвано и затем автоматически восстановлено, то полученное значение будет некорректным (вернее, получите NULL). А свежесозданная запись благополучно "повиснет в воздухе".
    Чисто теоретически, базовая таблица пользователей обязана обеспечивать уникальность записи даже без учёта синтетического первичного ключа (например, поле логина явно должно быть уникальным). А коли так, и с учётом того, что все значения для свежевставленной записи нам известны, можно использовать INSERT INTO slave SELECT 'literal', main.id FROM main WHERE uniquecolumn = 'new value'.

    PS. Не знаю, почему при обучении вставке данных все начинают с INSERT .. VALUES - как по мне, глубоко порочная практика. Сначала надо изучить и досконально освоить INSERT .. SELECT, и только потом упоминать про INSERT .. VALUES как более простой конструкции, применимой в частных случаях.
    Ответ написан
    1 комментарий
  • Когда выполняется __destruct?

    Maksclub
    @Maksclub Куратор тега PHP
    maksfedorov.ru
    Может до, может после

    Данные серверу (пользователю) можно отправить через fast_cgi_finish_request, но приложение продолжит работать — очевидно объекты продолжат существовать столько, сколько нужно и удалены (если пришёл gc, а на объект никто не ссылается)

    Кроме того у вас может быть демон, который вообще не работает с веб-сервером… очевидно что объекты будут существовать без связи с клиентом

    В общем случае (классич работа приложения) после того как закончится выполнение — fpm прибьёт ваш процесс и объекты соотвественно — и будет вызван деструктор

    Вы можете и сами инициализировать деструктор через удаленние объекта через unset

    В режиме, когда пхп-скрипт работает достаточно долго (или в cli режиме или после finish request) — gc может прийти за брошенными объектами сам и вызвать деструкторы

    Почитать:

    https://abhishekjakhotiya.medium.com/php-fpm-shutd...

    https://www.php.net/manual/ru/features.gc.performa...
    https://developpaper.com/garbage-collection-mechan...

    gc = garbage collector = сборщик мусора
    Ответ написан
    Комментировать
  • Сервер для docker?

    Sanes
    @Sanes
    Тебе надо выучить 10 консольных команд.
    Ответ написан
    Комментировать
  • Сервер для docker?

    ky0
    @ky0
    Миллиардер, филантроп, патологический лгун
    "Для личного использования и пары сайтов", как вы выражаетесь - нет смысла, максимум docker-compose, остальное оверкилл.
    Ответ написан
    Комментировать
  • Как исправить нечитаемое имя отправителя и получателя почтового сообщения?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    ?utf-8? - исходная строка была в кодировке UTF-8.
    ?B? - закодировано в Base64.
    0KnQtdC/0LAg0KHQзtdGA0LPQtdC5 - сама строка в Base64.
    print base64_decode('0KnQtdC/0LAg0KHQзtdGA0LPQtdC5'); // Щепа Сергей

    Кроме Base64 может встретиться кодировка Quoted-printable, обозначаемая как ?Q?. В этом случае заголовок будет выглядеть как
    ?utf-8?Q?=D0=A9=D0=B5=D0=BF=D0=B0 =D0=A1=D0=B5=D1=80=D0=B3=D0=B5=D0=B9?=

    Ну и кодировка исходной строки может быть любая. Для перекодирования можно использовать iconv().
    Ответ написан
    Комментировать
  • Какова должна быть правильная архитектура парсера на PHP?

    SilenceOfWinter
    @SilenceOfWinter Куратор тега PHP
    та еще зажигалка...
    Для начала бы хоть объяснил что именно ты парсишь.
    А если понадобится писать не в базу, а в файл, писать Parser2?

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

    Для перечислений можно использовать Enum, это подойдёт для TextAlign.
    Для других кейсов можно использовать ValueObject с валидацией в конструкторе.
    Ответ написан
    9 комментариев
  • Пытаюсь запросить данные из MySQL через PHP. Где ошибка?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Выводится только "соединение установлено", а так - ничего
    Во первых - включить вывод ошибок, в логи же вы не смотрите...
    Во вторых - куча ошибок, непонятно откуда вообще появившихся. Все плохо.
    $link = mysqli_query($link, "SELECT * FROM 'table-name' WHERE USER_ID = 1620");
    Сам линк зачем-то затирается результатом выполнения запроса, внутри запроса имя таблицы зачем-то в кавычках (либо убрать, либо использовать обратные кавычки), потом вообще повтор и бред -
    $query = "SELECT * FROM 'table-name' WHERE USER_ID = 1620"; //снова кривой запрос, теперь уже в переменной, зачем?
    $result1 = mysqli_query($link, $query) or die(mysqli_error($link)); //Линк тут уже заменен результатом выборки, 
    //так что там не ресурс подключения, но варнинги мы не смотрим, так что пофиг же, да?

    Похоже что код взят из какого-то туториала 15летней давности, и над ним издевался ничего не понимающий вивисектор...
    Ответ написан
    Комментировать
  • Как грамотно сравнивать два файла?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    Не придумывайте велосипед. Просто посмотрите как решают подобные вещи в других проектах, например git diff. В результате у вас будет аж 3 варианта использования:
    1. использовать уже готовый продукт (например тот же git-diff) как консольную утилиту
    2. использовать уже готовую библиотеку, решающую данный вопрос, подключив ее к своему коду
    3. посмотреть код уже готовых продуктов и либо использовать его, либо на основе написать свой
    Ответ написан
    Комментировать
  • Нормален ли такой код?

    @rPman
    'магические константы' - что такое 9 или 10?, мне то понятно но чтобы их понимать нужно изучать код, размеры области нужно определить в переменные или константы, приучаться надо с самого начала к тому чтобы такого не было. То же самое с символами кнопок управления, определи для них переменные, пусть сначала это будут константы, заданные в коде, зато позже будет проще сделать изменяемые настройки.

    Отсюда кстати баг, ширина у тебя при определении буфера карты определена как 20 а при заполнении экрана - 'стенками' забита строкой в 10 (хотя ожидалось что будет еще один цикл, заполняющий посимвольно строку).

    Правильно - определить буфер как содержимое стенок # и заполнить его однократно вне игрового цикла (тут можно и другие препятствия расставить, например сделать лабиринт), не важно константами или алгоритмом.

    А в бесконечном цикле просто выводить содержимое map и уже во время вывода проверять x,y положения 'игрока' и выводить его на экран вместо символа карты. Достоинство такого подхода - карта может состоять не только из символов стенок но и любых других, проходимых.

    ну и красивости раскидай по функциям вывод экрана и обработку клавиш управления, так же внутри вызова каждой клавиши проверку на стенку вынеси в вызов отдельной функции (в параметрах - символ карты), возвращает boolean, является ли символ проходимым, благодаря этому позже проще будет добавить другие символы стенок

    Следующим шагом x,y определи структурой, если продолжать дальше, в идеологии объектного программирования (да я вижу что это С, но простой вызов метода у структуры/класса сделать можно) в этой структуре определи функции, описывающие действия над персонажем (обработка действий - там функция что разбирает нажатые клавиши, только по логике нав ход должны подаваться не клавиши а константы, определяющие действие, вывод на экран - вернет символ, проверку проходимости точки на карте, т.е. стены, и т.п.) тогда будет проще добавить к примеру второго игрока или NPC и т.п.
    Ответ написан
    4 комментария
  • В чём отличие результатов кодировок `encodeURI`, `encodeURIComponent` и `application/x-www-form-urlencoded`?

    @alexalexes
    Отличия в охвате специальных символов, которые подвергаются конвертированию.
    Функция encodeURI меньше охватывает символов, а функция encodeURIComponent - больше.
    Но ни та, ни другая не достигает стандарта RFC 3986, чтобы считаться полностью правильно закодированным в вид контента application/x-www-form-urlencoded (смотрите документацию по encodeURI).

    PS: Со стороны php сервера такая же история. Есть urlencode/urldecode - которые неполные по RFC 3986, а есть rawurlencode/rawurldecode - которые полностью удовлетворяют стандарту RFC 3986. При кастомном конструировании http пакетов предпочтительно использовать последние.
    Ответ написан
    1 комментарий