
![]() |
Здравствуйте Гость ( Вход | Регистрация ) |
|
|
|
![]() ![]() ![]() |
![]() |
|
![]() Пользователь ![]() ![]() Профиль Группа: Пользователь Сообщений: 81 Пользователь №: 46556 На форуме: Карма: ![]() |
Всем здравия! Есть у меня задача, во всех файлах одной определенной директории заменить строку на новую. Необходимо перебрать все файлы в директории, и в случае если строка, которую нужно заменить (именно строка целиком) в файле есть, то такую строку, целиком же, и заменить на новую. Я пытаюсь сделать это таким способом: $old_cat = $expl[1]; // это нужно заменить Однако, замена не происходит, а вместо этого фатальная ошибка: Fatal error: Uncaught Error: Call to undefined function replace_txt() in C:\Server\data\htdocs\school\control\cats.php:96 Stack trace: #0 {main} thrown in C:\Server\data\htdocs\school\control\cats.php on line 96 Уважаемые профи PHP, помогите мне пожалуйста сделать это правильно. |
![]() Пользователь ![]() ![]() Профиль Группа: Пользователь Сообщений: 54 Пользователь №: 46417 На форуме: Карма: ![]() |
ай, красава, привёл кусок кода с ошибкой из, мягко говоря, другого кода
скорее всего файл с описанием ф-ции replace_txt() не подключен или подключается после вызова ф-ции. |
![]() |
|
![]() Пользователь ![]() ![]() Профиль Группа: Пользователь Сообщений: 81 Пользователь №: 46556 На форуме: Карма: ![]() |
don.bidon, здравствуйте
Ошибка указывает на строку replace_txt($folder_rec , $old_cat , $new_cat); Если ее закомментировать, то ошибка исчезает. Но замены в файлах все равно не происходит. Вот полный код того, как я пытаюсь это сделать: if(isset($_POST['go_red']) && isset($_GET['red']) && array_key_exists($_GET['red'],$cat_id)) <form method="post"> Все файлы находятся в директории db/rec, и эти файлы не имеют расширения, просто файлы. Во всех этих файлах на второй строке прописано название категории, и соответственно категория может различаться. Так вот, если я меняю название категории, то мне необходимо в этой директории найти те файлы, в которых указана та категория, которую необходимо заменить. |
![]() |
|
![]() ![]() Мимо проходил ![]() ![]() ![]() ![]() ![]() ![]() Профиль Группа: Форумчанин ![]() Сообщений: 1466 Пользователь №: 16492 На форуме: Карма: 17 ![]() |
Kuzma92, ошибку, наверное, логично сначала прочитать, а потом предпринимать некие действия по её устранению, а не тупо комментить строку.
|
![]() |
|
![]() Пользователь ![]() ![]() Профиль Группа: Пользователь Сообщений: 81 Пользователь №: 46556 На форуме: Карма: ![]() |
Bezdna, здравствуйте. Ну конечно. Только понимал бы я, как ее устранить.
Вот полный код файла:
|
![]() |
|
![]() Здесь живет ![]() ![]() ![]() ![]() ![]() ![]() Профиль Группа: Форумчанин ![]() Сообщений: 2194 Пользователь №: 28976 На форуме: Карма: 152 ![]() |
вынесите функцию из условия
- в самый конец файла. Если она будет использоваться только в этом файле - в отдельный файл и сделать "include_once 'replace_txt.php';" в начале файла. P.S. Сделайте нормальное форматирование кода. Не понятно где какое условие начинается и заканчивается. По коду кстати тоже много вопросов. Это сообщение отредактировал Kusss - 31.07.2024 - 09:30 |
![]() |
۩
Дата
|
||||||
![]() Пользователь ![]() ![]() Профиль Группа: Пользователь Сообщений: 81 Пользователь №: 46556 На форуме: Карма: ![]() |
Kusss, здравствуйте.
Да, функцию вынес из условия, все работает. Но у меня возник другой вопрос. Дело в том, что замена происходит во всем файле, где встречается то что необходимо заменить. Но мне нужно, чтобы замена происходила только второй строки. Самостоятельно не удается справиться, прошу помощи.
Подскажите, пожалуйста, что имеется ввиду? Комментирование имеется ввиду, или что-то другое? Буду очень благодарен за минимальный пример, поскольку сам часто путаюсь в коде, потому что вероятнее всего, я не знаю правильного способа форматирования кода, который бы легко читался.
Хм... так то код полностью рабочий, все прекрасно работает, никаких ошибок или предупреждений не выдает, поэтому пока что не могу понять что не так с кодом. Но также буду очень благодарен, если укажете на мои ошибки. |
||||||
![]() |
|||
![]() ![]() חשב את עצמו ![]() ![]() ![]() ![]() ![]() ![]() Профиль Журнал Группа: Администратор ![]() Сообщений: 6963 Пользователь №: 1 На форуме: Карма: 145 ![]() |
Значит, разбить файл на массив строк, и заменять только во второй строке массива. Потом собрать обратно и перезаписать. -------------------- Бесплатному сыру в дырки не заглядывают...
|
||
![]() |
|||||
![]() Здесь живет ![]() ![]() ![]() ![]() ![]() ![]() Профиль Группа: Форумчанин ![]() Сообщений: 6460 Пользователь №: 35718 На форуме: Карма: 208 ![]() |
Нормально работающий код, должен выбрасывать исключения, если что-то работает не так как задумано. Отсутвие синтаксических ошибок не означает отсутвие ошибок в алгоритме. Kuzma92, если у вас стоит задача выкопать яму, вы как нормальный человек возьмёте лопату, если большую яму, то экскаватор. Точно так же и в программировании, если есть задача по хранению и обработке информации надо использовать базы данных. Использовать для этого обычные файлы, это как копать яму под фундамент дома зубочисткой.
Есть стандарты написания кода PSR. Но лучше для написания кода использовать PhpStorm эта IDE сама подскажет как надо писать, а иногда даже и что надо писать. -------------------- |
||||
![]() |
[x]
Дата
|
||
![]() Здесь живет ![]() ![]() ![]() ![]() ![]() ![]() Профиль Группа: Форумчанин ![]() Сообщений: 2194 Пользователь №: 28976 На форуме: Карма: 152 ![]() |
Что-то я не догоняю. Можно как-то подробнее, и в какой части кода ? Вот накидал примерно то, что должно быть в вашем коде. Код на работоспособность не проверял, там больше логика и форматирование. Совет, старайтесь давать переменным "говорящие" названия и оставляйте хоть минимум комментариев, чтобы было понятно. К примеру переменную $cat из строки "$cat = file("db/cats.txt");" понятнее назвать к примеру "$file_from_txt" - "Список файлов из текстового файла" <?php |
||
![]() |
۩
Дата
|
![]() Пользователь ![]() ![]() Профиль Группа: Пользователь Сообщений: 81 Пользователь №: 46556 На форуме: Карма: ![]() |
Братцы, спасибо Вам за полезную для меня информацию. Всё просматриваю, изучаю. и пытаюсь понять. Не беру просто тупо копирую и забываю, нет. Всё мотаю, что называется, на ус. Мне с php предстоит еще много работы, поэтому все ваши ответы, комментарии и советы мне только на пользу. Особенно благодарен, когда тыкаете меня носом, если я где-то что-то сморозил чепуху. Ну... ни сразу Москва строилась =)
Kusss, отдельная благодарность вам за то. что разобрали мой код по частям и прокомментировали его, дав полезные советы, примеры. Смотрю, изучаю, стремлюсь быть лучше. Всем Большое человеческое спасибо! |
![]() |
![]() ![]() ![]() |