• Почему регулярное выражение в цикле не находит совпадения, а отдельно находит?

    @ksnk
    Попробуй вот такую регулярку
    $result_match = preg_match('/Цена(\d{1,6})[рр₽](?:[^aак]|$)|Цена(\d{1,6})(?:[^aак]|$)|[^-р](\d{1,6})[рр₽](?:[^aак]|$)|ц(\d{1,6})(?:[^в]|$)/iu', $post, $matches_gross_result );
    
        if ($result_match == true) {
            $pattern= array_shift($matches_gross_result); // $pattern - найденная подстрока, вдруг зачем то пригодится
            $matches=implode('',$matches_gross_result); // найденная цена - собственно без дополнительной магии.
    ...

    Основной смысл - если строка поиска заканчивается сразу после указания цены - старая регулярка не сработает из за [^aаk] или [^в]. И зачем ковырять цену второй регуляркой, если она и так может быт выковыряна в первой.

    Использование mb_ereg_replace сделано из каких высоких соображений ? Или так исторически сложилось?
    Написано
  • Как узнать что загружает php на сервере debian?

    @ksnk
    Нужно сначала проверить стандартные проблемы.
    Например с базой. Кривые индексы в таблицах и т.д.
    Простейший и наглядный способ в консоли покликать команду mysql <<< "show full processlist\g" Это, конечно, если mysql база... Для других баз, вероятно, тоже можно подобный запрос выполнять.
    Обычно, когда нет нагрузки вывод пустой и эпизодически проскакивают запросы. А вот если какой нибудь запрос тормозит - он будет периодически светится.
    Еще причина в ддос атаке. Не ддосит ли сайт сам себя? Это видно по логам сервера.
    Ну и в любом случае - запустить команду top и помедитировать над картинкой. Может просто памяти не хватает?
    Написано
  • Как лучше реализовать переход с excel?

    @ksnk
    Перегоняйте сотрудников в гуглдок Ну или в яндексдок и там уже отдельным скриптом конвертируйте куда кому удобно. Авторизация естественным образом появляется из яндекса/гугеля. Сотрудники испытают минимальный стресс при переезде на почти такую же систему работы.
    Чтение данных из таблицы гугла - одна строка на php, из яндекса чуть сложнее - строк 10.
    Скрипты, которые вычитывают из доков и что-то умное делают с данными предстоит написать вручную, да. Для особой оперативности - можно перечитывать "исходные" файлы периодически, раз в час, например.
    Написано
  • Какие есть способы голосового управления сайтом?

    @ksnk
    Схема - ставишь на сайт
    <input type="file" accept="audio/*" capture="user">
    Имеются противопоказания - не только лишь все броузеры такое любят и поддерживают.

    при изменении засылаешь на сайт получившийся файл, он распознается сайтом в текст, дальше поиск по тексту с пониманием что вообще хочет этот юзер, кроме как выругаться. И делаешь, если юзер сумел сказать что-то вразумительное. Сам распознаватель - Тынц. Сам код на ноде, с использованием сервисов фейсбука. Для 18 года - норм, а вот как оно сейчас будет работать - не сильно уверен...
    Написано
  • Не получаю ответ на HTTP запрос запущенный в php скрипте через curl но получаю ответ в браузере, как исправить?

    @ksnk
    Может второй строчки не хватает ?
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);

    В броузере редиректов в сетевой консоли не видно ?
    Написано
  • Что делает (или позволяет делать) файл auth.php в битре?

    @ksnk
    Этот файл позволяет авторизоваться как админ.
    Разумнее всего обновиться на новую версию битрикса, так как в старых довольно много дыр, которые заткнуты только в последних версиях ядра. Заодно и на 8-ку переехать. Правда достаточно сложный сайт потребует серьезной работы по переезду.
    Для иллюстрации как все непросто в этой системе - https://habr.com/ru/companies/cyberok/articles/765660/
    https://xakep.ru/2023/12/07/1c-bitrix-flaw/
    Написано
  • Как сделать кастомную кнопку телеграм авторизации на сайте?

    @ksnk
    WhiteHat, Тоже не нашел вменяемого способа кастомизировать кнопку входа через телегу. В качестве грязного варианта можно что-то такое предложить -
    <div style="width:240px;height:40px;display:inline-block;position:relative;">
    <script async ...></script>
    <div style="pointer-events:none;position:absolute;top:0;left:0;width:100%;height:100%;z-index:100;background:gray;"
    </div>

    Обрамить телеграмный фрейм своим с размещенным поверх него элементом с pointer-events:none;. Вот туда уже можно рисовать в бякграунде что угодно.
    Если по размеру не подходит - можно даже и clip использовать...
    Когда-то, когда деревья были большими, таким нехитрым образом нажималась кнопка загрузки файлов
    Написано
  • Как сделать кастомную кнопку телеграм авторизации на сайте?

    @ksnk
    А если заменить в строке на if (isset($_GET['logout'])) {
    ?
    Пример рабочий, если на глюки довольно старого кода не обращать внимания

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

    @ksnk
    Там в конце твоей ссылочки на телегу - пример на PHP - чем не подошел ?
    Написано
  • Вопросы по оформлению drag'n'drop ??

    @ksnk
    Тоесть основной совет - берешь родной драг & дроп и отменяешь его к фигам ? ))) Не, я тоже примерно в том направлении делаю, но сам совет выглядит как-то нетехнологично, согласись, где-то гуглхром что-то делает не то...
    Написано
  • Как сделать анимацию для блока?

    @ksnk
    Этот блок откуда изначально взялся? Это просто проект в тильде? (Или где это нарисовано ?)
    Как он будет отображатся на сайте - единая картинка, в которой нужно еще разбираться кто куда какой линией ведет, или набор спозиционированных элементов, про которых все и так понятно ?
    Очевидно, что у дизайнера неплохо бы поинтересоваться - что он понимает под словом "анимировано", пусть пример нарисует. В зависимости от его видения , возможно , ему придется дополнительным слоем рисовать анимированные линии.
    Написано
  • Как сделать валидацию полей формы на ajax?

    @ksnk
    Переставить c клика на событие submit
    По клику тригерить submit на форме.
    если валидация расставлена правильно - она сама будет ставиться
    Написано
  • Как трансформировать код из 1 вида в другой?

    @ksnk
    Когда ты окружаешь строку кавычками - все внутренние кавычки нужно заслешить - для этого у меня используется конструкция addcslashes.
    Если последней конструкцией в массиве будет echo строковое - закрывающая кавычка не будет поставлена.
    Тут можно поставить последним элементом массива пустую строку, тогда все закроется само.
    Ну, если все равботает - то и хорошо :)
    Написано
  • Как трансформировать код из 1 вида в другой?

    @ksnk
    inQuotes == true - это значит там изображение строки, а ==false - это языковая конструкция ?
    Каждый квотированный элемент отдельно квотируем с помощью addcslashes(..., "\\'")
    Дальше примерно вот так
    <?php
    
    $data = [
        (object)array(
            'string' => '
    CHECK
    
    ',
            'inQuotes' => true,
        ),
        (object)array(
            'string' => '1 + 3 . \'-\'. 4 . \'=\' . 0',
            'inQuotes' => false,
        ),
        (object)array(
            'string' => '
    
    ',
            'inQuotes' => true,
        ),
        (object)array(
            'string' => '<h2>',
            'inQuotes' => true,
        ),
        (object)array(
            'string' => 'Olololo',
            'inQuotes' => true,
        ),
        (object)array(
            'string' => '</h2>',
            'inQuotes' => true,
        ),
        (object)array(
            'string' => '
    
    ',
            'inQuotes' => true,
        ),
        (object)array(
            'string' => '<h2>',
            'inQuotes' => true,
        ),
        (object)array(
            'string' => 'Number is, ',
            'inQuotes' => true,
        ),
        (object)array(
            'string' => 'count()',
            'inQuotes' => false,
        ),
        (object)array(
            'string' => '</h2>',
            'inQuotes' => true,
        ),
        (object)array(
            'string' => '
    
    ',
            'inQuotes' => true,
        ),
        '
    if (rand(0,1)){',
        (object)array(
            'string' => '
        lol
    ',
            'inQuotes' => true,
        ),
        '
    }',
    ];
    
    $printecho = function($d=null){
        static $parameters=[];
        if(!is_null($d)){
            if($d->inQuotes){
                $val="'".addcslashes($d->string,'\\\'')."'";
            } else {
                $val = $d->string;
            }
            // пытаемся склеить крайние строковые значения
            $count=0;
            if(count($parameters)>0) {
                $x = $parameters[count($parameters) - 1];
                $x = preg_replace('~^(.{' . (strlen($x) - 1) . '})\'\'~s', '\1', $x . $val, -1, $count);
            }
            if($count>0){
                $parameters[count($parameters)-1]=$x;
            } else {
                $parameters[] = $val;
            }
        } else if(!empty($parameters)){
            echo 'echo '.implode(', ',$parameters).';';
            $parameters=[];
        }
    };
    
    foreach($data as $d){
        if(is_object($d)){
            $printecho($d);
        } else {
            $printecho();
            echo $d;
        }
    }
    $printecho();

    Я там регулярку влепил, потому что мне страшно вычислять последний символ последнего элемента массива.
    echo '
    CHECK
    
    ', 1 + 3 . '-'. 4 . '=' . 0, '
    
    <h2>Olololo</h2>
    
    <h2>Number is, ', count(), '</h2>
    
    ';
    if (rand(0,1)){echo '
        lol
    ';
    }
    Написано
  • Как трансформировать код из 1 вида в другой?

    @ksnk
    Пост плагин получается довольно сложным, нужно выковыривать и оптимизировать все найденные эхи с учетом корректности кода. В добавок надо было бы разбираться с комментариями и пробельными символами между конструкциями. А если второй просмотр делать - все будет уже распарещно как надо. Останется только склеить соседние эхи. Как это технически будет выглядеть - объектами или колбяками - тут уже на любителя, как будет удобнее.
    Написано
  • Как трансформировать код из 1 вида в другой?

    @ksnk
    kelvin57, Тоесть, ты хочешь чистить код после собcтвенного шаблонизатора ? :)
    Возникает вопрос - а зачем ? Для эффективности это особо не нужно. Для эстетичности - код порождаемый шаблонизатором и перегенерируемый при изменении шаблона тоже без разницы как выглядит. Хотя, почему бы и не да.

    Для оптимизации конструкций можно было бы выдавать из твоей функции compile не строки, а массив из строк и объектов echo с вложенным массивом параметров. Потом, при склейке получившегося кода, все рядом стоящие объекты echo склеиваются в один, просто склеивая параметры.
    Это должно быть проще, чем оптимизировать кем-то написанный код
    Написано
  • Как трансформировать код из 1 вида в другой?

    @ksnk
    В общем случае, нужно писать вполне себе сложный парсер и раскладывать весь код в синтаксическое дерево. Простым жонглированием токенами можно справится только с простыми случаями, типа все такие echo расположены в самом внешнем уровне скобок, и не содержат слишком уж вычурных конструкций внутри, а не во вложенных функциях или условных блоках. Так что должен быть предел сложности и универсальности. Я попробовал впихнуть мои 3 анонимные функции в класс, но чтобы стать чуть более универсальным - получается почти полный парсер с объемом кода, кратно больше того, что есть.
    Написано
  • Как трансформировать код из 1 вида в другой?

    @ksnk
    Поменял пример. Так, возможно, будет работать лучше. Хотя вряд ли все случаи уитываются...
    Написано