2015-12-10 66 views
1

我在Laravel 5.1中有一個項目PHP中的文件安全和刪除文件

而且我有產品圖片。

我想刪除圖片文件,當我刪除數據庫中的產品。

我像根

img/product 

我有圖片的版本

public function getVersions() 
{ 
    return [ 
     'large'  => '/large', 
     'medium' => '/medium', 
     'small'  => '/small', 
     'thumbnail' => '/thumbnail', 
     'root'  => '' 
    ]; 
} 

我的產品形象根

$productImageRoot = public_path('img/product/'.$product_id); 

我想了解以安全方式刪除所有照片的最佳做法是什麼?

這裏是我刪除產品的所有圖片的代碼。

/** 
    * @desc Ürün resimlerini ve resimlerin bulunduğu klasörleri siler. 
    * @param $product_id 
    * @return bool 
    * @throws \Exception 
    */ 
    public function deleteAllPictureFiles($product_id) 
    { 
     /** 
     * Resim türlerinin klasör yollarını çekiyoruz. 
     */ 
     $folderPaths  = $this->getVersions(); 

     $productImageRoot = public_path('img/product/'.$product_id); 

     $pictures   = (new ProductPicture)->getAllPicturesOfProduct($product_id); 

     try 
     { 
      /** 
      * Resim yolu yazılabilir ise... 
      */ 
      foreach($pictures as $picture) 
      { 
       /** 
       * Tüm resimleri siliyoruz. 
       */ 
       foreach($folderPaths as $folderPath) 
       { 
        unlink($productImageRoot.$folderPath.'/'.$picture->picture); 
       } 
      } 

      /** 
      * Tüm klasörleri siliyoruz. 
      */ 
      foreach($folderPaths as $folderPath) 
      { 
       rmdir($productImageRoot.$folderPath); 
      } 

      return TRUE; 
     } 
     catch(\Exception $e) 
     { 
      /** 
      * Resim yolu yazılamaz ise hata dönderiyoruz. 
      */ 
      throw new \Exception(trans('product.is_not_writable')); 
     } 

此代碼導致路徑不可寫的錯誤。

現在是我不確切的話題。我想學習文件和文件夾的chmod選項。我在刪除過程中應該怎麼做?什麼是最安全的刪除文件的方式?我不想使用chmod 777.我知道這是不安全的。

+0

你嘗試過使用775嗎? –

回答

0

您可以使用Laravel刪除目錄更容易。

File::deleteDirectory('img/product/'.$product_id); 

而且你是對的,不要使用777 755應該工作。如果755不起作用,但是777起作用,那麼該組可能是錯誤的,您可以使用chown -R youruser:yourgroup yourlaravelfolder修復它。很可能你的用戶和團體將是一樣的。

請務必在嘗試任何此操作之前進行備份。