PHPкод может выполняться вебсервером (с использованием CGI) или самостоятельно (с помощью CLI). Мы будем использовать версию CLI. Если у вас нет версии CLI, можете инсталлировать ее на системы на основе Debian с помощью файла aptget install php4cli Л Наш первый PHPсценарий будет выглядеть как прежние сценарии Perl:
#!/usr/bin/phpSpattern Sargv[l]; Sfile = fopen("/etc/passwd". "r"); while (Sline = fgets(Sfile, 200)) { if (eregi(Spattern, Sline)) echo Sline:
}
fclose(Sfile): ?>
Благодаря своей первоначальной задаче — дополнению вебстраниц — РНР делает необычное допущение, что содержимое файла по умолчанию интерпретируется как открытый текст, и поэтому PHPкод распознается только при наличии открывающих тегов или . Это напоминает текст стандартного вывода.
Рассмотрим некоторые функции РНР. Функция eregi сравнивает регулярные выражения и является нечувствительной к регистру. Поскольку РНР многое заимствовал от Perl, неудивительно, что в нем есть функция spl it:
Spattern = $argv[l]: Sfile = fopen("/etc/passwd", "r"); while (Sline = fgets($file. 200)) { Sfields = split(":", Sline): if (eregi(Spattern, Sfields[4])) echo Sline:
}
fclose(Sfile); ?>
Но можем ли мы вызвать функцию, подобную getpwent из Perl, чтобы проанализировать файл пароля «вдоль и поперек»? Кажется, РНР не имеет эквивалента
Или php5cli, когда это доступно. — Примеч. авт.
этому, и мы можем использовать способ разбиения, чтобы ограничить поиск значениями uid выше 500:
Spattern = Sargv[l]; Sfile = fopen("/etc/passwd", "r"): while (Sline fgets($file. 200)) { Sfields = splitC:", Sline):
if (eregi(Spattern, Sfields[4]) and Sfields[2] > 500) echo Sline:
}
fclose(Sfile); ?>