сохранение информации в файл в php - PullRequest
2 голосов
/ 21 марта 2010

Я хочу написать систему отслеживания, и теперь я могу сохранить в моей базе данных Mysql.но сохранение информации о каждом посещаемом ip - огромная работа для mysql

, поэтому я думаю, что если я смогу сохранить информацию в файл, то обсуждение базы данных и ее проблем не ведется.

но для начала: я действительно не знаю, как сохранить в файл таким образом, чтобы я мог читать его без проблем и показывать детали

мне нужно показать информацию обо всех ips в строках после сохранения вфайл

что я должен сделать, чтобы сохранить и показать в порядке строк (таблица)

php / mysql

Ответы [ 5 ]

4 голосов
/ 21 марта 2010

Какой веб-сервер вы используете? Разве в нем нет встроенного журнала, который вы можете использовать?

3 голосов
/ 21 марта 2010

Я не понимаю, почему вы думаете, что чтение и запись этих данных в файл будет быстрее, чем в базе данных?

То, что вы, по сути, говорите, верно, это то, что вы можете написать код, который будет делать именно то, что собирается делать база данных, но лучше?

Я думаю, что большинство людей согласятся со мной: вы увидите серьезные проблемы со скоростью, если НЕ поедете с базой данных на этом.

1 голос
/ 21 марта 2010

Я не знаю, правильно ли я понял ваш вопрос, вы хотите создать файл журнала

Вы всегда можете сделать что-то подобное, если вам действительно нужно сохранить данные в файл

Чтобы записать данные в файл, выполните следующие действия:

$file = 'logfile.txt';

if(file_exist($file)){
    $fh = fopen($file, 'w');
}else{
    $fh = fopen($file, 'a');
}

$data = $dt."\t\t".$ipaddr."\t\t".$hostnm."\t\t".$referer."\t\t".$pg."\t\t".$pagetitle."\t\t".$dbi."\n";

fwrite($fh,$data);

fclose($fh);

. Для чтения данных из файла используйте функцию PHP file , которая сохраняет данные в массив.Затем вы можете искать в массиве соответствующие данные, подробнее об этом здесь http://php.net/manual/en/function.file.php

0 голосов
/ 22 марта 2010

Есть ли какая-то особая причина, по которой вы не можете использовать собственные журналы сервера в качестве хранилища данных?Довольно просто разорвать IIS или Apache access_log и проанализировать информацию, которую вы хотите.

Если вас интересует только определенное подмножество журнала доступа (т. Е. Попадания на реальные страницы иигнорировать images / javascript / css / flash / любые файлы), вы можете анализировать только эти конкретные попадания.Затем возьмите этот сокращенный набор данных и поместите его в MySQL на другом сервере.

После этого база данных станет гораздо лучшим местом для хранения соответствующих данных о попаданиях, поскольку она может выполнять анализ данных для вас и обрабатыватьвся группировка / подсчет без пота.Подумайте о том, что происходит, когда вы загружаете несколько сотен миллионов обращений и пытаетесь отслеживать данные по каждому IP - ваш набор данных в памяти будет расти довольно быстро и может превысить доступную память.Выполнение суммирования / подсчета / усреднения / и т.д ... в базе данных решит все эти проблемы для вас;вам просто нужно позаботиться о том, чтобы потом интерпретировать результаты.

И просто как подсказка по оптимизации: сохраняйте ваши IP-адреса как целое поле без знака, а не как varchar (15).Они на самом деле просто 32-битные числа.Затраты на одноразовый первоначальный перевод ascii-> numeric будут совершенно тривиальны рядом с повторяющимися попаданиями на этапе анализа, когда вы пытаетесь применить маски подсети и еще много чего:

INSERT INTO log (ip) VALUES (INET_ATON('10.0.0.1'));
0 голосов
/ 21 марта 2010

Я всегда храню все данные о пользователях в базе данных. и это работает быстро и не дорого. Есть много способов записи данных в файл, но нужны ли они вам? я думаю нет.

...