Php Laravel:上载.sql文件时数组到字符串的转换

Php Laravel:上载.sql文件时数组到字符串的转换,php,arrays,laravel,Php,Arrays,Laravel,Edit:事实证明,此问题发生在尝试上载.sql文件时。不是文件名。 当我尝试上载一个名为:forge\u 2016-02-08\u的文件时--尽管是用户.sql我在下面显示了此错误: FileinfoMimeTypeGuesser.php第69行出现错误异常: 数组到字符串的转换 及 在HandleExceptions->handleError('8','Array to string conversion','/home/forge/example.com/vendor/symfony/ht

Edit:事实证明,此问题发生在尝试上载.sql文件时。不是文件名。

当我尝试上载一个名为:
forge\u 2016-02-08\u的文件时--尽管是用户.sql
我在下面显示了此错误:

FileinfoMimeTypeGuesser.php第69行出现错误异常:

数组到字符串的转换

在HandleExceptions->handleError('8','Array to string conversion','/home/forge/example.com/vendor/symfony/http foundation/File/MimeType/fileinfomimetypeguester.php','69',Array('path'=>'/tmp/phppkDGK8','finfo=>object(finfo)))

在FileinfoMimeTypeGuesser.php第69行中的finfo->file('/tmp/phppkDGK8')

在FileinfoMimeTypeGuesser.php第69行中的finfo->file('/tmp/phppkDGK8') 在MimeTypeGuesser.php第139行中的FileinfoMimeTypeGuesser->guess('/tmp/phppkDGK8')

我不知道为什么会发生这种错误。这是我的上传代码:

    $baseDir = storage_path('uploads');

    $file = $request->file('file');
    $mimeType = $file->getMimeType();
    $name = str_random(6) . time() . '-' . str_replace(' ', '_', Str::ascii($file->getClientOriginalName()));
    $file->move($baseDir, $name);

    $path = $baseDir . '/' . $name;
    $data = ['path' => $path, 'ip' => userIP(), 'name' => $file->getClientOriginalName(), 'mime' => $mimeType, 'size' => $file->getClientSize()];
    $status = Uploads::create($data);

    if ($status) {
          $su = true;

请帮帮我。我不知道为什么会发生这种情况。

我通过更改

$mimeType = $file->getMimeType(); 


这就解决了问题。

你真的想遵循你使用的
$name
惯例吗?@jilsontomas是的,为什么?有什么问题吗?我怀疑是否有错误。你能试着
dd('ok')在$name创建之前和之后?只是想看看错误在哪里?错误位于
$mimeType=$file->getMimeType()
能否检查$request->file('file')->isValid()?方法名
getClientMimeType
听起来似乎只会获取客户端发送的MIME类型–这可能很危险,因为它可能允许某人通过简单地伪造MIME类型来上载您不想要的类型的文件。因此,这肯定不是我所说的“修复”问题。如果文件是sql文件或根本没有扩展名,则使用
getMimeType
显示数组到字符串的转换错误。他们上载的文件存储在存储文件夹中。如果我允许他们上传任何类型的文件,而我只是将其存储在存储文件夹中而不运行它,这对我有什么危险?我只是好奇。谢谢。你甚至允许用户上传
.php
文件?从外观上看,您似乎保留了原始的文件扩展名–因此,如果这些上传文件进入一个目录,在该目录中可以通过HTTP访问,并且PHP代码会像往常一样解析为以
.PHP
结尾的文件,用户可以上传并执行任意PHP代码…上传的文件存储在存储文件夹中,无法通过HTTP访问。安全吗?
$mimeType = $file->getClientMimeType();