人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

phpで

1 配列(多次元含む)を一度ファイルに書込
2 ファイルから再度読み込み同一の配列構造で変数に格納

上記を行いたいのですがどうするのがセオリーでしょうか?




●質問者: kichitaka
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● jan8
●0ポイント

1本のデータにバラして、次元数、各次元の要素数と共にファイルに書き込む


2 ● snow0214
●100ポイント

配列を $arr とすると、関数serialize, unserializeを使うのが簡単です。

1 配列(多次元含む)を一度ファイルに書込

file_put_contents("hoge.dat", serialize($arr));

2 ファイルから再度読み込み同一の配列構造で変数に格納

$arr = unserialize(file_get_contents("hoge.dat"));

3 ● ぽけっとしすてむ
●100ポイント ベストアンサー

たとえば、このようなデータがあり、

<?php
$data = array(
123,456,789
);

array (size=3)
0 => int 123
1 => int 456
2 => int 789

これを、serializeでファイル等に保管できる形に変換します。

<?php
$s_data = serialize($data);

string 'a:3:{i:0;i:123;i:1;i:456;i:2;i:789;}' (length=36)

このような文字列になった状態であれば、file_put_contents等を利用してファイルに保管する事ができます。

<?php
file_put_contents('./filename.txt', $s_data);

連想配列でも、同様に変換することができます。

<?php
$data = array(
'test1'=>'data1',
'test2'=>'data2'
);
$s_data = serialize($data);

string 'a:2:{s:5:"test1";s:5:"data1";s:5:"test2";s:5:"data2";}' (length=54)


保管したデータは、逆の手順で取り出して、unserializeにて元に戻すことが可能です。
これらを1行で行っているのがNo2の回答になります。

※serializeで変換・保管されたデータは、テキストエディタ等を使って手動で書き換える事も可能ですが、手間がかかる上にデータを壊す可能性もあり、良い事がありません。


4 ● 井戸端さん
●100ポイント

配列のファイル保存はコスト高でセキュリティも不安だから「使わない」がセオリーよ。

たしかにserialize/unserializeは便利よ。でもそれは安全圏内での使用に限るわ。
シェル使いやperl使いの人なら当たり前でもphp使いの人は外部からアクセスできない場所にファイルを保管するなんてあんまり考えなかったりするんだもの。危険極まりないわ。

phpのプログラム間でデータを受け渡したいならセッション変数ね。
PHP: セッション関数 - Manual

長期保存ならデータベースに入れてしまうの。たいていのサーバーはMySQLくらい使えるわよ。
PHP: mysqli - Manual

大規模システムで多数のユーザーが共有するデータならmemcachedなんかになるわ。最適化はとても難しいわよ。
PHP: Memcache - Manual

こんなのは序の口よ。やりかたなんてまだまだあるわ。
なぜ保存しなければならないの?保存は本当に必要なのってところから考え直しになるかもしれないわね。

関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ