PHP中的文件安全性和删除文件

时间:2015-12-10 22:32:56

标签: php laravel

我在Laravel 5.1中有一个项目

我有产品图片。

我想在删除数据库中的产品时删除图片文件。

我的图片根

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.我知道它不安全。

1 个答案:

答案 0 :(得分:0)

您可以使用Laravel删除更容易的目录。

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

你也是对的,不要使用777.755应该可行。如果755不起作用,但是777,则该组可能是错误的,您可以使用chown -R youruser:yourgroup yourlaravelfolder进行修复。您的用户和群组最有可能是相同的。

请确保在尝试任何此操作之前进行备份。