好了,当我试图创建一个小的3个字符的迷你记录,然后将其添加到mod_rewriten域名url中,创建链接/文件缩写服务时,当涉及到url记录冲突时,我似乎碰壁了。可能是因为我还没有部署任何reall验证系统来检查MySQL是否存在记录并将其推送给用户,或者是否存在标记的记录而不是实际的url/文件,然后重新运行脚本以创建新的短标记。
这是当前的脚本,它导致与标签的冲突,并且由于某种原因创建了一个名称与标签不同的文件(这仅用于文件共享)
function shorten_file() {
$name = $_FILES['file']['name'];
$ltr = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIKLM';
srand((double) microtime() * 1000000);
$short = '';
for ($i = 1; $i <= rand(4,4); $i++) {
$q = rand() %98;
$short = $short . $ltr[$q];
}
$file = strtolower($name);
$rand = mt_rand();
$short = substr($rand.$file, 0, 3);
return $short;
}
$filename = $_FILES['file']['name'];
$filename = str_replace("'", "", $filename);
$ext = $parts[count($parts)-1];
$contenttype = strtolower($ext);
$new_file = shorten($filename).".".$ext;
$new_hash = shorten($filename);如前所述,记录已创建,因此假设我上传了一个名为: img_4032.jpg的文件,该文件将作为临时文件上传,然后将对其进行处理并创建一条记录。现在文件被保存到/server_id (1-8)/md5/hash(a-g的/file_cLO.jpg)文件中,并且应该生成一个记录cLO,但是我得到的是file_cLO.jpg记录lNm,所以在这里脚本没有返回与它提供给文件的记录相同的记录。我还会注意到,由于某些原因,不会返回大写字母,因此它与数字一起都是小写的。
有没有关于修复的建议,或者可能的想法是除了验证将添加的actuall记录之外,还应该做些什么来防止这种冲突的发生?
所有“合乎逻辑的”想法和建议都是受欢迎的
发布于 2011-12-01 16:59:05
问题是您调用shorten函数两次,每次生成一个新的散列,而不是调用它一次并将其分配给两个var
$new_hash = shorten($filename);
$new_file = $new_hash.".".$ext;发布于 2011-12-01 16:59:14
调用shorten两次,生成两个单独的随机urls (每次调用随机数生成器时都会重新设定它的种子)。
https://stackoverflow.com/questions/8338637
复制相似问题