バックグラウンド :
フラット ファイル キー値ストアを作成しようとしています。以下のコードを使用すると、ファイルに書き込まれた配列が削除され、空のファイルになります。次のリクエストで、ファイルに配列が取り込まれます。このプロセスは、すべてのページ要求でループします。
私が試したこと:
- 「json_encode()」/「json_decode()」による各種メソッド。
- 「serialize()」/「unserialize()」でも同じことを試みました。
- 「array_merge()」と「array_merge_recursive()」でさまざまなコーディング構造を試しました。
何も機能していないようです!空のファイルの同じループになってしまいます->配列のあるファイルが続きます
質問 :
より経験豊富な人が私が間違っていることを教えてもらえますか?
コード:
/**
* Class Orm
*/
class Orm
{
/**
* @var string The Root database directory with a trailing slash. default is "./database/".
*/
static $dir = "./database/";
/**
* @var array
*/
protected $data;
/**
* @var string
*/
protected $file = "";
/**
* @param $file
* @return string
*/
public function load_table($file)
{
try {
if (file_exists(self::$dir . $file)) {
return $this->file = $file;
} else {
throw new Exception("The file " . $file . " cannot be created, because it already exists");
}
} catch (Exception $error) {
return $error->getMessage();
}
}
/**
* @param String
* @param array $values An associative array of values to store.
* @return array
*/
public function set($key, $values = array())
{
try{
if (!empty($key) && !empty($values)){
return $this->data[$key] = $values;
} else {
throw new Exception();
}
} catch (Exception $error){
return $error->getMessage();
}
}
public function save()
{
try{
if (file_exists(self::$dir . $this->file)) {
if (filesize(self::$dir . $this->file) == 0)
{
file_put_contents(self::$dir . $this->file, print_r($this->data, TRUE));
}else{
$tmp = file_get_contents(self::$dir . $this->file);
$content = array_merge($tmp, $this->data);
file_put_contents(self::$dir . $this->file, print_r($content, TRUE));
}
} else {
throw new Exception();
}
} catch(Exception $error){
return $error->getMessage();
}
}
}
$user = new Orm();
$user->load_table("users");
$user->set("Tito",array("age" => "32", "occupation" => "cont"));
$user->save();
PS : これは、Php に慣れるための良いプロジェクトだと思いました。したがって、これは Php の学習と理解のみを目的としているため、SQL を使用することはお勧めしません。