Laravel 无法创建根目录

Laravel 无法创建根目录,laravel,laravel-5,file-permissions,laravel-artisan,laravel-filesystem,Laravel,Laravel 5,File Permissions,Laravel Artisan,Laravel Filesystem,我已经搜索过这个问题。但每个问题/博客上的任务都不同。所以这些答案或解决方案与我无关 首先,这里是我的任务细节 用户在请求中上载CSV文件。我使用laravel的文件系统(本地驱动程序)存储该文件 因此,CSV文件将存储为storage/app/requests/{$userRequest->id}/input.CSV。我已经检查了请求目录的所有者,它是www-data 现在,我在cronjobs中设置了一些artisan命令来处理用户请求。我必须将流程的输出存储在该请求目录中,即,storag

我已经搜索过这个问题。但每个问题/博客上的任务都不同。所以这些答案或解决方案与我无关

首先,这里是我的任务细节

用户在请求中上载CSV文件。我使用laravel的文件系统(本地驱动程序)存储该文件

因此,CSV文件将存储为
storage/app/requests/{$userRequest->id}/input.CSV
。我已经检查了
请求
目录的所有者,它是
www-data

现在,我在cronjobs中设置了一些artisan命令来处理用户请求。我必须将流程的输出存储在该请求目录中,即,
storage/app/requests/{$userRequest->id}/output/output_1.csv

$file = 'requests/' . $userRequest->id . '/output/' . $outputfilename . '.csv';
\Storage::put($file, $content);
但在创建输出文件时,它会抛出错误

无法创建根目录

我知道原因。这是因为运行artisan命令的所有者。Artisan命令由另一个用户运行(
akshay
),而
请求
目录由www数据创建

根据我的说法,这里有一些可能的方法来解决这个问题

  • 由www数据用户运行artisan命令
  • 创建请求目录,并将用户
    akshay
    作为所有者上载文件
  • 许多用户建议更改目录的所有者。e、 g。但是我们可以看到,在我的例子中,目录的创建是完全动态的。所以我不能这么做。但我不知道如何做任何上述与拉威尔

    我更喜欢选项(2),因为只有
    www-data
    用户才能完成“请求文件上传”。所有其他执行将由
    akshay
    用户完成。e、 我只需要上传一次文件。但我必须将进程输出存储500次


    如果有人知道答案,我们将不胜感激。

    这与目录所有者无关。我曾经有过这个问题。必须检查使用File::makeDirectory方法创建的目录是否不存在:

      File::exists(storage_path($csvPath )) or File::makeDirectory(storage_path($csvPath ));
    
    因此,您必须首先从请求中获取文件。请为其命名。然后确定文件应保存的路径。然后把那个目录。然后将文件移到那里。如果上传文件的扩展名是.csv,您只需通过以下$file->getClientOriginalExtension()获得该扩展名,然后保存文件。如果原始扩展名不是csv,请通过.csv将其设置为您自己的扩展名,您应该执行以下类似代码的操作:

          $file = $request->file('csv_file');
    
          $name = $outputfilename . "." .$file->getClientOriginalExtension();
    
          $csvPath = '/requests/' . $userRequest->id . '/output/';
    
          File::exists(storage_path($csvPath )) or File::makeDirectory(storage_path($csvPath ));
    
          $file->move(storage_path() . '/requests/' . $userRequest->id . '/output/', $name);
    
    因此,请确保首先检查目录是否存在,然后通过检查目录是否存在来创建目录

    如果使用laravel 5.3版或更高版本,则要访问该csv_文件,请在命令行中键入以下命令:

    php artisan storage:link
    
    这将在公共目录中创建一个名为storage的存储链接。这样您就可以从那里访问该文件。如果您通过public/storage/删除或更新文件。。。它会自动对存储/app/…中的文件进行更改。。。路径


    希望能有帮助

    在为此绞尽脑汁一整天之后,我决定使用简单的解决方案:

    为www数据用户创建cronjob

    sudo -u www-data cronjob -e
    

    我希望这会有所帮助,在处理cron作业、artisan命令和目录时,我真的找不到最佳解决方案。

    我的系统在Debian框上引发了此异常,因为路径不存在,因为没有重新装载。(因此
    mount-a
    作为根目录工作。)

    sudo -u www-data cronjob -e