调用未定义的函数Illuminate \ Filesystem \ finfo_file()

时间:2017-07-05 14:30:24

标签: php laravel

我在运行的网站上的 laravel.log 文件中显示以下错误。如何确定错误源自何处?由于堆栈跟踪太短,我不确定从哪里开始。

  

[2017-07-03 16:05:13] production.ERROR:异常   'Symfony \ Component \ Debug \ Exception \ FatalErrorException',在/ home / uksacbor / laravel-projects / attestation / vendor / laravel / framework / src / Illuminate / Filesystem /中显示消息'调用未定义的函数Illuminate \ Filesystem \ finfo_file()' Filesystem.php:254   堆栈跟踪:#0 {main}

我使用sublime的全局搜索在网站的文件夹上搜索了finfo_file()的使用时间,我在测试中的帮助程序中使用了它...

private function prepareFileUpload($path, $name)
{
    TestCase::assertFileExists($path);

    $pathInfo = pathinfo($path);

    $copyPath = $pathInfo['dirname'] . $pathInfo['filename'] . '_copy' . $pathInfo['extension'];

    \File::copy($path, $copyPath);

    $finfo = finfo_open(FILEINFO_MIME_TYPE);

    $mime = finfo_file($finfo, $copyPath);

    return new \Illuminate\Http\UploadedFile($copyPath, $name, $mime, filesize($copyPath), null, true);
}

目前,我的测试都在通过。

有什么想法吗?

5 个答案:

答案 0 :(得分:3)

您应该激活finfo_file()

[check this link]

答案 1 :(得分:3)

正如迈克尔·哈米西(Michael Hamisi)所说,这是一种称为fileinfo的PECL PHP扩展声明的方法,该方法通常在PHP安装中存在。

它在Laravel中用于获取有关文件的信息,尤其是在上传情况下。

您应该检查安装中是否启用了扩展名。 通常,在执行作曲家安装时,会触发错误消息,提示您激活缺少的扩展。

/**
 * (PHP >= 5.3.0, PECL fileinfo >= 0.1.0)
 * Return information about a file
 * @link http://php.net/manual/en/function.finfo-file.php

答案 2 :(得分:3)

在自己管理服务器时,应该运行

sudo pecl install fileinfo
从命令行

并编辑php.ini(可能位于 /etc/php.ini

包含行

  

extension = fileinfo.so

不要忘记重新启动Web服务器。根据您的操作系统和Web堆栈,类似

  • 服务apache重新启动
  • 服务httd重新启动
  • 服务nginx重新启动

使用共享主机时,您可能在Web界面中有一个选项可以从那里启用它。例如在directadmin中

高级功能>选择PHP版本

enter image description here

然后

勾选 fileinfo

旁边的复选框

enter image description here

别忘了点击保存

答案 3 :(得分:0)

您需要启用fileinfo扩展名。

请参考:https://stackoverflow.com/a/24565508/7171624

答案 4 :(得分:0)

正如其他人已经指出了如何解决错误本身一样,我将回答您有关如何找出错误来源的问题。

该错误消息告诉我们,您不是直接调用finfo_file(),而是正在调用Illuminate/Filesystem/Filesystem的方法,该方法在第254行使用它。因此,您需要搜索使用此方法的位置Illuminate/Filesystem/Filesystem中的方法。

如果您不直接使用此方法,则可以通过您的依赖关系间接使用它。在这种情况下,您需要在供应商目录中搜索Illuminate/Filesystem/Filesystem中方法的使用情况。