gpt4 book ai didi

php - 更快,如果可能的话,内存成本更低的方法生成字母数字代码?

转载 作者:行者123 更新时间:2023-12-04 06:15:43 27 4
gpt4 key购买 nike

我正在尝试在没有数据库的情况下进行非常简单的短 URL 重定向。

这是我到目前为止所拥有的:

<?php
$name = $_GET['file'];
$name = preg_replace("/[^A-Za-z0-9]/", '', $name);
$file = 'data/' . $name;

// File found
if (is_file($file))
{
// Read the first line, we don't use file_get_contents as the data folder is protected and must be read internally
$f = fopen($file, 'r');
$data = fgets($f);
fclose($f);

// Redirect to the real URL
header("Location: $data");
}
else
{
// What a shame the URL does not exist
header("Location: http://www.mydomain.com/");
}

exit();
?>
  • 我想知道什么会更快,如果
    可能的更少内存成本的方法来生成字母数字代码
    6 到 8 个字符,与现有字符不冲突
    数据文件夹?
  • 最佳答案

    您是否还要求对于任何给定的 url 必须可以查找它的短代码?一个只计算数字的系统可以生成唯一的文件名,但这当然不是一种可重复的方法,因此如果多次进入相同的 url,每次都会出现不同的键。

    如果这是可以接受的,那么我只建议一个计数器,可能是 base 36(不区分大小写的字母数字)或类似的计数器,以提供最大的 key 空间大小。您可以有一个包含当前计数的文件(也可以存储在内存中,但需要在重新启动时重新加载),当然,您必须小心多线程访问,同时读取下一个值。

    如果您需要给定的 url 始终被赋予相同的 id,那么您可以有第二个目录存储以 url 命名的文件(根据需要进行转义),其中包含您第一次为它们生成的 key 。生成新 key 时,您可以在此文件目录中查找 url 是否已具有 key ,如果存在则返回该 key 。

    正如您所看到的,这基本上是粗略地复制了数据库将使用两个目录的方式,这两个目录基本上是 url 和 key 表上的索引。

    我能想到的唯一另一种方法是使用一些一对一的函数来保证您正在查看的输入生成一定长度的字符串。我想不出在哪里可以找到这样的功能。压缩算法是最接近的,但它们当然会生成不太可能满足您需要的输出(因为它压缩成的二进制文件可能与经过 base64 编码或类似编码后的原始字符串一样大)

    fardjad 建议的散列函数可能没问题,但是无法从散列值返回到 url,并且不能保证两个输入是唯一的(尽管它们不是这样的可能性非常小) .

    我怀疑 fardjad 的解决方案将与您在实践中需要的一样好,但这取决于这需要多么强大。

    最后我应该指出,我从来没有写过或研究过较短的 url 服务,所以我所说的都不是专家建议,只是想如果我没有做任何研究,我会怎么做。 :)

    关于php - 更快,如果可能的话,内存成本更低的方法生成字母数字代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7280958/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com