PHP CLI 개발 소개

CLI에 익숙하지 않은 경우 완벽한 소개입니다. 이 튜토리얼에서는 터미널에 단일 명령을 입력하여 외부 API를 실행하고 결과를 구문 분석할 수 있는 명령줄 기반 PHP를 작성하는 방법을 살펴보겠습니다. CLI를 사용하면 다른 비개발자에게 CMD, Powershell, 터미널 또는 기타 명령줄 인터페이스의 한 줄에 포함될 플래그와 변수를 사용하여 코드를 실행할 수 있는 방법을 제공할 수 있습니다.

YouTube에서 보기





이 튜토리얼은 깊이 있는 내용은 아니지만 CLI 및 PHP 개발을 시작하는 데 도움이 될 것입니다.

CLI에서 실행할 코드:

php index.php {postID or NULL} {-c or NULL} {true or null|false}


폴더 구조




index.php
autoload.php
/src/Data.php


클래스용 오토로더 설정



이 자습서에서는 OOP를 사용할 것이므로 자동 로더를 설정하겠습니다. 이 파일은 index.php 파일에서 사용할 클래스와 메소드를 가져올 것입니다. 이전에 이 파일을 더 자세히 설명하는 자습서를 만들었습니다. 더 많은 정보를 원하시면 여기에서 찾을 수 있습니다:



autoload.php

<?php
spl_autoload_register(function ($class){
    $prefix = 'App\\';
    $base_dir = __DIR__ . '/src/';
    $len = strlen($prefix);

    if(0 != strncmp($prefix, $class, $len)) {
        return;
    }

    $relative_class = substr($class, $len);

    $file = $base_dir. str_replace('\\','/', $relative_class) . '.php';

    if(file_exists($file)) {
        require $file;
    }
});


index.php 생성



CLI에서 모든 것이 작동하도록 하려면 코드를 실행할 파일을 만들어야 합니다. 기본적으로 자습서 시작 부분에서 CLI 명령을 사용할 것이므로 index.php를 사용할 수 있는지 확인해야 합니다. 원하는 파일이나 경로를 사용할 수 있지만 이 자습서에서는 기본 CLI 파일에 index.php를 사용합니다.

이 파일에서 CLI 변수를 수집하여 컨트롤러 메서드에 전달합니다. 이 페이지는 매우 중요하며 변수의 존재 여부를 확인할 뿐만 아니라 올바른 형식으로 전달되는지 확인해야 합니다.

index.php

<?php
// php index.php {postID or null} {-c or null} {true or null|false}

use App\Data;

require_once 'autoload.php';

$postID = (isset($argv[1]) ? (int) $argv[1] : 0); // int
$displayComments = isset($argv[2]) && $argv[2] === '-c' ? true : false; // flag -> false
$displayArr = isset($argv[3]) && $argv[3] === 'true' ?: false; //bool

// test dump of variables
var_dump((new Data($postID, $displayComments, $displayArr))->displayData());

// send data to API
var_dump((new Data($postID, $displayComments, $displayArr))->getAPI());


데이터 컨트롤러 설정



간단한 더미 API를 사용하여 데이터를 가져올 것입니다. 무료이며 이를 사용하여 코드를 테스트하거나 자체 API로 변경할 수 있습니다.

이 클래스에서는 index.php CLI 인터페이스에서 변수를 전달합니다. 변수를 설정하고 올바른 데이터가 포함되어 있는지 확인해야 합니다.

src/Data.php

<?php

namespace App;

class Data {

    /**
     * Post ID
     *
     * @var int
     */
    private $postID;

    /**
     * Display comments
     *
     * @var bool
     */
    private $displayComments;

    /**
     * Parse JSON as array or object
     *
     * @var bool
     */
    private $displayArr;

    public function __construct(int $postID = null, bool $displayComments, bool $displayArr){
        $this->postID = $postID;
        $this->displayComments = $displayComments;
        $this->displayArr = $displayArr;
    }

    /**
     * Sample function to display CLI data
     *
     * @return array
     */
    public function displayData(){
        return [
            'postID'=>$this->postID,
            'displayComments'=> $this->displayComments,
            'displayArr'=>$this->displayArr
        ];
    }

    /**
     * Send data to a sample API and return a response
     *
     * @return array|object
     */
    public function getAPI(){
        // setup API URL for the dummy "Blog" API
        $apiURL = 'https://jsonplaceholder.typicode.com/posts';

        // Modify the API URL if a post ID is added
        $postID = ($this->postID != 0 ? '/'.$this->postID : '');

        // Modify the API URL if comments are added
        $displayComments = ($this->displayComments ? '/comments' : '');

        // get the JSON from the API using file_get_contents
        $json = file_get_contents($apiURL.$postID.$displayComments);

        // either push API results as JSON or as PHP Array
        $res = ($this->displayArr === true ? json_decode($json, true) : $json);
        return $res;
    }
}



결론



이제 CLI에 대한 모든 코드가 있으므로 선택한 CMD, Powershell, 터미널 또는 CLI에서 다음 명령을 실행할 수 있습니다.

php index.php {postID or NULL} {-c or NULL} {true or null|false}


일단 실행하면 내 코드를 사용하고 있다면 API에서 결과를 볼 수 있습니다. 모든 블로그 기사 또는 주석이 있는 단일 기사와 JSON 또는 배열 형식. 행운을 빕니다. CLI 개발에 대한 관심이 최고조에 달하기를 바랍니다.

좋은 웹페이지 즐겨찾기