Перейти к содержимому

Обработка файла и сохранение в базу данных

Сохранение в базу данныхСкрипт обрабатывает папку с файлами в которых хранятся данные, в файле данные хранятся в виде json строки.

Скрипт обрабатывает данные json строки и подготавливает запрос к базе данных для сохранения.

Также производится проверка на существование таких данных в базе данных.

Обработанный файл отчищается после успешных запросов к базе данных, строки которые вернули ошибки остаются в файле.

Рассмотрим код полностью:

$CF['table_logs'] = 'al_userlog';
$sql='CREATE TABLE IF NOT EXISTS `'.$CF['table_logs'].'` (`id` int(11) NOT NULL AUTO_INCREMENT,`data_c` int(11) NOT NULL,`host` varchar(255) NOT NULL,`request` text NOT NULL,`cookie` text NOT NULL,`session` text NOT NULL,`hxff` text NOT NULL,`hxri` text NOT NULL,`ra` text NOT NULL,`hua` text NOT NULL,`hr` text NOT NULL,`ru` text NOT NULL,`md5` text NOT NULL,PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;'; $rez=$DB->QUR($sql);
$path='idir'; $m1=array("!\r\n","\r\n\r\n"); $m2=array('',"\r\n");
if(file_exists($path)){
	$files=scan_dir($path);
	foreach($files as $k => $v){
		$file=$path.'/'.$v;  $tmp1='';
		$host = str_replace('.txt','',$v);
		$t=file_get_contents($file);$t=str_replace($m1,$m2,$t);file_put_contents($file,$t);
		$t=file($file);
		
		foreach($t as $k1 => $v1){
			$arr=json_decode($v1,1);
			$request = $arr['r'];
			$cookie = $arr['c'];
			$session = $arr['e'];
			$server = json_decode($arr['s'],1);
			$hxff = $server['HTTP_X_FORWARDED_FOR'];
			$hxri = $server['HTTP_X_REAL_IP'];
			$ra = $server['REMOTE_ADDR'];
			$hua = $server['HTTP_USER_AGENT'];
			$hr = $server['HTTP_REFERER'];
			$ru = $server['REDIRECT_URL'];
			$md5=md5($host.$request.$session.$cookie.$arr['s']);
			$sql = 'SELECT id FROM '.$CF['table_logs'].' WHERE md5="'.$md5.'" LIMIT 1';
			$rez = $DB->QUR_SEL($sql);
			if(!$rez['err']&&!$rez['kol']){
				$sql = 'INSERT INTO '.$CF['table_logs'].' VALUES (0,'.mktime().',"'.addslashes($host).'","'.addslashes($request).'","'.addslashes($cookie).'","'.addslashes($session).'","'.addslashes($hxff).'","'.addslashes($hxri).'","'.addslashes($ra).'","'.addslashes($hua).'","'.addslashes($hr).'","'.addslashes($ru).'","'.addslashes($md5).'")';
				$rez=$DB->QUR($sql);
				if($rez['err']) $tmp1.=$v1;
			}
		}
		file_put_contents($file,$tmp1);
	}
}else echo 'нет папки для данных';

Разберем по частям:

$sql='CREATE TABLE IF NOT EXISTS `'.$CF['table_logs'].'` (`id` int(11) NOT NULL AUTO_INCREMENT,`data_c` int(11) NOT NULL,`host` varchar(255) NOT NULL,`request` text NOT NULL,`cookie` text NOT NULL,`session` text NOT NULL,`hxff` text NOT NULL,`hxri` text NOT NULL,`ra` text NOT NULL,`hua` text NOT NULL,`hr` text NOT NULL,`ru` text NOT NULL,`md5` text NOT NULL,PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;'; $rez=$DB->QUR($sql);

Пару строк которые создают таблицу ЕСЛИ ЕЕ НЕТ в базе данных, если есть не создает. Здесь используется класс для работы с базой данных. QUR это тот же самый mysql_query(), возвращает результат в переменную rez[‘err’] — 0 если нет ошибок и 1 если есть ошибка.

$files=scan_dir($path);

function scan_dir($dir){
	$out=array();
	$files = scandir($dir);
	foreach($files as $key => $val)if($val!='.'&&$val!='..'){
		$out[] = $val;
	}
	return $out;
}

сканируем директорию $path на наличие файлов и возвращаем массив с именами файлов.

foreach($files as $k => $v){
	$file=$path.'/'.$v;  $tmp1='';
	$host = str_replace('.txt','',$v);
	$t=file_get_contents($file);$t=str_replace($m1,$m2,$t);file_put_contents($file,$t);
	$t=file($file);

Обходим весь массив с файлами, создаем переменную $host из имени файла, путем удаления .txt. Также обрабатываем файл и удаляем в файле разрывы, «!\r\n», созданные почтовым сервером, и пустые строки «\r\n\r\n».

В переменную $t переносим содержимое файла, получаем массив в котором каждый элемент это строка из файла.

foreach($t as $k1 => $v1){
	$arr=json_decode($v1,1);
	$request = $arr['r'];
	$cookie = $arr['c'];
	$session = $arr['e'];
	$server = json_decode($arr['s'],1);
	$hxff = $server['HTTP_X_FORWARDED_FOR'];
	$hxri = $server['HTTP_X_REAL_IP'];
	$ra = $server['REMOTE_ADDR'];
	$hua = $server['HTTP_USER_AGENT'];
	$hr = $server['HTTP_REFERER'];
	$ru = $server['REDIRECT_URL'];
	$md5=md5($host.$request.$session.$cookie.$arr['s']);

Обходим массив с строками и разбираем json строку в массив, json_decode($v1,1) если не указывать 1 тогда получится объект.

$server = json_decode($arr[‘s’],1); Еще раз разбираем элемент массива в новый массив, здесь хранится данные переменной SERVER.

Функция md5 формирует уникальную строку для наших данных, используем ее для поиска в таблицу таких же данных.

Сначала проверяем, нет ли в таблице таких же данных и если нет вставляем данные в таблицу. Если при вставке произошла ошибка тогда сохраняем строку в переменную $tmp1 и в итоге ее записываем в обрабатываемый файл, если все хорошо то в файл мы запишем пустую переменную, тем самым обнулив файл.

Читайте из этой же серии

1 часть Скрипт сбора статистики о пользователях

2 часть Получение email в PHP

3 часть Обработка файла и сохранение в базу данных

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.