Задать вопрос
Ответы пользователя по тегу PHP
  • Какой параметр php модуля отключает тему формы с сайта?

    Вангую, что письма Вы отправляете через Яндекс.Почту ( или получаете на неё). У Яндекс.Почты, похоже, раньше была такая фишка: они принимали темы письма в нестандартных кодировках. Но недавно это отвалилось.
    Кодируйте тему письма по стандарту, и будет Вам счастье.
    ( PHPMailer, например, умеет кодировать - можете подсмотреть в нём, как надо)
    Ответ написан
    Комментировать
  • Как подставить ссылку на источник при копировании текста?

    Вы неправильно осмыслили задачу, и получился франкенштейн. Одна задача - это вставка ссылки при событии oncopy. Это делается на чистом Javascript, абсолютно не требует PHP, и никакого отношения к WordPress не имеет. Можете эту часть спросить отдельно в хабе Javscript - хотя я подозреваю, что в интернете уже выложена куча решений.
    А вторая задача у Вас уже решена; я только использую хук на другое событие:
    add_action( 'wp_enqueue_scripts', function () {
        if ( !current_user_can( 'manage_options' ) ) {
            wp_enqueue_script('oncopy_addlink', '/path/to/script.js');
        }
    });
    Ответ написан
    5 комментариев
  • Как в PHP создать свою глобальную функцию?

    Как в PHP создать свою функцию и использовать ее без объявления в файлах,

    Создать без объявления - разве что через написание своего расширения. Как функция print_r объявлена где-то в ядре PHP, так и Ваша будет. Но это чрезмерно сложный и неудобный путь; нужно компилировать расширение как минимум под разные ОС.
    Если речь о том, чтобы не вставлять тело функции в каждый файл, то это решается или за счёт единой точки входа, или за счёт единого бутлоадера, что ведёт либо к автозагрузке классов, либо старому доброму require_once.
    Не упопмянули разве что такой экзотичный механизм как auto-prepend-file - но для Вашей задачи, имхо, тут больше минусов, чем плюсов
    Ответ написан
    Комментировать
  • Как сделать чтобы проект удалил папку с самим собой и на её место скопировал другую папку?

    я бы немного изменил Ваше решение:
    1) PHP скрипт загружает архив во временную папку и распаковывает там.
    2) по окончанию распаковки скрипт текущую папку переименовывает, например, в project_old , а временную папку помещает по пути /home/user/project
    3) затем можно запустить шелл скрипт, который удалит /home/user/project_old

    Может быть проблема, если что-то держит открытый файловый дескриптор на /home/user/project
    Тогда можно так:
    1) первый шаг оставляем без измнений
    2) во временной папке запускаем шелл скрипт, который очистит /home/user/project и перекидает туда всё из временной папки
    3) затем из основной папки запускаем скрипт ( хоть шелл, хоть php-шный), который удалит временную папку.
    Ответ написан
    Комментировать
  • Как убрать вывод даты?

    вот это:
    if($date_end=='0000-00-00'){
    			$date_end = date('Y-m-d', strtotime('+1 year'));
    		}

    уберите, а там, где вывод этой даты, уже проверяйте. Вы же не показали кусок кода, в котором дата выводится - может, это совсем в другом месте происходит
    Ответ написан
    6 комментариев
  • Как из строки с путём получить элемент массива?

    <?php
    $string = "k1/k2/k3";
    $arr = [
    	'k1' => [
    		'k2' => [
    			'k3' => [
    				'k4' => 'v'
    				]
    			]
    		]
    ];
    
    $code = 'return $arr["'.str_replace('/', '"]["', $string).'"];';
    $result = eval($code);
    var_dump( $result );

    Конечно, eval() - зло. Но это зло ещё живое!
    Ответ написан
    6 комментариев
  • Как выполнить поиск данных, если в базе данных указан шаблон?

    хранится он в виде W1K253???1???????, W1N253???1???????

    Насколько я вижу, эти шаблоны одинаковы, то есть:
    1. 6 фиксированных символов
    2. 3 произвольных символа
    3. 1 фиксированный символ
    4. 7 произвольных символов

    При этом произвольные символы обозначены знаком "?".
    Тогда можно сделать такой регуляркой:
    <?php
    $requestedVin = 'W1K25312311234567';
    $pattern = preg_replace('/^([A-Z\d]{6})[A-Z\d]{3}([A-Z\d])[A-Z\d]{7}$/', '$1???$2???????', $requestedVin);
    
    $query = "
            SELECT DISTINCT p.ID
            FROM {$wpdb->posts} p
            INNER JOIN {$wpdb->postmeta} pm ON p.ID = pm.post_id
            WHERE p.post_type = 'product'
              AND p.post_status = 'publish'
              AND pm.meta_key = 'vin'
              AND pm.meta_value = %s
            LIMIT 10 OFFSET %d
        ";
    
    $results = $wpdb->get_col($wpdb->prepare($query, $pattern, $offset));
    Ответ написан
    Комментировать
  • Как сформировать список по вложенному массиву рекурсивной функцией?

    извращение с мухлежом:
    <?php
    function list_form(array $items):string
    {
         function inner(array $items):string {
            $result = '';
            foreach ($items as $key => $val) {
                if (is_array($val) ) {
                    $result .= "<li>$key =></li>";
    
                    if (!empty($val)) {
                        $result .= inner($val);
                    }
                } else {
                    $result .= "<li>$key => $val</li>";
                }
            }
            return $result;
        }
    
        return '<ul>'.inner($items).'</ul>';
    }
    echo list_form($arr);
    Ответ написан
    Комментировать
  • Что неправильного в моем коде?

    Как минимум, Вы не вникли в задачу. Я вот в футболе практически не разбираюсь - получив такое задание, я пошёл бы в гугл узнавать, как проводятся матчи в турнирах, когда команда играет на своём поле, а когда - нет. Даже по своим скудным знаниям могу кое-что предположить:
    1) Первый круг: команды надо разбить на пары случайным образом. Это shuffle() + array_chunk() . У Вас этого нет.
    1.1) Учесть ситуацию, когда команд - нечётное количество. Этого тоже нет.
    2) в парах какую-то команду назначить хозяином. Соответственно, в выводе в колонке "Хозяева" должно быть не повторение "Хозяева", "Хозяева", "Хозяева", а имена команд
    3) дальше надо смотреть, на каких условиях проводится второй круг, кто в него попадает, на своём поле играют или на чужом..

    Получается, из этого:
    загружать через форму файл json со списком команд, а потом сводить эти команды в турнируную таблицу с условиями (гость, хозяин), круг 1, круг 2 и еще 5-6 условий, которые влияют на список
    Вы выполнили только "загружать через форму файл json", причём зачем-то этот файл сохраняете на диск, а потом немедленно читаете обратно.

    Сергей Вам справедливо указал на "разделение обязанностей", то бишь первую букву в SOLID - Single Responsibility Principle. Даже если оставить на месте выверт с сохранением на диск, получается:
    1. Repository - хранилище данных
    2. метод контроллера, отвечающий за приём данных именно в виде сабмита формы и сохранение их Repository
    3. Генератор текущего круга
    4. View, который отвечает за генерацию html-разметки круга,
    5. метод контроллера, который может извлечь данные из Repository, скормить их генератору, получить результат и скормить его во View.


    И не факт, что методы из 2 и 5 пункта принадлежат одному классу.
    Ответ написан
    Комментировать
  • Для чего нужен wakeUp в Битрикс?

    если посмотреть код, то видно, что при wakeUp не выполняется никаких обращений к БД.
    Метод в файле bitrix/modules/main/lib/orm/objectify/entityobject.php
    смотрите разницу:
    fill*() - подгружает значение из БД
    set*() - задаёт значение свойства, но при несовпадении со старым значением переводит объект в состояние State::CHANGED
    wakeUp() -создаёт объект с указанными значениями свойств, не переводя объект в изменённое состояние, но только при условии, что в аргументе есть первичный ключ.
    Ответ написан
    Комментировать
  • Вставка изображений в png шаблон по параметрам Wordpress?

    Что-то вроде водяного знака, но только наоборот?

    Почему наоборот? Ровно так же, если я правильно Вас понял.
    Для водяного знака:
    1) берётся исходное изображение,
    2) берётся изображение с водяным знаком,
    3) второе накладывается поверх первого,
    4) результат сохраняется

    В вашем случае:
    0) пользователи отсылают форму с файлом фотографии и какими-то текстовыми полями (например, ФИО)
    1) берётся изображение-шаблон пустого бейджа,
    2) берётся изображение из присланной формы,
    3) второе накладывается поверх первого,
    4) также поверх пишется текст из текстовых полей,
    5) результат сохраняется.

    Это можно сделать средствами GD.
    Ответ написан
    Комментировать
  • Как убрать отступы в коде?

    два варианта:
    1)_ просто всё прижать влево:
    <?php
    $chunk = '
      <url>
      <loc>'.$site.'/look/'.$sitemap['tag'].'</loc>
      <lastmod>'.date('Y-m-d').'T'.date('h:i:s+01:00').'</lastmod>
      <priority>0.8</priority>
      </url>
      ';
    $data[] = preg_replace('/^\s+</m', '<', trim($chunk));


    2) вытянуть всё в строку:
    <?php
    $data[] = preg_replace('/>\s+</ms', '><', trim($chunk));

    Эти регулярки только для данного случая! ( потому что никаких значимых пробелов в сайтмапе быть не должно)

    Несколько замечаний:
    1) показывать код скриншотом неэтично (я про готовый сайтмап). Здесь его можно было запихнуть в тег code (кнопка в панельке) с типом XML
    2) если не используете числовые индексы, то вместо mysql_fetch_array() берите mysql_fetch_assoc()
    3) mysql_* функции - древность, используйте хотя бы mysqli ( как объект, конечно же)
    Ответ написан
    Комментировать
  • Как вытащить данные из формы в дополнительных настройках пользовательского поля?

    Дисклаймер: давно копался в этом ужасе, могу ошибаться.

    есть 2 ситуации:
    1) Вы только добавляете новое поле Вашего типа к какому-то объекту (допустим, USER). Вот когда Вы на форме добавления выбираете "Тип данных ..." и страница обновляется, только тогда срабатывает метод GetSettingsHTML()
    2) Вы уже сохранили поле, оно получило ID. Тогда то, что было задано в дополнительных настройках, будет в массиве по ключу SETTINGS поля. Пример кода:
    <?php
    $arUserField = CUserTypeEntity::GetByID(316); // 316 - это ID поля в моём случае, его тип - "связь с HL блоком"
    var_export($arUserField);
    Ответ написан
  • Как решить проблему с дублированием при ajax?

    а Вы не пробовали убрать этот инлайновый скрипт в script.js шаблона? Я считаю, что у Вас в data прилетает этот javascript, исполняется, и становится 2 обработчика $(document).on('click', '.load_more',..) , на следующей подгрузке три и так далее. Это можно увидеть в DevTools - посмотрев, сколько ajax запросов порождает нажатие кнопки
    Ответ написан
    Комментировать
  • Как правильно использовать python скрипт через PHP backend?

    Если этот python скрипт можно запустить из шелла, то используйте shell_exec(), или backtick operator, или ещё что-нибудь ( в конце страниц онлайн мануала есть секция "See also" )
    Ответ написан
    Комментировать
  • Как найти функцию в файлах проекта?

    ответ при наличии Linux:
    find . -type f -exec grep 'function showMsg2'  '{}' \+

    запускать в корневой папке проекта. Не сработает, если используются магические методы.

    Вариант 2: разобраться с подключением и настройкой xdebug и использовать режим отладки в IDE или трассировку (она идёт в файл, так что IDE не нужна)

    Вариант 3: в main_frame.php
    $temp = _top();
    echo get_class($temp);
    die;

    а затем найти этот класс и копаться в нём.
    Ответ написан
    Комментировать
  • Как обернуть все таблицы с помощью preg_replace?

    Решение Вашего затыка - в модификаторе "s": https://www.php.net/manual/en/reference.pcre.patte...
    Ответ написан
    Комментировать
  • Как из php передать ошибки в js?

    сделайте обработку формы на ajax и это решит Вашу проблему. Потому что поменяется формат взаимодействия:
    1) форма отправляет на бэкенд сообщение - например, массив данных формы,
    2) бэкенд в ответ тоже шлёт сообщение - например, массив, упакованный с помощью json_encode() .
    3) обработчик формы решает, что делать с полученным ответом. Например, если в ответе есть непустое поле error , то вызвать displayNotificationerror( response.error ) . Или что-то ещё сделать.
    Ответ написан
    Комментировать
  • Как подключиться из PHP к memcached с использованием socket?

    попробуйте так:
    <?php
    $memcache_obj = new Memcache;
    $memcache_obj->addServer('unix:///tmp/memcached.sock', 0);

    У меня на Bitrix VA пример из документации работает именно так ( только надо real на float заменить )
    Ответ написан