За последние 24 часа нас посетили 22617 программистов и 1290 роботов. Сейчас ищут 694 программиста ...

preg_replace_callback

Тема в разделе "PHP для новичков", создана пользователем Emiles, 17 ноя 2023.

  1. Emiles

    Emiles Новичок

    С нами с:
    17 ноя 2023
    Сообщения:
    4
    Симпатии:
    0
    Здравствуйте.
    Знаю что делается довольно просто, скорее всего все с помощью preg_replace_callback, но тем не менее, пытаюсь разобраться.
    Что нужно: в определенном файле на сервере (например, в файле 1.txt) среди всего текста происходит поиск выражения (по формату даты), например "любые_символы_ДАТА_любые символы".
    Формат самой даты такой: 161123
    После того как это выражение найдено в этом файле - в нем и именно в этом выражении происходит замена данных, а именно на сегодняшнюю актуальную дату в таком же формате: 171123
    В итоге получается, что был разного рода текст, среди которого было выражение "любые_символы_161123_любые символы",
    и стало так: все прежнее осталось, кроме выражения "любые_символы_161123_любые символы", которое было заменено на "любые_символы_171123_любые символы"
     
  2. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.027
    Симпатии:
    1.220
    Адрес:
    там-сям
    В чём вопрос? У тебя в тексте только повествовательное наклонение. :)

    На всякий случай: заменить конкретный фрагмент текста на другой можно, например, функцией str_replace()
    Всегда начинай с официальной справки: https://php.net/str_replace
     
  3. Emiles

    Emiles Новичок

    С нами с:
    17 ноя 2023
    Сообщения:
    4
    Симпатии:
    0
    Вот такое решение нашлось:
    PHP:
    1. <?php
    2. $data_to_write = "abc";
    3. $file_path = "public_html/1.txt";
    4. $file_handle = fopen($file_path, 'w');
    5. fwrite($file_handle, $data_to_write);
    6. fclose($file_handle);
    7. ?>
    8. <?php
    9. $data_to_write = date('dmy');
    10. $file_path = "public_html/1.txt";
    11. $file_handle = fopen($file_path, 'a');
    12. fwrite($file_handle, $data_to_write);
    13. fclose($file_handle);
    14. ?>
    15. <?php
    16. $data_to_write = "xyz" . $_POST['subject'];
    17. $file_path = "public_html/1.txt";
    18. $file_handle = fopen($file_path, 'a');
    19. fwrite($file_handle, $data_to_write);
    20. fclose($file_handle);
    21. ?>
     
    #3 Emiles, 22 ноя 2023
    Последнее редактирование модератором: 23 ноя 2023
  4. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.027
    Симпатии:
    1.220
    Адрес:
    там-сям
    @Emiles пожалуйста оформляй код в ббкоды [ code ] или [ php ]. один раз я сделал это за тебя, видишь насколько стало лучше?!
     
    Emiles нравится это.
  5. Vladimir Kheifets

    Vladimir Kheifets Новичок

    С нами с:
    23 сен 2023
    Сообщения:
    45
    Симпатии:
    9
    Адрес:
    Бавария, Германия
    Добрый день!

    В начале Вы опубликовали сообщение "preg_replace_callback" о том, что в тексте необходимо заменить
    "любые_символы_ДАТА_любые символы"
    Видимо, в нём под "Формат самой даты такой: 161123" подразумевается пример даты в формате "dmy"

    Затем Вы показали решение, которое нашлось.
    Однако, Ваш скрипт просто записывает файл с текстом и текущей датой.
    Уточните, пожалуйста, есть ли у Вас вопросы по этой теме.

    Удачи!
     
    Emiles нравится это.
  6. Emiles

    Emiles Новичок

    С нами с:
    17 ноя 2023
    Сообщения:
    4
    Симпатии:
    0
    В решении, которое нашлось - результат в итоге выглядит так:
    abc"текущая дата"xyz - это подходит для решения задачи.
    Вместо замены текста внутри создается текст по новой с его постоянным содержимым, но только дата внутри этого текста меняется на актуальную.
    Добавлено все это в cron, поэтому "текущая дата" внутри обновляется при необходимости (после запуска cron).
    Данная задача решена, спасибо.
    --- Добавлено ---
    Вижу, ок, хорошо.
    Спасибо)
     
    #6 Emiles, 24 ноя 2023
    Последнее редактирование: 24 ноя 2023
  7. Vladimir Kheifets

    Vladimir Kheifets Новичок

    С нами с:
    23 сен 2023
    Сообщения:
    45
    Симпатии:
    9
    Адрес:
    Бавария, Германия
    Интересное решение. Вы запускаете скрипт из cron и в нём записываете в файл abc"текущая дата"xyz
    Затем вызывается скрипт, который читает этот файл.
    Почему нельзя обойтись без чтения файла, а просто создать в этом скрипте строку?
    PHP:
    1. $str = "abc".date("dmy")."xyz" ;
     
    #7 Vladimir Kheifets, 24 ноя 2023
    Последнее редактирование: 24 ноя 2023
    Emiles нравится это.
  8. Emiles

    Emiles Новичок

    С нами с:
    17 ноя 2023
    Сообщения:
    4
    Симпатии:
    0
    Да, и так тоже было. Так даже проще, спасибо.
    Изначально была задумка разделить процессы, так как там массивы неизменных текстов довольно большие, поэтому было так оформлено для наглядности.
    В итоге оставлено так:

    PHP:
    1. <?php
    2. $str = "abc".date("dmy")."xyz" ;
    3. $file_path = "public_html/1.txt";
    4. $file_handle = fopen($file_path, 'w');
    5. fwrite($file_handle, $str);
    6. fclose($file_handle);
    7. ?>
    Или вы про то, что можно еще оптимизировать код?
     
    #8 Emiles, 24 ноя 2023
    Последнее редактирование: 24 ноя 2023
  9. Vladimir Kheifets

    Vladimir Kheifets Новичок

    С нами с:
    23 сен 2023
    Сообщения:
    45
    Симпатии:
    9
    Адрес:
    Бавария, Германия
     
  10. Vladimir Kheifets

    Vladimir Kheifets Новичок

    С нами с:
    23 сен 2023
    Сообщения:
    45
    Симпатии:
    9
    Адрес:
    Бавария, Германия
    Подозреваю, что CRON тут не нужен.
    На входе у Вас один длинный текст, к нему добавляется текущая дата и после неё добавляется другой длинный текст.
    Эти тексты постоянные и меняется только дата?
    Что происходит дальше с этой строкой и где она обрабатывается?
    Если не секрет, напишите немного подробнее про Ваши процессы.
    Может быть тогда удасться оптмизировать код