2016-07-08 163 views
0

我想從服務器上使用unlink()函數刪除圖像。這是從數據庫中刪除圖像名稱,但圖像沒有從服務器上刪除,我做錯了什麼?從服務器刪除圖像

public function actionDelete() 
    { 
     if(Yii::$app->request->isAjax) 
     { 

      $id = $_POST['id']; 
      $product=Product::find()->where(['id'=>$id])->one()->delete(); 
      $delete=CategoryProduct::find()->where(['product_id'=>$id])->all(); 
      foreach($delete as $del) 
      { 
       $del->delete(); 
      } 

      $imgfile="<?php echo Yii::$app->request->baseUrl;?>/web/assets/uploads/<?php echo $product->image;?>"; 
      unlink($imgfile); 

      echo json_encode(TRUE);die; 
     } 

     echo json_encode(FALSE);die; 

    } 
+0

使用的文件路徑而不是URL,我在看'$ app-> request-> baseUrl'會返回http://path/path/path/img.html,但您必須使用類似etc/ww/images/path/direcory/file.png的文件路徑 – tomexsans

+0

檢查這個http://stackoverflow.com/questions/10499450/delete-image-files-from-server我認爲這可能會幫助你 – zoro

+0

使用'Yii :: getAlias('webroot')'用於文件路徑 – GAMITG

回答

1

其最好設置爲上傳路徑的別名,使我們可以有標準的名稱,所有上傳的文件夾(將最好的地方)。即

Yii::setAlias('image_uploads', dirname(dirname(__DIR__)) . '/web/assets/uploads'); 

你可以使用同樣的方法保存和刪除文件。

儲蓄會像

move_uploaded_file($tmp_file, \Yii::getAlias('@image_uploads/products/') . $product->image); 

您可以使用Yii的方法即對例如

$this->imageFile->saveAs($orignal_file_full_path); // where imageFile in input type file 

刪除將是這樣的:

unlink (\Yii::getAlias('@image_uploads/products/') . $product->image); 

的核心思想是使用真實路徑刪除和保存而不是網址