龙空技术网

PHP如何跟linux中的软件交互呢?

PHP武器库 233

前言:

当前各位老铁们对“php字符拼接”可能比较看重,各位老铁们都想要分析一些“php字符拼接”的相关文章。那么小编在网摘上网罗了一些对于“php字符拼接””的相关文章,希望你们能喜欢,同学们快快来了解一下吧!

PHP 如何跟linux的软件交互呢,本质上是通过exec函数去处理的。当然,我们还是要简单分析一下具体场景。

分析场景

大多数情况下,这些需要交互的软件,是要通过shell命令调用的,这类的自然要通过exec去进行交互,然而有一些软件会内置rpc服务和http 的 接口服务,此类的软件是不需要通过exec去交互的,而是php作为一个http客户端去发起请求,这种场景下,我建议使用guzzle扩展进行处理,它使用起来非常优雅,不需要进行复杂的curl编写,推荐guzzle。

另一种场景,就是我们需要exec进行交互,比如ffmpeg来进行视频转码/封面截取、无头libreoffice进行文档转吗、调用常见的系统命令获取状态等等。本文将重点介绍此类场景的解决方案。

特殊的场景

在上面,我们介绍了几个常见的需求和软件,比如调用ffmpeg、无头libreoffice、获取命令状态等,我们先介绍一下对于这几个需求的特殊库。

php-ffmpeg/php-ffmpeg

这是一个专门用来调用ffmpeg的库,本质上还是通过exec去调用,但是直接用exec调用很麻烦,要自己拼接字符串等等,既然有大佬贡献了这样的好用的轮子,我们自然要拿来用。

使用这个库来调用ffmpeg的方法非常简单,没有丑陋的字符串拼接,并且有安全的调用方式:

require 'vendor/autoload.php';$ffmpeg = FFMpeg\FFMpeg::create();$video = $ffmpeg->open('video.mpg');$video    ->filters()    ->resize(new FFMpeg\Coordinate\Dimension(320, 240))    ->synchronize();$video    ->frame(FFMpeg\Coordinate\TimeCode::fromSeconds(10))    ->save('frame.jpg');$video    ->save(new FFMpeg\Format\Video\X264(), 'export-x264.mp4')    ->save(new FFMpeg\Format\Video\WMV(), 'export-wmv.wmv')    ->save(new FFMpeg\Format\Video\WebM(), 'export-webm.webm');
ncjoes/office-converter

这是一个专门又来调用libreoffice的库,能够实现html、pdf、各种文档之间的转换,具体支持的操作如下:

pptx => pdfppt => pdfpdf => pdfdocx => pdf, odt, htmldoc => pdf, odt, htmlxlsx => pdfxls => pdfpng => pdfjpg => pdfjpeg => pdf

使用起来非常的简单:

<?php// 自动加载use NcJoes\OfficeConverter\OfficeConverter;$converter = new OfficeConverter('test-file.docx');$converter->convertTo('output-file.pdf'); //转码输出$converter->convertTo('output-file.html'); //转码输出// 将内部附件解压至指定目录$converter = new OfficeConverter('test-file.docx', 'path-to-outdir');

这个库本身也是利用的libreoffice和openoffice的命令操作,如果你认为这个库不够强大,还有其他扩展可以利用,以后有机会再讲。

linfo/linfo

这个库是专门用来获取系统状态的,比如:网络/torrents/cpu/内存/usb/pci/声卡/文件系统/raid阵列/ipmi/等。他内置了一个案例页面,效果如下:

更重要的是,这个库不仅仅可以在linux上使用,还可以在很多系统平台上使用,让我们避免去调用繁杂的shell命令再去文本匹配。

mikehaertl/php-shellcommand

与上面介绍的几个不同,这是专门用来调用第三方命令的,和exec函数比起来,他让我们写出来的代码更健壮,无需进行各种字符串拼接,并且拥有多种运行模式,健全的输出抓取。

相比exec,他拥有这些好处

捕捉:stdOut,stdErr,exitCode处理复杂的参数支持环境变量和其他参数支持管道资源比如文件或流可以超时执行

使用起来就像下面这样,非常简单。

<?php$command = new Command('/bin/somecommand');// Add arguments with correct escaping:// results in --name='d'\''Artagnan'$command->addArg('--name=', "d'Artagnan");// Add argument with several values// results in --keys key1 key2$command->addArg('--keys', array('key1','key2'));if (!$command->execute()) {    echo $command->getError();} else {    echo $command->getOutput();}

像这样的工具库,PHP还有很多,可以根据自己的喜好挑选,比如:

symfony/process:他有一个实时捕获输出的模式,可以实现随时监听内容来进行其他操作spatie/ssh:这个库并不是直接调用exec命令,而是通过发起一个ssh连接进行操作mrrio/shellwrap:这个库利用PHP的魔术方法实现了非常酷的调用方法

以上就是本文的主要内容,以后有机会,会对上面提到的库一一介绍。

标签: #php字符拼接