[email protected]刪除檔案失敗原因
阿新 • • 發佈:2018-12-17
最近做我網站的更換頭像功能時,涉及到了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']], '頭像更新成功');
}
}
}
}
不得不說,自學是困難重重的,原因不在於外,在於內。這一次為了追尋所想,斬斷了退路,辭掉了安穩的工作,希望不要讓這些犧牲,毫無價值可言。