PHP中怎么判断上传文件是否从复??,
发布网友
发布时间:2022-04-06 03:20
我来回答
共3个回答
热心网友
时间:2022-04-06 04:49
一般情况下上传文件都会重命名,命名成不会重名的文件名,比如重命名为:
$newName = date("YmdHis").md5(mt_rand(10000,99999));
这样即增加了时间还加上了加密后的随机数,就没有重名的可能了。
当然在文件名在加源文件名什么的就看你自己需要了
对了,还不要忘记获取并添加后缀名哦~
所以答案就是根本不用去是否重名的判断。
热心网友
时间:2022-04-06 06:07
把上传的文件生成一个 CRC 码,然后保存到指定文件或到数据库中,把当前上传的文件CRC码和原来的对比,看有没有重复的。这样可以避免相同的文件名但不同的文件内容的问题,不过这样只能把文件上传之后才判断文件是否已经上传。
生成 文件 CRC 函数如下:
<?php
function crc32_file ($filename)
{
$f = @fopen($filename,'rb');
if (!$f) return false;
static $CRC32Table, $Reflect8Table;
if (!isset($CRC32Table))
{
$Polynomial = 0x04c11db7;
$topBit = 1 << 31;
for($i = 0; $i < 256; $i++)
{
$remainder = $i << 24;
for ($j = 0; $j < 8; $j++)
{
if ($remainder & $topBit)
$remainder = ($remainder << 1) ^ $Polynomial;
else $remainder = $remainder << 1;
}
$CRC32Table[$i] = $remainder;
if (isset($Reflect8Table[$i])) continue;
$str = str_pad(decbin($i), 8, '0', STR_PAD_LEFT);
$num = bindec(strrev($str));
$Reflect8Table[$i] = $num;
$Reflect8Table[$num] = $i;
}
}
$remainder = 0xffffffff;
while ($data = fread($f,1024))
{
$len = strlen($data);
for ($i = 0; $i < $len; $i++)
{
$byte = $Reflect8Table[ord($data[$i])];
$index = (($remainder >> 24) & 0xff) ^ $byte;
$crc = $CRC32Table[$index];
$remainder = ($remainder << 8) ^ $crc;
}
}
$str = decbin($remainder);
$str = str_pad($str, 32, '0', STR_PAD_LEFT);
$remainder = bindec(strrev($str));
return $remainder ^ 0xffffffff;
}
?>
热心网友
时间:2022-04-06 07:42
你把上传后的文件不用重命名,然后再用file_exists判断就可以了,一般的人写的上传组件文件名是在重命名时,和已经存在的文件永远不会重复的,你改一下,这样就不用重复上传了