【问题标题】:Laravel: Array to string conversion while uploading .sql filesLaravel:上传.sql文件时数组到字符串的转换
【发布时间】:2016-02-14 00:05:36
【问题描述】:

编辑:事实证明这个问题是在尝试上传 .sql 文件时发生的。不是文件名。

当我尝试上传具有以下名称的文件时:forge_2016-02-08_--USERS THOUGH.sql 我在下面显示此错误:

FileinfoMimeTypeGuesser.php 第 69 行中的 ErrorException:

数组到字符串的转换

在 HandleExceptions->handleError('8', '数组到字符串的转换', '/home/forge/example.com/vendor/symfony/http-foundation/File/MimeType/FileinfoMimeTypeGuesser.php', '69' , array('path' => '/tmp/phppkDGK8', 'finfo' => object(finfo)))

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

在 finfo->file('/tmp/phppkDGK8') 在 FileinfoMimeTypeGuesser.php 第 69 行 在 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;

请帮助大家。我不知道为什么会这样。

【问题讨论】:

  • 您真的要遵循您使用的$name 约定吗?
  • @JilsonThomas 是的,为什么?有什么问题吗?
  • 我怀疑错误是否存在。您可以在 $name 创建前后尝试dd('ok'); 吗?只是想看看错误在哪里。 ?
  • 错误在$mimeType = $file->getMimeType();
  • 你能检查 $request->file('file')->isValid() 吗?

标签: php arrays laravel


【解决方案1】:

我通过修改修复了它

$mimeType = $file->getMimeType(); 

$mimeType = $file->getClientMimeType();

这解决了它。

【讨论】:

  • 方法名称getClientMimeType 听起来像这样只会让你得到客户端发送的 MIME 类型——这可能很危险,因为它可能允许某人上传你不知道的类型的文件'不 想要,通过简单地伪造 MIME 类型。所以这绝对是不是我所说的问题的“修复”。
  • 如果文件是 sql 文件或根本没有扩展名,则使用 getMimeType 会显示数组到字符串的转换错误。他们上传的文件存储在 storage 文件夹中。如果我允许他们上传任何类型的文件,而我只是将其存储在存储文件夹中而不运行它,这对我有什么危险?我只是好奇。谢谢。
  • 所以你甚至会允许用户上传.php 文件?从外观上看,您似乎保留了原始文件扩展名 - 因此,如果这些上传文件进入一个可通过 HTTP 访问的目录,并且 PHP 代码像往常一样被解析为以 .php 结尾的文件,则用户可以上传并执行 任何他们喜欢的任意 PHP 代码……
  • 上传的文件存放在storage文件夹中,不能通过HTTP访问。那安全吗?
猜你喜欢
  • 2021-02-05
  • 2016-04-04
  • 2020-10-23
  • 1970-01-01
  • 2016-07-08
  • 1970-01-01
  • 1970-01-01
  • 2013-11-29
相关资源
最近更新 更多