欧美xxxx做受欧美_www.xxxx精品_国产一区二区三区蝌蚪_国产原创欧美精品_国产福利精品一区_亚洲精品久久久久久下一站 _久久精品国产网站_久久99精品国产_久久综合给合久久狠狠狠97色69_91久久久久久久久久久

淺析PHP應用程序中正確調用系統命令的方法-實時

來源:php中文網 | 2022-12-19 20:00:30 |

有時你需要使用 PHP 應用程序中的操作系統級命令。讓我們看看我們如何做到這一點,看看我們是否可以讓開發者體驗更好。

在過去的幾年里,我一直專注于我如何編寫代碼以及如何改進它的各個方面。我首先研究如何使與 HTTP 的集成更好、更面向對象。我相信我找到了實現這一目標的方法,現在我將注意力集中在其他地方。【相關推薦:laravel視頻教程】

在某些情況下,你希望在應用程序中使用 OS CLI。在 Web 應用程序或另一個 CLI 應用程序中。過去,我們使用過類似 execpassthrushell_execsystem的方法。然后出現了 Symfony Process 組件,我們得救了。


(資料圖)

Symfony 進程組件使得與操作系統進程集成并獲得輸出變得非常容易。但是我們如何與這個庫集成仍然有點令人沮喪。我們創建一個新進程,傳入一個參數數組,使我們希望運行的命令。讓我們來看看:

$command = new Process(    command: ["git", "push", "origin", "main"],);$command->run();

這種方法有什么問題?好吧,老實說,什么都沒有。但是有沒有辦法改善開發人員的體驗?假設我們從 git 切換到 svn(我不太可能知道)。

為了改善開發人員的體驗,首先,我們需要了解邏輯上用于創建 OS 命令的組件。我們可以將它們分解為:

可執行的參數

我們的可執行文件是我們直接與之交互的東西,例如 php、git、brew 或我們系統上任何其他已安裝的二進制文件。然后爭論是我們如何互動;這些可以是子命令、選項、標志或參數。

因此,如果我們稍微抽象一下,我們就會有一個process和一個command, 它接受參數。我們將使用接口/契約來定義我們的組件來控制我們的工作流程應該如何工作。讓我們從流程契約開始:

declare(strict_types=1);namespace JustSteveKing\OS\Contracts;use Symfony\Component\Process\Process;interface ProcessContract{    public function build(): Process;}

我們這里是說每個進程都必須能夠被構建,并且創建的進程的結果應該是一個 Symfony 進程。我們的流程應該構建一個命令供我們運行,所以現在讓我們看看我們的命令契約:

declare(strict_types=1);namespace JustSteveKing\OS\Contracts;interface CommandContract{    public function toArgs(): array;}

我們希望從命令中得到的主要內容是能夠作為參數返回,我們可以將這些參數作為命令傳遞給 Symfony 進程。

想法已經夠多了,讓我們來看一個真實的例子。我們將使用 git 作為示例,因為我們大多數人應該能夠與 git 命令相關聯。

首先,讓我們創建一個 Git 進程來實現我們剛剛描述的 Process Contract:

class Git implements ProcessContract{    use HandlesGitCommands;    private CommandContract $command;}

我們的流程實現了合約,并有一個命令屬性,我們將使用它允許我們的流程被流暢地構建和執行。我們有一個特點,可以讓我們集中精力為我們的 Git 流程構建和制造事物的方式。讓我們看一下:

trait HandlesGitCommands{    public function build(): Process    {        return new Process(            command: $this->command->toArgs(),        );    }    protected function buildCommand(Git $type, array $args = []): void    {        $this->command = new GitCommand(            type: $type,            args: $args,        );    }}

因此,我們的 trait 展示了流程契約本身的實現,并提供了有關如何構建流程的說明。它還包含一個允許我們抽象構建命令的方法。

到目前為止,我們可以創建一個流程并建立一個潛在的命令。但是,我們還沒有下達命令。我們在 trait 中創建一個新的 Git 命令,它使用 Git 類作為類型。讓我們看看另一個 Git 類,它是一個枚舉。不過,我將展示一個精簡版本 - 實際上,你希望它映射到你希望支持的所有 git 子命令:

enum Git: string{    case PUSH = "push";    case COMMIT = "commit";}

然后我們將它傳遞給 Git 命令:

final class GitCommand implements CommandContract{    public function __construct(        public readonly Git $type,        public readonly array $args = [],        public readonly null|string $executable = null,    ) {    }    public function toArgs(): array    {        $executable = (new ExecutableFinder())->find(            name: $this->executable ?? "git",        );        if (null === $executable) {            throw new InvalidArgumentException(                message: "Cannot find executable for [$this->executable].",            );        }        return array_merge(            [$executable],            [$this->type->value],            $this->args,        );    }}

在這個類中,我們接受來自 Process 的參數,當前由我們的 HandledGitCommands trait 處理。然后我們可以把它變成 Symfony 進程可以理解的參數。我們使用 Symfony 包中的 ExecutableFinder來最大程度地減少路徑中的錯誤。但是,如果找不到可執行文件,我們也想拋出異常。

當我們把它們放在我們的 Git 進程中時,它看起來有點像這樣:

use JustSteveKing\OS\Commands\Types\Git as SubCommand;class Git implements ProcessContract{    use HandlesGitCommands;    private CommandContract $command;    public function push(string $branch): Process    {        $this->buildCommand(            type: SubCommand:PUSH,            args: [                "origin",                $branch,            ],        );        return $this->build();    }}

現在剩下要做的就是運行代碼本身,以便我們可以在 PHP 應用程序中很好地使用 git:

$git = new Git();$command = $git->push(    branch: "main",);$result = $command->run();

Push方法的結果將允許你與symfony進程交互-這意味著你可以在另一端使用命令執行所有排序。我們唯一改變的是圍繞這個過程的創建構建了一個面向對象的包裝器。這使我們能夠很好地開發和維護上下文,并以可測試和可擴展的方式擴展事物。

你多久在應用程序中使用操作系統命令?你能想到任何用例嗎?我已經 在 GitHub 上的存儲庫中發布了示例代碼,以便你可以使用它并查看是否可以改進你的操作系統集成。

一個很好的例子應該是SSH、MySQL,甚至Anable或Terraform!想象一下,如果你可以按計劃高效地運行來自Laravel Artisan的MySQL轉儲,而無需始終使用第三方程序包!

更多編程相關知識,請訪問:編程視頻!!

以上就是淺析PHP應用程序中正確調用系統命令的方法的詳細內容,更多請關注php中文網其它相關文章!

關鍵詞:

欧美xxxx做受欧美_www.xxxx精品_国产一区二区三区蝌蚪_国产原创欧美精品_国产福利精品一区_亚洲精品久久久久久下一站 _久久精品国产网站_久久99精品国产_久久综合给合久久狠狠狠97色69_91久久久久久久久久久
一个色综合网站| 精品视频999| 亚洲一二三区在线观看| 亚洲大片精品永久免费| 9久草视频在线视频精品| 久久久91精品国产一区二区三区| 青青草原综合久久大伊人精品优势 | 欧美美女一区二区三区| 久久成人综合网| 99久久99久久精品国产片果冻| 欧美精品一区二区久久久| 精品影院一区二区久久久| 精品久久五月天| 成人精品视频一区二区三区| 亚洲人成亚洲人成在线观看图片| 色菇凉天天综合网| 日韩av电影免费观看高清完整版 | 在线视频一区二区三区| 国产精品三级在线观看| 男男视频亚洲欧美| 五月天婷婷综合| 亚洲韩国一区二区三区| 成人午夜免费电影| 99久久免费国产| 欧美精品一二三| 欧美精品一区二区在线播放| 欧美亚洲国产一区在线观看网站 | 国产精品久久久一本精品 | 国产精品国产三级国产有无不卡| 欧美一级片在线看| 成人高清免费观看| 精品国产露脸精彩对白| 精品乱人伦小说| 免费在线观看一区| 2欧美一区二区三区在线观看视频 337p粉嫩大胆噜噜噜噜噜91av | 蜜臀av性久久久久蜜臀av麻豆| 久久精品在这里| 91 com成人网| 91在线云播放| 成人av影院在线| 国产高清亚洲一区| 美国av一区二区| 三级成人在线视频| 亚洲成人三级小说| 亚洲欧洲国产日韩| 久久97超碰国产精品超碰| 国产日产亚洲精品系列| 欧美一区二区大片| 亚洲成人免费视频| 1024精品合集| 中文在线一区二区| 久久免费电影网| 精品区一区二区| 欧美va亚洲va香蕉在线| 欧美另类高清zo欧美| 91在线视频18| 99精品国产91久久久久久| 成人精品小蝌蚪| 成人av影院在线| 成人av免费在线播放| 成人免费av在线| 成人黄色小视频| 色综合网色综合| 在线精品视频一区二区三四| 99视频精品在线| 91精品福利视频| 91成人在线精品| 欧美精品vⅰdeose4hd| 制服丝袜中文字幕亚洲| 91福利在线播放| 欧美一区二区三区四区高清 | 亚洲成av人片在线观看无码| 日韩国产欧美一区二区三区| 日韩1区2区日韩1区2区| 国产综合久久久久影院| 春色校园综合激情亚洲| 91丝袜高跟美女视频| 欧美日韩一二区| 国产色产综合产在线视频| 一区二区三区日韩精品| 青青草原综合久久大伊人精品| 国产成人精品一区二区三区四区| 91蝌蚪porny| 337p日本欧洲亚洲大胆色噜噜| 久久精品国产亚洲高清剧情介绍| 亚洲欧美日韩系列| 久久精品国产精品亚洲红杏 | 欧美午夜片在线看| 欧美一区二区三区免费观看视频| 2024国产精品| 日韩精品成人一区二区在线| 粉嫩欧美一区二区三区高清影视| 欧美肥妇bbw| 亚洲一区二区欧美日韩| 不卡电影免费在线播放一区| 日韩精品一区二区在线观看| 亚洲一区二区三区四区在线免费观看| 日韩一级二级三级| 奇米影视一区二区三区小说| 处破女av一区二区| 欧美中文字幕一二三区视频| 精品毛片乱码1区2区3区| 亚洲线精品一区二区三区| 九色|91porny| 欧美日韩免费观看一区三区| 国产精品理论片在线观看| 极品尤物av久久免费看| 欧美一区三区二区| 99久久免费国产| 亚洲综合色网站| 国产在线精品一区二区三区不卡 | 久久久久国产一区二区三区四区| 亚洲夂夂婷婷色拍ww47 | 欧美成人a∨高清免费观看| bt欧美亚洲午夜电影天堂| 日韩精品在线网站| 亚洲综合激情小说| 91久久精品一区二区三| 亚洲视频在线观看三级| 成人动漫av在线| √…a在线天堂一区| 日韩女优电影在线观看| 国产成a人亚洲精| 6080午夜不卡| 亚洲另类一区二区| 麻豆成人久久精品二区三区小说| 91.com在线观看| 亚洲电影中文字幕在线观看| 欧美三级中文字| 蜜臀av性久久久久蜜臀aⅴ流畅| 日韩一区二区高清| 国产成人精品免费在线| 1000部国产精品成人观看| 在线一区二区视频| 免费在线观看精品| 中文字幕+乱码+中文字幕一区| caoporn国产一区二区| 亚洲综合免费观看高清完整版| 欧美精品乱码久久久久久按摩| 九九热在线视频观看这里只有精品| 欧美大片一区二区三区| 93久久精品日日躁夜夜躁欧美| 亚洲国产三级在线| 久久久一区二区三区| 一本色道久久综合亚洲aⅴ蜜桃| 日韩av在线发布| 欧美国产日韩亚洲一区| 欧美视频一区二| 国产精品996| 亚洲私人黄色宅男| 久久免费美女视频| 欧美一区永久视频免费观看| 最新日韩av在线| 久久亚洲欧美国产精品乐播 | 久久综合色天天久久综合图片| 久久久午夜精品| 国产精品成人在线观看| 久久蜜桃一区二区| 欧美激情一区二区三区全黄| 中文字幕一区在线| 国产精品家庭影院| 欧洲av一区二区嗯嗯嗯啊| 久久久精品国产99久久精品芒果 | 亚洲午夜久久久久久久久久久| 国产女同性恋一区二区| 日韩欧美一二三四区| 久久久久99精品一区| 91精品国产免费| 国产精品情趣视频| 国产精品成人午夜| 国产精品久久久久久久久果冻传媒 | 欧美酷刑日本凌虐凌虐| 久久精品免费观看| 一区二区三区日韩在线观看| 一区二区国产视频| 99re成人精品视频| 国产欧美精品一区| 成人的网站免费观看| 亚洲影视在线播放| 五月婷婷欧美视频| 亚洲三级理论片| 精品乱人伦一区二区三区| 黑人巨大精品欧美一区| 亚洲综合网站在线观看| 亚洲成av人片一区二区三区| 在线看日本不卡| 精品盗摄一区二区三区| 国产黄色成人av| 一区二区三区日韩精品视频| 2014亚洲片线观看视频免费| 欧美日韩国产欧美日美国产精品| 午夜在线成人av| 亚洲视频在线观看三级| 91麻豆蜜桃一区二区三区| 欧美成人精品3d动漫h| 久久免费偷拍视频| 国产高清不卡二三区| 亚洲国产欧美日韩另类综合 | 国产亚洲欧洲997久久综合 | 国产 日韩 欧美大片|