【问题标题】:Call to undefined function Illuminate\Filesystem\finfo_file()调用未定义函数 Illuminate\Filesystem\finfo_file()
【发布时间】:2017-12-09 06:59:37
【问题描述】:

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

[2017-07-03 16:05:13] 生产。错误:异常 'Symfony\Component\Debug\Exception\FatalErrorException' 在 /home/uksacbor/laravel-projects/attestation/vendor/laravel/framework/src/Illuminate/Filesystem/ 中带有消息 'Call to undefined function Illuminate\Filesystem\finfo_file()'文件系统.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);
}

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

有什么想法吗?

【问题讨论】:

  • 您的测试似乎是在使用不同 PHP 安装的环境中运行的。您可以重新检查。
  • 我没有在生产环境中运行测试,错误似乎是通过用户交互产生的。

标签: php laravel


【解决方案1】:

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

sudo pecl install fileinfo

从命令行编辑 php.ini(可能位于 /etc/php.ini

包含该行

extension=fileinfo.so

别忘了重启网络服务器。根据您的操作系统和网络堆栈,这类似于

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

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

高级功能>选择PHP版本

然后

勾选 fileinfo

旁边的复选框

别忘了点击保存

【讨论】:

    【解决方案2】:

    你应该激活 finfo_file()

    [check this link]

    【讨论】:

      【解决方案3】:

      正如 Michael Hamisi 所说,这是一种由名为 fileinfo 的 PECL PHP 扩展声明的方法,该扩展通常出现在 PHP 安装中。

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

      您应该检查您的安装是否启用了该扩展。 通常,当你安装 composer 时,会触发一个错误,告诉你激活缺少的扩展。

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

      【讨论】:

        【解决方案4】:

        您需要启用文件信息扩展。

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

        【讨论】:

          【解决方案5】:

          正如其他人已经指出如何修复错误本身,我将回答您关于如何找出错误来源的问题。

          错误信息告诉我们,您不是直接调用finfo_file(),而是调用Illuminate/Filesystem/Filesystem 的一个方法,该方法在第254 行使用它。所以您需要从@987654323 搜索您在哪里使用此方法@。

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

          【讨论】:

            【解决方案6】:

            您应该使用WHMDirectAdmin 安装fileinfo

            【讨论】:

              猜你喜欢
              • 2022-01-19
              • 2019-10-31
              • 1970-01-01
              • 1970-01-01
              • 2019-06-11
              • 2021-03-14
              • 2022-09-29
              • 1970-01-01
              • 2015-09-23
              相关资源
              最近更新 更多