Laravel 无法创建根目录
我已经搜索过这个问题。但每个问题/博客上的任务都不同。所以这些答案或解决方案与我无关 首先,这里是我的任务细节 用户在请求中上载CSV文件。我使用laravel的文件系统(本地驱动程序)存储该文件 因此,CSV文件将存储为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
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数据创建
根据我的说法,这里有一些可能的方法来解决这个问题
akshay
作为所有者上载文件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