尽管不可行,但使用
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程序)的非常通用的抽象类可能不存在.