Скрыть сайт
Показать сайт

PHP - сохранение и загрузка масива в файл.

Иногда залезишь в базу данных какой нибудь системы управления сайтом и видишь в таблицах такого формата запись:
a:1:{s:5:"top_2";a:2:{i:0;s:4:"Рыся";i:1;s:6:"555555";}}

понятно что данные, как то по хитрому уложены, но что это, крутая библиотека, хитроумный код?

Но на самом деле все просто, это стандартные функции кодирования и декодривания масивов в php.

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

Тогда я и начал искать способы сохранения данных. Первым на ум пришли базы данных, но масив оказался не совсем структурированым и дело напоминало танцы с бубном.

Вторая идея была сохранения в файл, раньше я гостевые книги так делал разделяя данные этим символом "|", строки были записями, но в моем случает у разных разделов масива глубина была разная, что то универсальное писать времени не было.

Открыв справочник полистав раздел работы с масивом нашел эти замечательные функции serialize() и unserialize().

Применив знания на своем скрипте, был очень удивлен простоте решения задачи. Ну что бы запомнить написал эту статью.

Прикладываю не большой обучающий код с коментариями:
<?php
//Небольшой масив, например рекорды топ 3х игроков для игры.
$mas = array (
	'top_1' => array (
		'Maksim',
		'777777'		
		),
	'top_2' => array (
		'Рыся',
		'555555'
		),
	'top_3' => array (
		'Lamer_XP',
		'910707'		
		)
	);

// Файл сооздать и лучше сохранить в кодировке UTF-8
// Надеюсь путь к файлу казали правильно, в коде нет проверки через функцию is_file();
// Если файл в ручную не создан, фукнция создаст сама но кодировка будет разная, в зависимость от ОС для Windows 7 это будет Ansi
$file_name='data.txt'; 

// выводим наш эталонный масив для наглядного сравнения
// print_r() - выводит масив со специальным форматированием, для удобного представления масива
echo '<pre>';
print_r($mas);
echo '</pre>';

// serialize() - преобразует масив в строку текста со специальным форматированием
// file_put_contents('file_name.txt','Текст для записи')
// 		Первый параметр путь к файлу вкоторый будем записывать
//		Второй параметр записываемый текст, его мы делаем из масива с помощью функции serialize()
// $bait - в эту фукнция file_put_contents() возращает размер записи в файл

$bait=file_put_contents($file_name,serialize($mas));

// Если взять наш масив, то после serialize($mas) масив создает вот такую строку текста:
// a:3:{s:5:"top_1";a:2:{i:0;s:6:"Maksim";i:1;s:6:"777777";}s:5:"top_2";a:2:{i:0;s:4:"Рыся";i:1;s:6:"555555";}s:5:"top_3";a:2:{i:0;s:8:"Lamer_XP";i:1;s:6:"910707";}}

echo 'Записано '.$bait.' байт в файл '.$file_name.' <br/>';

// file_get_contents() - возращает содержимое файла, в скобка путь к файлу
// unserialize() - раскодирует и превращает в масив, то что закодировало serialize()
// все это присваиваем переменой $input_mas, которая становиться масивом
$input_mas=unserialize(file_get_contents($file_name));

// Выводим второй масив, если все верно он должон совпадать с первым.
// Если файл data.txt был не в UTF-8 формате, он может вывести не тот текст, который ожидается
// Для смены кодировки используйте Notepad ++; (на тойже строке где меню File) Encoding / Convert to UTF-8 
echo '<pre>';
print_r($input_mas);
echo '</pre>';
// 100% Русский код.
// Рыся.РФ - Программирование.
?>
Ps:Кто будет дальше разрабатывать может пригодиться так же фукнции:utf8_encode().

Pss:После в сеть залез посмотреть какие еще есть решения, была одна задумка с помощью print_r конвертировать в строку и сохранять в файл с расширением php, а после его подключать. Но нашел опять же функцию var_export() - она также как print_r выводит масив, только возращает правильный php код масива. Также есть функция var_dump() - почти аналог print_r, только при выводе указывает тип переменной: string,float,bool..
 
444
443
1
Пишем культурно и не нарушая законы РФ.
 

2016 год.