У вас есть пара вариантов, но ни один из них не является «простым»:
a) exec()
и используйте системную команду grep
, которая может сообщать номера строк:
exec("grep -n 'your pattern here' file.txt", $output);`
b) добавьте в файл, используя file_get_contents()
, разделите его на массив строк, затем используйте preg_grep()
, чтобы найти подходящие строки.
$dat = file_get_contents('file.txt');
$lines = explode($dat, "\n");
$matches = preg_grep('/your pattern here/', $lines);
c) Считайте файл в формате строкичанки, сохраняйте счетчик бегущих строк и сопоставляйте шаблон с каждой строкой.
$fh = fopen('file.txt', 'rb');
$line = 1;
while ($line = fgets($fh)) {
if (preg_match('/your pattern here/', $line)) {
... whatever you need to do with matching lines ...
}
$line++;
}
У каждого есть свои взлеты и падения
a) Вы вызываете внешнюю программу, и есливаш шаблон содержит любые предоставленные пользователем данные, вы потенциально открыты для оболочки, эквивалентной атаке SQL-инъекции.С положительной стороны, вам не нужно придираться ко всему файлу, и вы сэкономите немного на накладных расходах памяти.
b) Вы защищены от атак с использованием инъекций оболочки, но при этом вы должны глотать все содержимоефайл.Если ваш файл большой, вы, вероятно, исчерпаете доступную память.
c) Вы вызываете регулярное выражение для каждой строки, что может привести к значительным накладным расходам, если вы имеете дело с большим количеством строк.