[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Помогите реализовать замену строк в текстовом файл
Иван
Здравствуйте, многоуважаемые программисты!

1. Есть CRON, как известно он принимает в качестве настройки и задания текстовый файл, в котором в определенном формате написана строка, в которой указан файл (программа, скрипт) который должен выполнится (запуститься, открыться) в указанное время (дату).
2. Есть PHP скрипт, который по определенному условию создает этот файл (если его нет) и записывает туда строки или находит нужную строку и изменяет (удаляет) ее по заданным параметрам.
Таким образом я реализовал автоматическую рассылку прайсов в форматах excel и DBF.

Задача:
Создать текстовый файл настроек для крона я создал, записать строку я записал, а вот когда пытаюсь изменить или удалить строку настроек в файле - не получается. Объясню немного подробнее.
создаю файл с помощью функции fopen(), записываю туда строки с помощью функции fwrite($file, $crontabtext), строка = "#название настройки\n"; строка .= " строка настройки \n"; строка .= "#/название настройки"; . Когда надо изменить или удалить строку настройки в файле настроек крона - использую функцию file(), перебираю массив и ищу нужную строку по "#название настройки". Первое с чем столкнулся это то, что строка в этом массиве хранится не в том виде, в котором я ее записывал, то есть нет в конце строки символа новой строки ("\n"), и более того, строка не заканчивается ни пробелом ни другим понятным мне символом, то есть когда обычным IF ($string == "#название настройки") {} проверяю, то IF возвращает False, пришлось использовать функцию substr($string, 0, 11). Найти строку я нашел. после этого я пытаюсь изменить (удалить) значение следующих (двух) ключей в массиве, где и должна быть сама строка настройки крона и строка "#/название настройки", записываю строку в виде "строка\n", изменил (удалил). После этого пытаюсь опять записать массив в одну строку с помощью функции implode("", $array). В итоге, те строки которые я изменял - нормально записываются (так как я ожидаю, то есть с символом перевода на новую строку в конце строки), а те строки, которые пропустились - записываются не понятно с какими символами в конце строки (то ли \r то ли \n, а может и то и другое), в итоговом файле между строками настроек - пустые строки.
Если я непонятно или запутанно объяснил, пожалуйста, постучите в аську: 484350344.

Если кто знает как с этим справиться, пожалуйста, отозвитесь.



Спустя 19 минут, 54 секунды (11.12.2009 - 13:56) glock18 написал(а):
file эквивалентен explode("\n", file_get_contents()); по ожидаемому результату

Спустя 1 час, 49 минут, 19 секунд (11.12.2009 - 15:45) Иван написал(а):
Из положения вышел.
в старом скрипте я пробовал просто удалить ключ из массива с указанной записью, а потом готовый массив сохранял в строку с помощью функции implode() и перезаписать строку в файл.
Новый скрипт:
foreach ($array_file as $key => $val) {
If (rtrim($val) == "#setting - {$id}") {
unset($array_file[$key]);
unset($array_file[$key+1]);
unset($array_file[$key+2]);
foreach ($array_file as $text) {
$crontabtext .= rtrim($text)."\n";
}
break;
}
}
$file = fopen($file_name, 'w+t');
fwrite($file, $crontabtext);
fclose($file);

Таким образом мне удалось сохранить строку в таком виде, в каком мне нужно smile.gif Спасибо всем, кто выслушал.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.