2016-07-08 80 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); 

的核心思想是使用真实路径删除和保存而不是网址