Php Laravel:上载.sql文件时数组到字符串的转换
Edit:事实证明,此问题发生在尝试上载.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
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();