【Codeigniter-Upload类】阻止上传同名文件

Upload类的配置信息中有一个overwrite,取boolean值,默认值为false,表示是否覆盖同名文件。该参数为TRUE时,如果上传文件时碰到重名文件,将会把原文件覆盖;如果该参数为FALSE,CI将会在新文件的文件名后面加一个数字。这样一来,不管怎么设置overwrite的值,同名文件都会被成功上传,这有时会造成一些麻烦。如果我们将上传同名文件视为错误操作而且要彻底阻止它,那么就需要修改Upload类。

Upload类中的set_filename()函数负责对上传的文件命名,代码如下:

public function set_filename($path, $filename)
{
                if ($this->encrypt_name == TRUE){
			mt_srand();
			$filename = md5(uniqid(mt_rand())).$this->file_ext;
		}

		if ( ! file_exists($path.$filename))
		{
			return $filename;
		}

		$filename = str_replace($this->file_ext, '', $filename);

		$new_filename = '';
		for ($i = 1; $i < 100; $i++)
		{
			if ( ! file_exists($path.$filename.$i.$this->file_ext))
			{
				$new_filename = $filename.$i.$this->file_ext;
				break;
			}
		}

		if ($new_filename == '')
		{
			$this->set_error('upload_bad_filename');
			return FALSE;
		}
		else
		{
			return $new_filename;
		}
	}

函数最开始是对文件名加密的一些操作,无视它,接下来的很简单,如果上传目录中没有同名文件就直接返回原文件名,否则就会在文件名后面加上一个序号。我的处理方法是把添加序号的部分全部注释掉,然后添加发现同名文件情况时的代码,输出错误信息,并返回false,像这样(去掉了注释掉的部分):

public function set_filename($path, $filename)
{
	if ($this->encrypt_name == TRUE)
	{
		mt_srand();
		$filename = md5(uniqid(mt_rand())).$this->file_ext;
	}

        if ( ! file_exists($path.$filename))
	{
		return $filename;
	}
	else {
		$this->set_error("Filename Conflict: There is already a file named \"$filename\".");
		return false;
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值