preg_replace_callback

Emiles

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

Valick

Новичок
Лучше всего читать файл построчно, производить замену и записывать результат в новый файл.
Начните с изучения функци для работы с файлами https://www.php.net/manual/ru/function.fopen.php
Напишите скрипт, который будет открывать файл 1.txt для чтения и файл 1_replace.txt для записи (если такого файла ещё не существует.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Как часто предпогалается подобная операция?
Что за файлы, откуда они берутся?
 

Emiles

Новичок
Как часто предпогалается подобная операция?
Что за файлы, откуда они берутся?
1. Переодически, поэтому сделаю cron под него
2. Файл только 1, в нем системные данные, и его нужно переодически обновлять.
Делать все это руками не сложно, занимает меньше минуты, но регулярно делать это совсем неудобно, поэтому и пробую найти решение.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
2. Имелось в вилу как формируется файл, если там выгрузка откуда-то типа БД, то можно сделать проще. Тем более если доступен крон - сделать замену через тот же sed будет быстрее.
 

Emiles

Новичок
Вот такое решение нашлось:
PHP:
<?php
$data_to_write = "abc";
$file_path = "public_html/1.txt";
$file_handle = fopen($file_path, 'w');
fwrite($file_handle, $data_to_write);
fclose($file_handle);
?>

<?php
$data_to_write = date('dmy');
$file_path = "public_html/1.txt";
$file_handle = fopen($file_path, 'a');
fwrite($file_handle, $data_to_write);
fclose($file_handle);
?>

<?php
$data_to_write = "xyz";
$file_path = "public_html/1.txt";
$file_handle = fopen($file_path, 'a');
fwrite($file_handle, $data_to_write);
fclose($file_handle);
?>
либо вариант покороче:

PHP:
<?php
$str = "abc".date("dmy")."xyz" ;
$file_path = "public_html/1.txt";
$file_handle = fopen($file_path, 'w');
fwrite($file_handle, $str);
fclose($file_handle);
?>
В решении, которое нашлось - результат в итоге выглядит так:
abc"текущая дата"xyz - это подходит для решения задачи.
Вместо замены текста внутри создается текст по новой с его постоянным содержимым, но только дата внутри этого текста меняется на актуальную.
Добавлено все это в cron, поэтому "текущая дата" внутри обновляется при необходимости (после запуска cron).
Задача решена, спасибо.
 
Последнее редактирование:
Сверху