Проснулся я сегодня утром и сразу вспомнил ваш вопрос и понял, что не очень решение я вам подсказал с заменой. strtr должна быстрее работать, но все равно от количества данных зависит и задач:
теперь самое сложное) имеет цифру "1886153900" возможно опираясь на неё выбрать
О каких цифрах вы говорите?
Если у вас цифры в кавычках, а в других единицах массива больше нет кавычек, то можете опираться на кавычки, или если есть пробел перед кавычкой, то у вас есть ориентир -пробел, кавычка за ней цифра.
Считаю, что нет особенного смысла что-то писать на php для ограничений пока не настроен сервер. Т.е. большую часть защиты нужно выстроить именно средствами сервера. А это iptables, netfilter
По вопросу: можно запоминать в файле в одной строке адрес хоста, в другой счетчик, дату прихода. Сравнивать текущую и и прошлую, если расхождения менее 1 минуты и счетчик при этом больше 10, то заносить адрес во временный файл для блокировки.
Но... все это не нужно, потому что это лишние операции и вычисления.
Ребята, если кому-то будет интересна эта тема, вот мои наработки.
Пока, вроде, получилось. Правда, есть ограничение на генерируемые размещения.
Собственно, заметка о том, как превратить размещения в перестановки.
Все алгоритмы, которые я встречал в Интернете на ключевые слова "перестановки и permutations" мне показались сложными для понимания. Заодно отталкивает использование рекурсии. Работая над другим скриптом, пришел к следующему выводу.
Чтобы получить все перестановки, которые, как известно, равны факториалу n!,
сначала надо получить все размещения с повторениями. Мной был найден такой скрипт и несколько переделан, взят с hashcode, автора не помню.
Мы генерируем все размещения в данном случае 4-х элементов - abcd. Для этого используется цикл до 4 в степени 4 (все размещения с повторением). Данные преобразуются в четверичную систему, дописываются нули слева. Затем с помощью strtr преобразование в abcd. Вот, с первым скриптом все.
А дальше?! Надо удалить из всех размещений каждую строку, в который символ повторяется. Второй скрипт читает из файла f.txt построчно, проверяет количество одного символа в строке и записывает в промежуточный файл только те строки, в которых символ один. Когда цикл переберет все записи на одну букву, подставит другую. Первый цикл - перебора массива - будет иметь столько итераций, сколько всего букв в алфавите, т.е. n. Иначе говоря, есть abcd - 4 буквы, у цикла перебора массива будет 4 итерации.
Промежуточные вычисления записываются в дополнительный файлы, потом файлы удаляются и переименовываются.
Дикая вещь. Если можно перезагружать страницу, но нужно выполнить скрипт по нажатию на ссылку или на кнопку. Правилен ли мой ход рассуждений?
Вводим данные, нажимаем, перезагружаем страницу, сохраняем введенные данные и выполняем единожды вложенный сценарий php. Переменные при этом сохраняются.
Т.е.:
1. сначала загружается код до условия и код после else
2. По нажатию выполняется условие.
3. Включается файл
4. Затем выгружается та же форма с введенными полями.
PakaKepstr Не за что.
В завершение хочу сказать, что поиск и удаление пустых строк - это все еще открытая проблема. Я считаю, что решать ее надо по другому, но пока не знаю, как.
Для себя недавно заметил, что написание псевдокода на русском языке сильно облегчает решение. Т.е. я вообще тоже обычно пишу на бумаге и считаю этот подход верным, но это обычно выглядит не как алгоритм, а как последовательные рассуждения. А далее, мне помогает написание уже алгоритма, но на русском, типа:
Переменная1=тому-то
Цикл (условие )
и т.д.
Итак, у нас три части: До этого скрипта можно сделать.
1. Цикл, который подсчитает количество строк в файле и сохранит в переменной.
2. Вторая часть: создается промежуточный файл и с помощью цикла все данные перегоняются в
него с удалением пустых строк, вероятно, можно применить функцию trim.
После этого этапа происходит переименование файлов, чтобы файл с удаленными строками стал как бы тем, из которого читали, делается три переименования, вводится промежуточный, какой-нибудь old_file.txt
3. Часть Третья. Последний скрипт будет искать совпадения, с последующим переименованием файлов, его можно загнать в функцию или в другой цикл и перезапустить столько раз, сколько значений в переменной, которая хранит значение количества строк. См. первую часть. Если делать чистый рекурсивный вызов, то можно избежать первой части. (Добавление)
cut
В принципе мы избежали рекурсии, но если много записей, то и циклов будет много.
Остается последнее ввести цикл в самое начало, который удалит пустые строки.
В конце я сделал удаление промежуточного файла - unlink. И значение для обрезки строк сейчас стоит 5 символов, обратите внимание на это при тестировании.
(Добавление)
Итог всей эпопеи.
У нас есть файл f.txt. В нем есть пустые и повторяющиеся строки:
Идея заключается в том, чтобы читать из одного файла дважды. Две переменные в цикле, одна "отстает" от другой, обе обрезаются до 10 символов и сравниваются. Запись происходит в другой файл, потом можно переименовать...
Я мог ошибиться, надо тестировать еще. (Добавление)
Собственно вот. И здесь уже можно выбрать, что писать в файл после else, buffer или buffer2,
т.е. либо четные, либо нечетные строки.
Но только пока не учел, что между строк могут быть пустые строки. Т.е если файл такой:
Ты открываешь страницу, скрипт срабатывает, но данных в этих переменных еще нет, поэтому ты получаешь предупреждение, вернее, указание.
В итоге тебе нужна проверка.
Примерно так: