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

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

Strict Standards: Resource ID#37 used as offset, casting to integer (37) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401
ТвойWeb :: Версия для печати :: Сохранение и загрузка масивов...
ТвойWeb » WebMaster класс » PHP/Perl » Сохранение и загрузка масивов...

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

1. Ray Wen - 06 Февраля, 2005 - 08:57:58 - перейти к сообщению
Как лучьше всего реализовать сохранение и последующую загрузку и использование масива? Вроде того что на ExBB, но дабы не тырить скрипты и не посегать на авторские права, может кто нибудь подсказать какой нибудь способ или принцип работы?
2. TvoyWeb - 06 Февраля, 2005 - 15:16:50 - перейти к сообщению
Ray Wen пишет:
не тырить скрипты и не посегать на авторские права,

Это здесь не причем. Есть некоторые вещи, которые по другому никак не сделаешь.
Если массив многомерный, то ИМХО лучше хранить в сериализованном виде.
3. ita - 06 Февраля, 2005 - 15:27:09 - перейти к сообщению
можно так..
сохранение:
CODE:
$array=array();//твой массив
$fp=fopen("filename","w");
fwrite($fp,join("\r\n",$array));
fclose($fp);
чтение:
CODE:

$array=file("filename");

ток перед этим желательно каждый элемент array через trim() пропустить, вернее обязательно если не уверен, что в элементах может пристуствовать символ окончания строки в конце какого-то элемента массива
4. TvoyWeb - 06 Февраля, 2005 - 16:01:33 - перейти к сообщению
ita
Этот вариант не годится. А если массив ассоциативный ?
Есть еще один вариант. Там что то с экспортом вроде связано. Вспомню напишу.
5. ita - 06 Февраля, 2005 - 17:00:32 - перейти к сообщению
TvoyWeb
а если НЕ ассоциативный? не уточнялось о каком массиве идет речь.
для ассоциативного:
$str = print_r($array);
$str в файл, файл читаем, регекспами разбираем. (не делать так ни в коем случае Улыбка )
со всем уважением, но не стот говорить "не годится" не зная всех условий.

делаем строку..
$str ="";
while (list ($key, $val) = each ($_POST)) {
$str .= $key."::разделитель::".$val."\r\n";
}
$str в файл, файл читаем c пом file()
построчно просмотреть в цикле и слепить ассоциативный массив.
не уверен что самый лучший вариант, но первое, что в голову пришло.
З.Ы.
хранить массив в файле идиотизм. в файле нужно хранить данные.
6. Ray Wen - 07 Февраля, 2005 - 00:46:16 - перейти к сообщению
ita пишет:
хранить массив в файле идиотизм. в файле нужно хранить данные.

Так массив и есть хранилище данных... Я сейчас просто записываю данные в файл по строчно, в каждой строчке элемент массива поделенный в свою очередь другими делителями. Но доступ и поиск в таком массиве мягко говоря не удобен... Приходиться постоянно пользоваться циклами в каждом действии... Конечно если много думать над проблемой она решиться, но я за последние дни себе думалку сломал уже, по тому и прошу помощи... вместе легче думаеться.
То что делаю сейчас я:
CODE:
$fp = file ("array.inc");

$number_array = count($fp);

for ($i=0; $i<$number_array; $i++) {
$line = explode ( '"::"', $fp[$i] );
echo $line[0];
echo $line[1];
echo $line[2];
echo $line[3];
}

Это приемлемо при выводе, но если мне нужно только один элемент масиво, приходиться прогонять цикл по всем чтобы найти нужный. Возможно есть какой нить способ сделать все проще...
7. TvoyWeb - 07 Февраля, 2005 - 02:10:29 - перейти к сообщению
ita
Цитата:
со всем уважением, но не стот говорить "не годится" не зная всех условий.

Поверь я тоже со всем уважением.
Но я привык так, если даю совет, то пытаюсь чтобы он подошел под любые условия (если эти условия не известны).
Рассмотрим такой массив:
CODE:
Array(
[1101155378] => Array(
[p_id] => 1
[post] => Some text
[ip] => xx.xxx.xx.x
[smiles] => 1
[sig] => 1
[posted] => Array(
[1] => 15
[7] => 41
[12] => 8
)
)
[1101154387] => Array(
[p_id] => 72
[post] => Second some text
[ip] => x.xx.xxx.xxx
[smiles] => 0
[sig] => 0
[posted] => Array(
[3] => 5
[5] => 18
[9] => 1
)
)
[1101152356] => Array(
[p_id] => 44
[post] => Third some text
[ip] => xxx.xxx.xxx.xxx
[smiles] => 1
[sig] => 0
[posted] => Array(
[4] => 15
[5] => 28
[6] => 17
)
)
)

Любое хранение данных - это хранение, но практичность того или иного метода заключается в быстром (без заморочек) экспорте и импорте из базы (то бишь файла, в нашем случае). В случае с хранением массивов данных , также не маловажен, если не сказать что очень важен, момент обращения к любому элементу массива без его перебора.
То есть, имеем массив данных, экспортиуем его и после импорта (путем несложных и не !медленных операций) получаем этот же массив данных в том же виде что и перед экспортом.
Цитата:
файл читаем, регекспами разбираем. (не делать так ни в коем случае )

Как информация принимается, но как довод нет Улыбка Иначе зачем писать "(не делать так ни в коем случае )" Улыбка
Цитата:
хранить массив в файле идиотизм. в файле нужно хранить данные.

Вот это совсем неверно !!!
И в заключение, хранить многомерные, ассоциативные массивы хранить лучше воспользовавшись функцией serialize (unserialize - обратное восстановление массива) ли бо используя var_export().
О serialize() . Функция сохраняет все свойства значений ключей. Если к примеру $array['key'] - имеет boolean тип , то после unserialize() оно так и останется boolean . Это касается всех восьми типов в PHP. Пожалуй это весомый аргумент в пользу serialize() ( unserialize() ) Улыбка
Сорри о var_export() напишу чуть позже.... бежать пора\n\n(Добавление)
В сущности что писть? Все уже написано
http://forum.dklab.ru/php/heap/D...OrSerialize.html
http://forum.dklab.ru/php/advises/Var_export+evalFasterThanSerialize+unserialize.html
8. Ray Wen - 07 Февраля, 2005 - 03:36:47 - перейти к сообщению
TvoyWeb
Спасибо... по ссылкам полезная информация. Буду через serialize() ( unserialize(), данных не много и все находиться выше сервера...

Возможно не по теме, но все таки, раз начал... Я делаю некое подобие админки для добавления новостей разными админами сайта... пароли и имена храняться в массиве выше сервера. В достаточной ли они безопасности там, или лучьше применить дополнительные меры? С шифрованием данных и безопасностью пока не сталкивался... по тому дуб дубом в этом деле...
9. ita - 07 Февраля, 2005 - 04:11:08 - перейти к сообщению
о serialize() не знал, это выход.
только что там с размером файла..
З.Ы. базы данных рулят Улыбка

все и всегда находится в относительной безопастности Улыбка по http конечно не дотянуться, но все равно пароли в открытом виде лучше не хранить.
пользуйся md5() или crypt()
10. Ray Wen - 07 Февраля, 2005 - 04:51:22 - перейти к сообщению
ita
Почитал немного про шифрование... ни чего сложного, по тому действительно лучьше воспользоваться... надежнее. Спасибо.

Форум на AlfaSpace.NET


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

[Script Execution time: 0.0324]     [ 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