laravel 在 tinker 调试成功 但是在代码里运行报错

1). 当前使用的 Laravel 版本?

laravel 8.0

2). 当前使用的 php/php-fpm 版本?

PHP 版本:
7.4.14

3). 当前系统

centos 7.4

2. 问题描述?

最近使用了 php-ffmpeg,在 AppServiceProvider 里写了

    public function register()
    {
        $this->app->singleton('ffmpeg',function (){
            $config = [
                'ffmpeg.binaries'  => '/usr/local/ffmpeg/ffmpeg/bin/ffmpeg',
                'ffprobe.binaries' =>  '/usr/local/ffmpeg/ffmpeg/bin/ffprobe'
            ];
            return FFMpeg::create($config);
        });

        $this->app->singleton('ffprobe',function (){
            $config = [
                'ffprobe.binaries' =>  '/usr/local/ffmpeg/ffmpeg/bin/ffprobe'
            ];
            return FFProbe::create($config);   //这里是第32行
        });
    }

然后在 php artisan tinker 里面 是可以拿到想要的结果

Psy Shell v0.10.9 (PHP 7.4.16 — cli) by Justin Hileman
>>> app('ffprobe')->format('/data/wwwroot/default/nongfu/storage/app/public/Video/2021/11-25/_21112510053528446.mp4')->get('duration');
=> "30.059000"

之前是可以运行的,但因为 linux 环境缺ffmpeg 的库 就重装了一下,这种错误 有什么解决思路么?或者是怎么确定哪里发生问题了呢?

4. 您实际得到的结果?

在接口调用的时候

 "message": "Unable to load FFProbe",
    "exception": "FFMpeg\\Exception\\ExecutableNotFoundException",
    "file": "/data/wwwroot/default/nongfu/vendor/php-ffmpeg/php-ffmpeg/src/FFMpeg/Driver/FFProbeDriver.php",
    "line": 50,
    "trace": [
        {
            "file": "/data/wwwroot/default/nongfu/vendor/php-ffmpeg/php-ffmpeg/src/FFMpeg/FFProbe.php",
            "line": 226,
            "function": "create",
            "class": "FFMpeg\\Driver\\FFProbeDriver",
            "type": "::"
        },
        {
            "file": "/data/wwwroot/default/nongfu/app/Providers/AppServiceProvider.php",
            "line": 32,
            "function": "create",
            "class": "FFMpeg\\FFProbe",
            "type": "::"
        },
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
Summer
最佳答案

命令行里用的是 php-cli , 网站用的是 php-fpm ,本来就是不一样的环境,有不一样的结果很正常。

在代码里使用 exec 调试下更实在一点:

exec("which ffprobe", $output);
dump($output)

exec("which /usr/local/ffmpeg/ffmpeg/bin/ffprobe", $output);
dump($output)

exec("ls -la /usr/local/ffmpeg/ffmpeg/bin/", $output);
dump($output)
2年前 评论
讨论数量: 14

Linux 下 ffmpeg 安装成功了吗?

2年前 评论

@Su

file 我的tinker 命令就是在linux 环境执行的

2年前 评论
Su 2年前
lyl (作者) (楼主) 2年前

可以检查一下ffprobeffmpeg的路径是否正确。

看你发的图路径是/usr/local/ffmpeg/ffmpeg-4.1,而代码里定义的是/usr/local/ffmpeg/ffmpeg

2年前 评论

@caijunduo

file 我后面手动改了文件名,应该没关系吧,没改之前也是这个问题

2年前 评论

@wzx2002 我已经设置好路径了,在 tinker 调试 里面都执行成功了

2年前 评论

$config = [ 'ffprobe.binaries' => '/usr/local/ffmpeg/ffmpeg/bin/ffprobe' ];改成和上面一样的试试

2年前 评论

@wzx2002 和哪里一样啊,那个博客的么? 这个路径是自己服务器上安装的路径,就是这个路径,我觉得 最主要的问题还是为啥 tinker 里面调试成功了,跑代码就报错

2年前 评论
王大牛 2年前
Summer

命令行里用的是 php-cli , 网站用的是 php-fpm ,本来就是不一样的环境,有不一样的结果很正常。

在代码里使用 exec 调试下更实在一点:

exec("which ffprobe", $output);
dump($output)

exec("which /usr/local/ffmpeg/ffmpeg/bin/ffprobe", $output);
dump($output)

exec("ls -la /usr/local/ffmpeg/ffmpeg/bin/", $output);
dump($output)
2年前 评论

@Summer

 exec("sudo which ffprobe", $output);
 exec("sudo php -v",$outpu);
 echo ('whoami');
 dd($output,$outpu);
//打印结果 分别是  [],[],www          

这个是因为 php-fpm 的用户没有 执行权限么? :joy:对linux 不是太了解,照着百度给权限好像也没起作用,还是在 tinker cli 执行 有结果

2年前 评论

问题找到了, 因为我手动改了 ffmpeg 的目录 , 在linux 输入 ffmpeg -vesion 看到配置 文件 --prefix=/usr/local/ffmpeg/ffmpeg-4.1 , 我手动改成/usr/local/ffmpeg/ffmpeg ,好像是这个问题,卸载了重新装就好了

2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!