我想将数组存储在文件中。
我转而使用csv(fgetcsv
,fputcsv
)但是有很多与语言环境相关的错误。我不能继续使用它。
我使用序列化,但编辑非常困难。还有一个与\r
相关的错误。
我正在寻找一种更好的国际方式将变量存储在文件中。
SQLite可以解决。我想知道SQLite与MySQL或基本序列化相比的性能。如果有错误,我会遇到。
注意:
table->field
相同。 fgetcsv
&编写了一个基本结构。 fputcvs
。有bug!它剥离了一些字符。这就是为什么我在寻找替代方案。我不想从一开始就发明整个轮子,但PHP人员不懂编程:请查看:http://bugs.php.net/bug.php?id=48507 答案 0 :(得分:7)
也许你有可能将数据缓存为真正的PHP。函数var_export
为您提供数据的PHP表示。它有一些限制,serialize
在循环引用时没有,但另一方面它更容易理解,因为你已经知道了语法。
答案 1 :(得分:3)
可能json_encode()
和json_decode()
对你有好处吗? Sqlite不是多维数组的好解决方案。
答案 2 :(得分:2)
答案 3 :(得分:1)
是的,你需要序列化它。然后你可以把它存储在你喜欢的任何东西中。 SQLite,MySQL,PGSQL,平面文件等。由于您要对其进行序列化,因此区域设置应该没有问题。
<强> [编辑] 强>
当然,您应该序列化并尝试存储的PHP对象。而且您不应该通过存储介质直接编辑它。你应该反序列化它并通过PHP操作它。
<强> [编辑] 强>
由于您已声明不想使用数据库服务器,因此必须使用平面文件。
我会使用SQLite。如果您不想这样做,则需要创建自己的文件解析器。您可以为每个文件存储一个对象,并通过文件名识别对象。
但你必须考虑用户空间。如果这是一个问题,您可以使用会话。这对于缓存数据非常常见。
重申一下,您需要在使用任何存储方法之前序列化数据。它不是与SQLite序列化。它是serilaize + SQLite。您需要对其进行序列化,然后将其插入到SQLite数据库或序列化数据中,然后将其存储在会话中。
缓存数据并不是什么新鲜事。你没有开辟新天地。之前已经做了很多次。
答案 4 :(得分:0)
如果您打算将数组用作列表,集合或哈希值,请查看键值存储redis。
它非常快速,完成了这种用途,并且有很多PHP绑定。
答案 5 :(得分:0)
你的意思是do_put()方法here?只需注意“CACHE CONTENT”部分......输出缓存文件如下所示:
<?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;
?>
它使用serialize()并且还可以在Db中存储缓存...来源here。