Strict Standards: Resource ID#18 used as offset, casting to integer (18) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401

Strict Standards: Resource ID#23 used as offset, casting to integer (23) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401

Strict Standards: Resource ID#25 used as offset, casting to integer (25) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401

Strict Standards: Resource ID#26 used as offset, casting to integer (26) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401
ТвойWeb :: Технический вопрос
ТвойWeb ТвойWeb
Качественный Европейский хостинг
Форум для чайников
 Чат на форуме      Помощь      Поиск      Пользователи


 Страниц (1): [1] 

> Описание: способ сохранения (чтения) переменных из текстовых файлов БД
SKIF
Отправлено: 22 Апреля, 2006 - 03:52:32
Post Id



Advanced Member


Покинул форум
Сообщений всего: 339
Дата рег-ции: Март 2005  
Откуда: nnov

Карма 3




Хотелось бы в общих чертах понять какой алгоритм сохранения (и чтения из них) массивов в текстовых файлах и ньюансы. (т.е. каким образом скрипт получает из текстового файла exBB массив переменных).

Возьмем, к примеру, файлы папки members.


используется там функция explode() или нет?


pps. хотелось бы конечно побольше про тонкости этого механизма, если есть. Очевидные моменты я и сам из кода увижу.
 
 Top
TvoyWeb Администратор
Отправлено: 22 Апреля, 2006 - 04:15:14
Post Id



Главный здесь


Покинул форум
Сообщений всего: 7072
Дата рег-ции: Нояб. 2003  
Откуда: Tashkent Uz

Карма 52




SKIF
Я где-то уже описывал этот механизм. В файлы сохраняются строка получаемая в результате серилизации ( http://php.net/serialize), а когда читаются данные то строка превращается обратно в массив функцией unserialize().
Все очень просто.
 
 Top
SKIF
Отправлено: 22 Апреля, 2006 - 04:26:48
Post Id



Advanced Member


Покинул форум
Сообщений всего: 339
Дата рег-ции: Март 2005  
Откуда: nnov

Карма 3




а вот в CMS LIMBO это делается примерно так
CODE:

foreach ($vars as $i){
fwrite($file, $i."\n");
}


соответственно читаются в массив вызовом ф-ии file().... Единственный минус это то, что перед сохранением приходится удалять все входы "\n" .

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

ps. если глупость написал, прошу ничем не кидаться =))) просто думаю, что лучше использовать для себя или 1 или 2...
 
 Top
TvoyWeb Администратор
Отправлено: 22 Апреля, 2006 - 06:10:58
Post Id



Главный здесь


Покинул форум
Сообщений всего: 7072
Дата рег-ции: Нояб. 2003  
Откуда: Tashkent Uz

Карма 52




SKIF пишет:
Единственный минус это то, что перед сохранением приходится удалять все входы "\n" .

Это не единственный минус.
Теперь смотри у тебя есть массив:
CODE:
Array
(
[cat] => Сайтостроительство
[cid] => 1
[name] => Общие вопросы
[posts] => 2538
[top] => 294
[pos] => 101
[sts] => all
[cod] => 1
[up] => 102400
)

Чтобы записать его в файл потребуется только функция serialize, в результатом которой будет строка:
CODE:
a:9:{s:7:"cat";s:18:"Сайтостроительство";s:5:"cid";i:1;s:4:"name";s:13:"Общие вопросы";s:5:"posts";i:2538;s:6:"top";i:294;s:8:"pos";i:101;s:6:"sts";s:3:"all";s:5:"cod";b:1;s:6:"up";i:102400;}

Чтобы вернуть массив достаточно сделать unserialize, и мы можем обращаться к элементам массива по их именнованным ключам. Также эта функция позволяет сохранять вложенные масивы (многомерные) чего нельзя добиться используя file в купе с другими функциями.

В варианте с file, ты должен все эти данные разграничить неким символом функцией implode (или подобной), в последствии, после обратного чтения из файла и разбиения строки на элементы массива (explode) ты сможешь обращаться к элементам такого массива только по их числовым ключам.
Плюс serialize еще и в том что он сохраняет типы переменных. Если ты объявил переменную в FALSE, то после unserialize эта переменная будет именно FALSE, а не 0. То есть сохранится ее тип (boolean).

Есть конечно и минусы. Плюс на больших файлах скорость работы функции замедляется.

ИМХО file годится для небольших данных.
 
 Top
SKIF
Отправлено: 22 Апреля, 2006 - 07:18:42
Post Id



Advanced Member


Покинул форум
Сообщений всего: 339
Дата рег-ции: Март 2005  
Откуда: nnov

Карма 3




классно, спасибо за консультацию =)
 
 Top
TvoyWeb Администратор
Отправлено: 22 Апреля, 2006 - 08:53:39
Post Id



Главный здесь


Покинул форум
Сообщений всего: 7072
Дата рег-ции: Нояб. 2003  
Откуда: Tashkent Uz

Карма 52




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

Но я еще выясню, может это как то зависит от настроек сервака.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 2 (гостей: 2, зарегистрированных: 0, скрытых: 0)
« ExBB - лучший форум на файлах »


Все гости форума могут просматривать этот раздел.
Только администраторы и модераторы могут создавать новые темы в этом разделе.
Только администраторы и модераторы могут отвечать на сообщения в этом разделе.



Форум на AlfaSpace.NET


Powered by ExBB
ExBB FM 1.0 RC1 by TvoyWeb.ru
InvisionExBB Style converted by Markus®

[Script Execution time: 0.058]     [ Gzipped ]



Notice: ob_end_flush(): failed to send buffer of ob_gzhandler (1) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/page_tail.php on line 33