我在运行的网站上的 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);
}
目前,我的测试都在通过。
有什么想法吗?
答案 0 :(得分:3)
您应该激活finfo_file()
答案 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堆栈,类似
使用共享主机时,您可能在Web界面中有一个选项可以从那里启用它。例如在directadmin中
高级功能>选择PHP版本
然后
勾选 fileinfo
旁边的复选框别忘了点击保存
答案 3 :(得分:0)
您需要启用fileinfo扩展名。
答案 4 :(得分:0)
正如其他人已经指出了如何解决错误本身一样,我将回答您有关如何找出错误来源的问题。
该错误消息告诉我们,您不是直接调用finfo_file()
,而是正在调用Illuminate/Filesystem/Filesystem
的方法,该方法在第254行使用它。因此,您需要搜索使用此方法的位置Illuminate/Filesystem/Filesystem
中的方法。
如果您不直接使用此方法,则可以通过您的依赖关系间接使用它。在这种情况下,您需要在供应商目录中搜索Illuminate/Filesystem/Filesystem
中方法的使用情况。