2011-02-07 14 views
1

我想將數組存儲在文件中。 我與csv(fgetcsv,fputcsv),但有很多與語言環境相關的錯誤。我不能繼續使用它。 我使用序列化,但編輯非常困難。此外還有一個相關的錯誤\r序列化與SQLite中的PHP

我正在尋找一種更好的和國際化的方式來存儲變量文件。

SQLite可以解決。我不知道SQLite與MySQL或基本序列化的性能。另外如果有錯誤,我會遇到。

注:

  1. 陣列是二維陣列。與DB結構中的table->field相同。
  2. 我不想要求額外的程序安裝,可移植性是真正的問題,因爲人們可以安裝到任何服務器上,PHP,MySQL應該足夠了。
  3. 爲什麼我不想存儲在MySQL中,因爲我將使用此結構來提供緩存。我想發佈的最終產品可以在沒有數據庫的情況下運行,大部分時間。
  4. 我用fgetcsv & fputcvs寫了一個基本結構。有bug!它剝去一些字符。這就是我尋找替代品的原因。我不想從頭開始整個輪子,但PHP的傢伙不明白編程:請檢查:http://bugs.php.net/bug.php?id=48507
+0

在我看來,如果性能不是批評點,使用XML序列化 – Lordalcol 2011-02-07 10:14:22

+4

如果你正在看sqlite,去使用它..它的快速n燈爲你的情況..它也作爲分貝:) – Shrinath 2011-02-07 10:15:01

+1

sqlite ftw !!!!! – Jason 2011-02-07 10:24:48

回答

1

是的,你需要序列化它。然後你可以將它存儲在任何你喜歡的東西中。 SQLite,MySQL,PGSQL,平面文件等。由於您正在序列化它,所以區域設置應該不會有問題。

[編輯]

當然,你應該序列化和PHP對象,你試圖商店。而且你不應該直接通過存儲介質進行編輯。您應該反序列化並通過PHP進行操作。

[編輯]

既然你說你不想使用數據庫服務器,你必須使用一個平面文件。

我會使用SQLite。如果你不想這樣做,你需要創建你自己的文件解析器。您可以爲每個文件存儲一個對象,並通過文件名識別對象。

儘管你必須考慮用戶空間。如果這是一個問題,您可以使用會話。這對緩存數據非常常見。

只需重申,您需要在使用任何存儲方法之前序列化數據。它不是序列化與SQLite。它是serilaize + SQLite。你需要將它序列化,然後將它插入到SQLite數據庫或序列化數據,然後將它存儲在會話中。

緩存數據並不新鮮。你並沒有開創新局面。之前已經做過很多次了。

7

也許你有可能將你的數據緩存爲真正的PHP。函數var_export爲您提供數據的PHP表示。它有一些限制,serialize在循環引用時沒有,但另一方面它更容易理解,因爲您已經知道該語法。

0

如果您打算使用數組作爲列表,集合或散列,請查看鍵值存儲redis

它的速度非常快,完成了這種使用,並且有很多PHP綁定。

2

你有沒有使用YAML認爲,

您可以找到YAML網站here,你可以找到一個小的lib處理YAML here

3

可能json_encode()json_decode()是對你有好處? Sqlite不是多維數組的好解決方案。

0

你的意思是像do_put()方法here?只是要注意部分「緩存內容」 ...的輸出緩存文件看起來像:

<?php 
$value = <<<FILEINFO_26 
a:13:{s:4:"f_id";i:26;s:6:"f_hash";s:32:"d07288e848cc6219b7a793b0532f8fed";s:11:"f_extension";s:3:"jpg";s:6:"f_name";s:7:"214.jpg";s:6:"f_size";i:12902;s:10:"f_duration";N;s:6:"f_mime";s:10:"image/jpeg";s:11:"f_os_compat";N;s:9:"f_version";s:4:"NULL";s:14:"f_architecture";s:2:"32";s:7:"f_extra";N;s:11:"f_timestamp";i:1276516112;s:12:"f_dimensions";a:2:{s:5:"width";s:3:"180";s:6:"height";s:3:"227";}} 
FILEINFO_26; 

$is_array = 1;  

$ttl = 0; 
?> 

它採用序列化(),也可以存儲在緩存Db的...來源here