Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel 5文件删除错误_Php_Mysql_File_Laravel 5_Delete File - Fatal编程技术网

Php Laravel 5文件删除错误

Php Laravel 5文件删除错误,php,mysql,file,laravel-5,delete-file,Php,Mysql,File,Laravel 5,Delete File,有一个与我的laravel 5 web应用程序有关的文件删除问题 我想从我的表中删除一个带有相应图像文件的条目。 这是我的桌子结构 Schema::create('master_brands',function($table){ $table->increments('pk_brand_id'); $table->string('brand_name'); $table->string('brand_logo');

有一个与我的laravel 5 web应用程序有关的文件删除问题

我想从我的表中删除一个带有相应图像文件的条目。 这是我的桌子结构

 Schema::create('master_brands',function($table){
        $table->increments('pk_brand_id');
        $table->string('brand_name');
        $table->string('brand_logo');
        $table->timestamps();
    });
我在db中添加了3个品牌,并将图像路径存储在品牌logo字段中,如:(/uploads/masters/logo catagory\u Computers&IT.png

当从数据库中删除记录时,我还想从uploads文件夹中删除图像文件。 但在执行删除操作时,文件未被删除。 这是我的删除控制器

  public function branddelete($id)
  {
    $filename = DB::table('master_brands')->where('pk_brand_id', $id)->get();
    $filname =  url()."/app".$filename[0]->brand_logo;
    File::delete($filname); // http://localhost/genie-works/devojp/app//uploads/masters/logocatagory_Computers & IT.png
  }
该文件存在于我的目录和具有777权限的目录中

我还尝试了存储类来删除文件。但是没有办法


我如何解决这个问题?有什么想法吗(

您的做法不对。您不可能从URL中删除文件,您必须提供文件路径而不是URL

编辑

假设要删除的文件位于
公用/上传/主机/登录分类\u计算机中
,则可以执行以下操作:

public function branddelete($id)
{
    $filename = DB::table('master_brands')->where('pk_brand_id', $id)->get();
    $filname =  $filename[0]->brand_logo; 
    //example it.png, which is located in `public/uploads/masters/logocatagory_Computers` folder
    $file_path = app_path("uploads/masters/logocatagory_Computers/{$filname}");

    if(File::exists($file_path)) File::delete($file_path); 
}

如果您将文件输出到Storage/app/,Storage::不工作,请更改/Config/Filesystems.php,尝试将您的“local”放在base_path()并注释default Storage_path()

然后在控制器中

use Illuminate\Support\Facades\Storage;
然后在公共功能中使用存储模型

$path= 'uploads/masters/';
Storage::delete($path . $filname);

在Laravel 5.1中。使用本地驱动程序时,请注意,所有文件操作都与配置文件中定义的根目录相关。默认情况下,此值设置为存储/app目录。因此

以下方法将文件存储在storage/app/file.txt中:

Storage::put('file.txt', 'Contents');
Storage::put('file.txt', 'Contents');
这将删除存储/应用程序中的file.txt

Storage::delete('file.txt');
如果要更改根目录,以“storage/app/uploads/”为例,您可以将filesystem.php设置为以下内容:

'disks' => [

    'local' => [
        'driver' => 'local',
        'root'   => storage_path('app/uploads/'),
    ],
    ...
然后,以下方法将文件存储在storage/app/uploads/file.txt中:

Storage::put('file.txt', 'Contents');
Storage::put('file.txt', 'Contents');
这将删除storage/app/uploads目录中的file.txt

Storage::delete('file.txt');

今天我花了很长时间才弄明白:

如果您试图删除用Laravel自己的集合包装器包装的文件列表,您可能需要调用
->all()
,以获取底层数组实例:

// The following is an example scenario
$files = Storage::list('downloads');

$collection = collect($files)->filter(function ($file) {
  return str_contains($file, 'temp');
});

Storage::delete($collection->all()); // Note the "all()" call here

我已经编辑了我的答案。只需将public_path替换为app_pathi dude,您可以将您的邮件id.app\Models\File not found exception
use File;
放在控制器类的顶部,或者在(\File::exists($File_path))\File::delete($File_path);