如果未保存在PHP的数据库中,如何从上传目录中删除所有未使用的图像

时间:2019-04-18 16:56:57

标签: php laravel

  

我使用laravel 4.2

我在项目中有1000多张图片;多次上传后,这些图像已被主机用户占用。请以这种方式编辑示例实例,该示例实例将删除所有同时存储名称和文件的图像。

public function del_image()
    {

        $scan = scandir('uploads/evidence');


        foreach($scan as $file)
        {
            if (!is_dir($file))
            {
                $list = DB::table('evidence')
                ->where('profile_img',$file)
                ->select('profile_img')->get();

              echo '<pre>';print_r($list); echo '</pre>';   
            }
        }

        //echo $list."<br>";
        //echo '<pre>';print_r($list); echo '</pre>';   

    }

谢谢。

3 个答案:

答案 0 :(得分:0)

    $scan = scandir('uploads/evidence');
    $files =  DB::table('evidence')->pluck('profile_img');
    $protectTheseImages = [];
    foreach($files as $file) {
        $protectTheseImages[] = $file;
    }

    $diff = array_diff($scan, $protectTheseImages);
    foreach($diff as $file) {
        if (!is_dir($file)) {
            unlink($file);
        }
    }

答案 1 :(得分:0)

我将此代码更新为:

$scan = scandir('uploads/evidence');
        $files =  DB::table('evidence')->pluck('profile_img');
        $protectTheseImages = [];


        foreach((array)$files as $file) {
            $protectTheseImages[] = $file;
        }

        //dd($protectTheseImages);

        $diff = array_diff($scan, $protectTheseImages);
        foreach($diff as $file) {
            if (!is_dir($file)) {
                echo $file."<br>";
                //unlink($file);
            }
        }

但是,行echo $file."<br>";仅显示目录!!!中的所有图像!

答案 2 :(得分:0)

我认为您应该使用此代码。

$scan = scandir('uploads/evidence');
$files =  DB::table('evidence')->pluck('profile_img');
$protectTheseImages = [];


foreach((array)$files as $file) {
    $protectTheseImages[] = $file;
}

//dd($protectTheseImages);

$diff = array_diff($scan, $protectTheseImages);
foreach($diff as $file) {
    if (!is_dir($file)) {
        echo $file."<br>";

        $image_path = '/folder_path/uploads/evidence/'.$file; 
        unlink($image_path);
    }
}

希望此代码对您有所帮助。