php使用unlink删除文件提示无权限

发布时间php使用unlink删除文件提示无权限:2025-04-02 21:32:59 来源:滔哥技术博客 分类:PHP 阅读(838)

今天在写接口的时候,有个这样的需求,上传文件到服务器,然后把文件传到七牛云上,再把服务器上的文件删除掉,第一次接口写完后的代码如下:

$type = input('param.type');
$qiniu = input('param.qiniu/d',0);
$file = request()->file('file');//dump($file);
$img_url = '';
if(!empty($file))
{
    // 移动到框架应用根目录/index/publichttp://www.178website.com/storage/uploads/ 目录下
    $info = $file->validate(['ext' => 'jpg,png,gif,xls,xlsx'])->move(ROOT_PATH . 'index' . DS . 'public' . DS . $type);
    if ($info) {
        $filename   = explode(DS,$info->getsaveName());
        $img_url = '/public/'.$type.'/'.$filename[0].'/'.$filename[1];
    }else{
        $this->error2($file->getError());
    }
}
if(empty($img_url)) {
    $this->error2('上传失败');
}
if ($qiniu==1){
    $img_url=Qiniu::video('.'.$img_url);
    unlink('.'.$img_url);
}
$this->success2('', $img_url);

其中在调试的时候,发现unlink会报Permission denied的错误,然后专门写了个方法去unlink上传的文件发现可以删除成功,说明删除本身是没有问题的,那就可能是上传之后再立马删除出现了问题,于是去翻阅了下php手册,发现php7.3.0更新日志上有这样一段说明:现在 Windows 也可以用 unlink() 删除文件句柄还在使用中的文件了,在此之前是无法删除的。 然而,还是无法重新创建文件,需要等到所有句柄都关闭才可以。由于我们的php版本是5.6,所以应该是因为文件句柄在使用中然后进行unlink操作,于是将文件变量释放掉再尝试去删除,经过修改后:

$img_url=Qiniu::video('.'.$img_url);
unset($info);
unlink('.'.$img_url);

果然可以成功删除了,确实是因为文件还在使用中的问题。