繁体   English   中英

PHP 保存/存储极少量数据的最佳实践

[英]PHP Best practice for saving/storing very small amounts of data

我目前正在做的事情有效,但我只是觉得有更好的方法,或者可能是更专业的方法。 我说的是非常少量的数据,例如保存的一个数字(或几个数字),以便将所做的选择存储在下拉列表中,以便每次重新打开页面时都会记住它。 我根本没有使用 mysql 数据库,所以它只保存到文件中。

现在我只是将数字保存到一个文本文件中以保存选定的文件夹,然后在它下面有几个其他数字来保存选定的文件。 全部从下拉列表中选择,如下所示:

<form method="POST" action="index.php">
<select onchange="this.form.submit();" name="text">
<option>Select</option>
<option value="first">first</option>
<option value="second">second</option>
<option value="etc">etc</option>
</select>
</form>

然后它们被存储在一个简单的文本文件中,如下所示:

7
4
3

当文件夹或文件被更改时,使用以下代码进行更改:

function saveFile($line,$data,$savepath) {
$trace=file($savepath);$trace[$line]=$data;
file_put_contents($savepath,$trace);
}

if(isset($_POST['text'])) {
$changed=$_POST['text'];
saveFile($selected,$changed."\n",$savepath);
}

代码选择要保存到文本文件的哪一行。 也许有更好的方法或完全不同的方法? 虽然我不想使用 sql 或类似的东西。

由于忽略以下几点而面临被否决的风险:

虽然我不想使用 sql 或类似的东西

您不需要为此运行庞大的数据库系统。 SQLite 的一些东西可以让你拥有数据库的功能,而没有巨大的开销。 SQLite 数据库本质上是一种具有您配置的所有关系的特定类型的文件,但比您正在使用的平面文件结构提供了更多的灵活性。

在我看来,您正试图从页面加载到页面加载保持几个值。 如果这只是在 UI 中而不是在服务器端需要,我会将数据保存在 cookie 中,但这是一个相当过时的问题解决方案,使用本地存储也应该为您解决问题。 对不起,JavaScript 解决方案,而不是 PHP。 示例代码:

localStorage.setItem("属性", "值");

alert("属性:" + localStorage.getItem("属性"));

另一个想法是将解析为 Json、序列化(关联)数组或类似文件的数据保存。 这样您就已经命名了值,并且如果您在两年后再次打开该文件,您就知道哪个值属于您系统中的哪个函数。

但同样,如果这极大地增加了项目的复杂性,或者它开始变得效率低下(因为存储了大量的值),一个优化的数据库,就像其他人已经推荐的那样,将是唯一的方法。

要将这样的少量数据保存到文件中,我建议将数据作为键/值对存储在数组中,然后序列化数组(或将其转换为 JSON),然后保存。

例如

$folderValue = 5;
$file1Value = 6;
$file2Value = 7;

/**
  * Saving data
  */
$data = array(
    'folder' => $folderValue,
    'file1' => $file1Value,
    'file2' => $file2Value,
);

file_put_contents($filename , serialize(data));


/**
  * Getting data (this will be the same array you
  * saved to file at an earlier point) which you can
  * iterate over or grab values via key.
  */

$data = unserialize(file_get_contents($filename));

foreach ($data as $key => $value) {
    echo "key {$key} is {$value}\n";
    // e.g. "key folderValue is 5";
}

echo $data['folder'] . "\n";
// e.g. "5";

SQL 仍然是存储应用程序状态的更好选择。 平面文件很差,因为随着时间的推移它们变得难以管理,但是如果您确实使用文件,键=> 值映射对于可读性很重要。

如果你需要一个低开销的 SQL(低配置,没有后台服务器运行),SQLite 可能是一个很好的候选者,但它有它自己的局限性(低性能,不能扩展)。

PHP 有关于序列化数据的很好的文档: http : //php.net/manual/en/function.serialize.php http://php.net/manual/en/function.unserialize.php

Json 是另一种数据序列化的好格式。 另请参阅 json_encode 和 json_decode。

看看火箭商店...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM