定制 dealnews/console 二次开发

按需修改功能、优化性能、对接业务系统,提供一站式技术支持

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

dealnews/console

Composer 安装命令:

composer require dealnews/console

包简介

Utilities for creating console applications

README 文档

README

Command Line Arguments

#!/bin/env php
<?php

/**
 * This is a test app called test.php
 */

use \DealNews\Console\Console;

$console = new Console(
    array(
        "copyright" => array(
            "owner" => "DealNews.com, Inc.",
            "year" => "1997-".date("Y")
        ),
        "help" => array(
            "header" => "This is a test app"
        )
    ),
    array(
        "s" => array(
            "description" => "Some option called -s",
            "param" => "SPARAM",
            "optional" => Console::ONE_REQUIRED
        ),
        "e" => array(
            "description" => "Some option called -e",
            "param" => "EPARAM",
            "optional" => Console::ONE_REQUIRED
        ),
        "long" => array(
            "description" => "Some long option called --long",
            "param" => "LONG",
            "optional" => Console::OPTIONAL
        ),
    )
);

$console->run();

?>

You get -h for FREE! Example help output:

$ php test.php -h
This is a test app
USAGE:
  test.php  -h [-e EPARAM | -s SPARAM] [--long LONG] [-q] [-v]

OPTIONS:
   -e     EPARAM  Some option called -e
   -h             Shows this help
  --long  LONG    Some long option called --long
   -q             Be quiet. Will override -v
   -s     SPARAM  Some option called -s
   -v             Be verbose. Additional v will increase verbosity. e.g. -vvv

Copyright DealNews.com, Inc.  1997-2015

Verbosity

You also get -v and -q for FREE!

<?php
if($console->verbosity >= Console::VERBOSITY_VERBOSE){
    // Write stuff out
}

// Or use the console's write method and let it decide
$console->write("Normal output");
$console->write("Normal output", Console::VERBOSITY_NORMAL);
$console->write("Verbose output", Console::VERBOSITY_VERBOSE);
$console->write("Info output", Console::VERBOSITY_INFO);
$console->write("Debug output", Console::VERBOSITY_DEBUG);
?>

If -q is set on the command line, verbosity will be set to quiet and write() will not output anyting.

The verbosity level is controlled by how many -v appear on the command line.

The verbosity setting also controls what level of error messages the Console class will throw when encountering an error.

Checking options

<?php
// You can use two methods to check options
$eValue = $console->getOpt("e");
if($eValue){
    // do stuff for e
}
// or simply use the object
if($console->long){
    // do stuff for long
}
?>

Required vs Optional

Command line options can have three different settings for the optional argument.

  • OPTIONAL - Totaly optional argument
  • REQUIRED - Must always be present
  • ONE_REQUIRED - At least one of the options of this type must be provided

PID file management

<?php
// check there is no other PID running this script. By default, the
// command line arguments are used to build a unique PID file name.
// You can disable this by passing false. You can also, pass in a
// second parameter that is a unique id for this script that will
// be used to create the pid file name.
$status = $console->checkPid();
if($status !== Console::PID_OK){
    /**
     * We could do more here for the other statuses as well.
     * PID_OTHER_RUNNING
     * PID_OTHER_NOT_RUNNING
     * PID_OTHER_UNKNOWN
     */
    fputs(STDERR, "A PID file already exists for this script");
    exit(1);
}
?>

User Feedback

Progress Meter

<?php
// Show the status of some progress
// Includes elapsed time and estimated time to completion
use \DealNews\Console\Status;
$total = 100000;
for ($x=1; $x<=$total; $x++){
    Status::progress($x, $total);
    usleep(100);
}
?>

Example output:

[======>      23%              ] 23k/100k ET: 15 sec ETC: 50 sec

Spinner

<?php
// Unsure how long something will run? Just show a spinner
use \DealNews\Console\Status;
$total = rand(10000, 30000);
for ($x=1; $x<=$total; $x++) {
    Status::spinner();
    usleep(100);
}
// clear the line after the spinner is done
Status::clearLine();
?>

User Input

Check For Interactivity

<?php
use \DealNews\Console\Interact;
if (Interact::isInteractive()) {
    // do stuff on the console like show status and ask questions
}
?>

Ask For Input

You can ask the user to type things. If you pass true for the second argument, the user's input will not be echoed in the terminal.

<?php
use \DealNews\Console\Interact;
$answer = Interact::prompt("What is the secret word?", true);
if ($answer == "secret") {
    $console->write("Yay! You got it!");
} else {
    $console->write("Boo! That is wrong!");
}
?>

Ask Yes or No Questions

<?php
use \DealNews\Console\Interact;
if (!Interact::confirm("Do you want to continue?")) {
    exit(0);
}
?>

dealnews/console 适用场景与选型建议

dealnews/console 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 20.11k 次下载、GitHub Stars 达 1, 最近一次更新时间为 2015 年 07 月 28 日, 在 PHP 生态内属于活跃度较高的组件。

它主要适用于以下技术方向: 「getopt」 「pid」 「status」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。

我们在过去多个企业项目中使用过 dealnews/console 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。

围绕 dealnews/console 我们能提供哪些服务?
定制开发 / 二次开发

基于 dealnews/console 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。

BUG 修复 & 性能优化

线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。

项目外包 & 长期维护

承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。

yvsm@zunyunkeji.com QQ:316430983 微信:yvsm316 西安尊云信息科技 · 专注 PHP / Go / 分布式系统研发

统计信息

  • 总下载量: 20.11k
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 1
  • 点击次数: 44
  • 依赖项目数: 1
  • 推荐数: 0

GitHub 信息

  • Stars: 1
  • Watchers: 2
  • Forks: 1
  • 开发语言: PHP

其他信息

  • 授权协议: BSD-3-Clause
  • 更新时间: 2015-07-28