php – 在类中包装Shell命令的模式

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了php – 在类中包装Shell命令的模式脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
尽管不可行,但使用 PHP的shell命令与非PHP系统命令进行交互仍然是在Web应用程序中快速实现某些结果的常用方法.

有没有人将常见的用例抽象到一个类库(Zend中的某些东西?),它提供了一种更理智/常用的方法来处理它?每当我遇到(或不得不生产)这种代码时,它就是一堆程序性意大利面,一遍又一遍地复制粘贴.我想知道是否(希望)PHP社区提出了一种更好的方法来处理在web / PHP应用程序中使用命令行应用程序.

执行命令行应用程序并不脏.实际上,这是Unix方式.大多数情况下,它比试图重新实现更安全.纯PHP代码中的ImageMagick. (由于其cmdline args的差异,如果你寻找一个很好的exec()抽象,则为 imagemagick is a bad example个案例.)

你可以做的事情并不多.充其量,您可以在方法中汇总输入到外部二进制文件

function exec($args) {
    $args = implode(" ",array_map("escaPEshellcmd",func_get_args()));
    $opts = $this->opts();
    return `{$this->bin} {$args} {$opts}`;
}

所以你只需要在需要的地方调用 – > exec(“ – o”,“$file”).如果特定的cmdline应用程序在其–argument命名方案中具有固有系统,则只能使用专门的exec子方法进一步扩展代码.

根据您的实际使用情况,您可能会隐藏一些标准选项.我在pspell做了这个,你的选项名称与–cmdline = args的关系几乎是1:1:

function opts() {
    $map = array(
       "--ignore" => $this->ignore,"--verbose" => $this->verbose,"--dir={$this->dir}" => isset($this->dir),);
    return implode(" ",array_keys(array_intersect($map,array(1=>1))));
}

exec / popen(适用于各种cmdline程序)的非常通用的抽象类可能不存在.

脚本宝典总结

以上是脚本宝典为你收集整理的php – 在类中包装Shell命令的模式全部内容,希望文章能够帮你解决php – 在类中包装Shell命令的模式所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。