php@unlink删除文件失败原因

版权声明:每次关键时刻我都会掉链子,我知道重要时刻我都会发挥失常,所以我会付出150%的努力,即使只能发挥60%水平,也能拿到90分! https://blog.csdn.net/qq_16371909/article/details/85047966

最近做我网站的更换头像功能时,涉及到了PHP的文件上传。
我采用的方案是用户先上传到服务器,服务器再上传到阿里云的OSS,中间会有一个把图片临时存储到服务器的过程。于是在使用php的@unlink(删除指定文件)方法时发现了删除失败的问题。
开始以为是我的路径名写错了,后来确认这个参数没有错。删除失败的原因是图片仍然被进程占用,所以想要成功执行@unlink操作,我们最好手动释放下文件对象,避免因为被其他线程或进程占用而导致删除失败,代码片段如下:

// [API接口-用户更新头像]
public function setAvatar()
{
	// 获取表单上传文件
	$file = $this->request->file('avatar');
	
	if ($file) {
		// 移动到框架应用根目录/public/uploads/ 目录下
		$info = $file->rule('date')->move(ROOT_PATH . 'public' . DS . 'uploads');
		
		if ($info) {//文件上传到服务器成功->接下来上传到OSS
        	$filePath = ROOT_PATH . 'public' . DS . 'uploads/' . $info->getSaveName();
        	
        	$oss = new Oss();
        	$result = $oss->putObject($filePath); 
                  
			if ($result) { //上传到OSS成功                              
				unset($info);//解除图片的进程占用
				@unlink($filePath);
				return success(['avatar' => $result['fileSrc']], '头像更新成功');
			}
        }
	}
}

不得不说,自学是困难重重的,原因不在于外,在于内。这一次为了追寻所想,斩断了退路,辞掉了安稳的工作,希望不要让这些牺牲,毫无价值可言。

猜你喜欢

转载自blog.csdn.net/qq_16371909/article/details/85047966