'w' - Открывает файл только для записи; помещает указатель в начало файла и обрезает файл до нулевой длины. Если файл не существует - пытается его создать.
'a' - Открывает файл только для записи; помещает указатель в конец файла. Если файл не существует - пытается его создать. В данном режиме функция fseek() не применима, записи всегда добавляются в конец.
По саоему опыту, советую Вам в своих реальных проект не использовать неактуальные версии PHP.
Переделки обходятся не дешево и многие не хотят за них платить.
Полностью с Вами согласен. Но.
То, что я делаю - это больше для себя. Скажем так - практические работы по самообразованию.
За этот проект мне никто ничего не платит, а плачу я сам за сервер.
Ну и самое главное, перевести проект даже на версию выше 5.6 - проблема из-за необходимости переписывать десятки (может даже сотни) обращений к базе из разных файлов. Вручную - это просто не стоит затраченного времени.
Как-то попробовал изменить файлы с mysql скриптом - легло всё
Больше и не пытаюсь.
Добрый день!
Верно, регуляркой не нужно (более дорогая), только вот функция preg_replace_callback это тоже регулярка. Попробуйте так (проверял на PHP 8.1) Удачи!
https://www.php.net/manual/en/fu...ace-callback.php в замыкании делишь строку по пробелу, регуляркой не нужно (более дорогая), достаточно explode и потом получив случайное число от 0 до количества элементов в коллекции вытаскиваешь этот рандомный элемент и возвращаешь в строку
preg_replace_callback, действительно интересная функция. Но по ней что-то совсем мало информации, чтобы разобраться. Максимум, что у меня с ней получилось - это выбирать цвет.
Что-то я никак не могу понять, как правильно её применять.
Если можно - пожалуйста, приведите примеры, применительно к моему вопросу.
Для начала, чтобы было понятно, что мне нужно - покажу, что я сделал.
Допустим, имеется строка: Железнодорожный семафор имеет {красный|жёлтый|зелёный|синий|белый} свет свечения.
Мне нужно получить строку с одним рандомным цветом, либо исходную строку, если в ней нет вариантов выбора.
Я делаю так:
Железнодорожный семафор имеет жёлтый свет свечения.
А теперь мне нужно сделать выбор из двух (или более) массивов: Железнодорожный {светофор|семафор} имеет {красный|жёлтый|зелёный|синий|белый} свет свечения.
Как определить какой элемент массива сам является массивом, чтобы произвести из него выбор?
Как обратно собрать строку, если число вариантов выбора и, соответственно, элементов массива может быть любым?
Подскажите, пожалуйста, как сделать такой выбор при тех же условиях?
И, вообще, я правильно решаю эту задачу?
Задача - выдать предупреждение, если строка $umsg написана полностью прописными буквами.
Если в строке прописных букв меньше, чем их разрешённое количество, находятся цифры, или хоть одна строчная буква - предупреждения нет.
Я решил это таким способом:
Вроде всё красиво. Но, если пишут просто знаки препинания или с пробелами, например А..... - условие срабатывает.
И ещё какой-то глюк с цифрами тоже вылезал. Пришлось заменить
На основе вышеприведённых решений задумал встроить "угадайку" в бота.
Задача:
1. Боту приходит фраза с ключевым словом из массива $chislo.
2. Бот переходит в режим ожидания ввода цифр.
3. Если цифры в введённой фразе есть - обрабатывает их. Если нет - обрабатывает фразу, как обычно.
4. Если сразу есть совпадение - поздравляет.
5. Если нет совпадения - в цикле проверяет каждый последующий ввод, пока цифра не совпадёт, либо её вообще не будет в сообщении.
6. При совпадении - выходит из цикла и выводит поздравление.
Но не пойму, как сделать, чтобы после неправильного ответа ожидалась новая переменная $umsg и цикл повторялся до выполнения условия.
Или может лучше записывать загаданное число в файл, а после правильного ответа - удалять его? А пока файл существует, сравнивать вводимое значение и записанное?
2 Vladimir KheifetsВстречал я подобные способы реализации. Но везде пишут - использовать только в обучающих программах! eval(), штука жутко нехорошая... А у меня кто угодно боту написать может.
2 don.bidon Спасибо за помощь!
Пока я пытался решить проблему "в лоб", в голову пришло решение "в обход" - если мы получаем пару, или тройку массивов одновременно, просто переспрашиваем: "Из твоего вопроса я никак не могу понять, что ты хочешь прочитать - анекдот, афоризм, или цитату?"
2 Vladimir Kheifets Да. Вы угадали. Я пишу чат-бота. Даже не пишу, а модернизирую готовый плагин. На ИИ эта работа явно не тянет. И тех функций, что ему вкладываю - вполне достаточно, чтобы развлекать посетителей моего чата. То, что я пишу, даже в таком виде круче того, что было изначально, когда ответы на каждую реплику выбирались через if-else-strpos
Если интересно, все мои доработки бота описаны тут: https://netsearch[dot]club/threads/j[dot][dot][dot]page-2#post-9229
Да. Моих знаний php явно не достаточно, чтобы писать что-то сложнее массивов с ключевыми словами. Я ведь не программист, а вот так и изучаю php, модернизируя свой чат.
Кстати, что вы можете сказать по поводу решения ботом задач по арифметике?
$umsg='Процитируй мне смешное знаменитое изречение';
Получаю сразу все ключи: anekdotaforszmcitata
Подскажите, как мне сделать, чтобы срабатывало только на одно ключевое слово?
И оцените, пожалуйста сам код. Может его можно улучшить?
И как этот массив правильно записать коротким синтаксисом? Что-то я в этих квадратных скобках запутался. Одни ошибки получаются...
Vladimir Kheifets спасибо огромнейшее за помощь!
Жаль, что не могу ещё плюсики ставить ((
Код красивый получился, не спорю. Но одно НО...
Файл common_body_start.php нельзя кардинально изменять. Он десятки раз подключается во всех php файлах. И везде нормально, через include.
И только в voc.php встраивается вот таким вот способом в JavaScript.
Похоже, нужно возвращать первоначальный вариант и парить мозги никому (