Это довольно просто, если вы хотите прочитать формат Netscape (например, curl сохраняет куки в COOKIEJAR в этом формате).
Первый пример (здесь добавляются каналы и номера строк, которые не встречаются в реальном файле):
01 | # Netscape HTTP Cookie File
02 | # http://curl.haxx.se/rfc/cookie_spec.html
03 | # This file was generated by libcurl! Edit at your own risk.
04 |
05 | .google.com TRUE / FALSE 1305843382 cookiename the value
06 | .yahoo.com TRUE / FALSE 1305843382 another_cookie it's value
07 |
Как видите:
- У нас могут быть строки комментариев, обозначенные
#
в качестве первого символа.
- У нас могут быть пустые строки
И затем каждая из жирных линий содержит по 7 жетонов, разделенных символом табуляции (\t
).
Они определены здесь :
- домен - домен, который создал И, который может читать переменную.
- флаг - значение ИСТИНА / ЛОЖЬ, указывающее, могут ли все машины в данном домене иметь доступ к переменной. Это значение устанавливается браузером автоматически в зависимости от значения, установленного для домена.
- путь - путь в домене, для которого допустима переменная.
- secure - значение TRUE / FALSE, указывающее, требуется ли для доступа к переменной безопасное соединение с доменом.
- expiration - время UNIX, на которое истекает переменная. Время UNIX определяется как количество секунд с 1 января 1970 года 00:00:00 по Гринвичу.
- name - Имя переменной.
- значение - значение переменной.
Итак, теперь давайте сделаем наш анализатор cookie-файлов.
// read the file
$lines = file('path/to/cookies.txt');
// var to hold output
$trows = '';
// iterate over lines
foreach($lines as $line) {
// we only care for valid cookie def lines
if($line[0] != '#' && substr_count($line, "\t") == 6) {
// get tokens in an array
$tokens = explode("\t", $line);
// trim the tokens
$tokens = array_map('trim', $tokens);
// let's convert the expiration to something readable
$tokens[4] = date('Y-m-d h:i:s', $tokens[4]);
// we can do different things with the tokens, here we build a table row
$trows .= '<tr></td>' . implode('</td><td>', $tokens) . '</td></tr>' . PHP_EOL;
// another option, make arrays to do things with later,
// we'd have to define the arrays beforehand to use this
// $domains[] = $tokens[0];
// flags[] = $tokens[1];
// and so on, and so forth
}
}
// complete table and send output
// not very useful as it is almost like the original data, but then ...
echo '<table>'.PHP_EOL.'<tbody>'.PHP_EOL.$trows.'</tbody>'.PHP_EOL.'</table>';
Наконец, здесь - это демо.