gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 12:58:15 25 4
gpt4 key购买 nike

尽管不可取,但使用 PHP 的 shell 命令与非 php 系统命令交互仍然是在 Web 应用程序中快速取得某些结果的常用方法。

有没有人将常见用例抽象到一个类库中(也许是 Zend 中的东西?),以提供更理智/通用的处理方式?每次我遇到(或必须生成)这种代码时,它都是一堆程序意大利面条,一遍又一遍地复制粘贴。我想知道(希望)PHP 社区是否提出了一种更好的方法来处理在您的 web/php 应用程序中使用命令行应用程序。

最佳答案

执行命令行应用程序并不脏。事实上,这是 Unix 的方式。大多数情况下,它比尝试重新实现例如更明智。纯 PHP 代码中的 ImageMagick。 (由于其 cmdline args 的差异,imagemagick is a bad example 如果您寻找一个不错的 exec() 抽象。)

您无能为力。充其量您可以在一种方法中总结输入/输出到外部二进制文件:

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 命令的模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3105670/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com