安装ThinkPHP5.1并在框架中使用FFmpeg视频处理工具遇到的问题和解决办法

一:安装ThinkPHP5.1框架

问题一:

安装方法有很多,我这里使用composer安装的,但是遇到了问题,出现了报错

安装方法可是查看 https://www.kancloud.cn/manual/thinkphp5_1/353948

php 复制代码
composer create-project topthink/think blog 5.1.x

PHP Warning:  putenv() has been disabled for security...........

解决办法:

修改PHP配置文件,将 putenv() 函数移除disable_functions即可

修改之前:

修改之后:去掉putenv

问题二:

这个问题解决了,还是遇到了下一个问题

报错:

php 复制代码
The Process class relies on **proc_open**, which is not available on your PHP in ........

找到配置文件删除 proc_open

同理还有 exec,system

进行相同的删除之后保存,重启PHP服务,再执行安装命令即可。

二:FFmpeg

什么是FFmpeg?

FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多code都是从头开发的。FFmpeg在Linux平台下开发,但它同样也可以在其它操作系统环境中编译运行,包括Windows、Mac OS X等。这个项目最早由Fabrice Bellard发起,2004年至2015年间由MichaelNiedermayer主要负责维护。许多FFmpeg的开发人员都来自MPlayer项目,而且当前FFmpeg也是放在MPlayer项目组的服务器上。项目的名称来自MPEG视频编码标准,前面的"FF"代表"Fast Forward"。 FFmpeg编码库可以使用GPU加速。

引用:https://baike.baidu.com/item/ffmpeg/2665727

因公司项目需求需要对视频做处理,获取相关信息等,需要使用FFmpeg

首先需要在服务器中安装FFmpeg

centos7安装ffmpeg

powershell 复制代码
sudo rpm --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro
sudo rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.el7.nux.noarch.rpm

sudo yum install ffmpeg ffmpeg-devel -y

查看环境变量是否配置成功

powershell 复制代码
ffmpeg -version


在ThinkPHP5.1框架中使用该扩展

在项目中使用Composer快速安装PHP-FFMpeg

php 复制代码
composer require php-ffmpeg/php-ffmpeg

基本使用

注意:tp5需要全部添加斜杠,比如:

php 复制代码
$ffmpeg = \FFMpeg\FFMpeg::create();

问题一:

但是出现了如下报错

php 复制代码
Unable to load FFProbe

解决办法:进行程序运行目录的配置

使用 whereis ffmpeg 查看FFmpeg运行目录

php 复制代码
$FFMpeg = \FFMpeg\FFMpeg::create([
        'ffmpeg.binaries' => '/usr/bin/ffmpeg',	//FFmpeg的运行目录
        'ffprobe.binaries' => '/usr/bin/ffprobe'	//ffprobe的运行目录
]);

问题二:

报错:

php 复制代码
file_exists(): open_basedir restriction in effect. File(/usr/bin/ffprobe) is not within the allowed path(s)

解决办法:

参照:http://053086.com/106.html
方法一:

在网站设置里把'防跨站攻击'勾选去掉: 将网站目录设置为/www/wwwroot/网站文件目录/public 运行目录设置为/ 去掉防跨站攻击(open_basedir)的对勾。

然后到软件管理------找到所安装的PHP------设置------重启即可:

方法二:

is not within the allowed path(s) 意思是没权限访问那个文件夹

解决方法:

每个网站路径下面都有一个 .user.ini 文件.

里面的内容为

objectivec 复制代码
open_basedir=/www/wwwroot/xxx.com/:/tmp/:/proc/

这个代表本网站可以访问的路径

如果需要添加其他路径.可以直接在后面添加即可,每个路径之间用:隔开

添加以后 重启下Nginx即可生效. 其他环境应该也都一样.

到此已经完成有关工作

但是:

在 TP 以前的版本都会提供些 系统常量 用于快捷操作

比如 上传图片需要的公共目录路径 但是 TP5.1 砍掉了这些

所以导致直接使用 ROOT_PATH 失效,FFmpeg save frame 失败

解决方法:

5.1版本取消了所有的系统常量,原来的系统路径变量改为使用Env类获取(需要引入think\facade\Env

php 复制代码
 "app_path=========".Env::get('app_path')."</br>";
 "root_path=========".Env::get('root_path')."</br>";
 "think_path=========".Env::get('think_path')."</br>";
 "config_path=========".Env::get('config_path')."</br>";
 "extend_path=========".Env::get('extend_path')."</br>";
 "vendor_path=========".Env::get('vendor_path')."</br>";
 "runtime_path=========".Env::get('runtime_path')."</br>";
 "route_path=========".Env::get('route_path')."</br>";
 "module_path=========".Env::get('module_path')."</br>";

所有问题都解决了!!!

相关推荐
BingoGo18 小时前
PHP 泛型之殇 泛型 RFC 提案被拒绝
后端·php
JaguarJack18 小时前
PHP 泛型之殇 泛型 RFC 提案被拒绝
后端·php
用户3074596982072 天前
PHP 扩展——从入门到理解
php
鹏仔先生2 天前
拷贝漫画APP下载页PHP程序,后台带免费AI写作
php
云水一下2 天前
从零开始学 PHP 系列(一):PHP 的前世今生与开发环境搭建
开发语言·php
xingpanvip2 天前
星盘接口开发文档:本命盘接口指南
android·开发语言·css·php·lua
酉鬼女又兒3 天前
零基础入门计算机网络运输层:端到端通信核心作用、端口号分类规则、复用分用工作机制及UDP与TCP协议全方位对比详解
网络·网络协议·tcp/ip·计算机网络·考研·udp·php
dog2503 天前
不要再继续优化 TCP
网络协议·tcp/ip·php
源之缘-OFD先行者3 天前
破界渲染:WinForm下的FFmpeg+Vortice极速推流引擎
ffmpeg·winform·推流·h264
Channing Lewis3 天前
PHP 解析 Excel 的那些坑:一次“行号错位”引发的数据丢失
开发语言·php·excel