Archives by date

You are browsing the site archives by date.

【PHP】コンソール上の標準出力に色を付ける。

めも。

下記のようにANSI エスケープシーケンスを用いる。

以下例。

$str = 'ほげ';

// 文字を赤くする
echo "\033[0;31m$str\033[0m";

// 文字の背景を赤くする
echo "\033[41m$str\033[0m"

// 文字の色を反転させる
echo "\033[7m$str\033[0m";

といった感じ。

ルールは下記の通り。

\033[コードm文字列\033[0m

コードの部分は下記のようなものが指定可能

■文字色

Black 0;30
Blue 0;34
Green 0;32
Cyan 0;36
Red 0;31
Purple 0;35
Brown 0;33
Light Gray 0;37
Dark Gray 1;30
Light Blue 1;34
Light Green 1;32
Light Cyan 1;36
Light Red 1;31
Light Purple 1;35
Yellow 1;33
White 1;37

■背景色

Black 44
Cyan 46
Red 41
Purple 45
Brown 43
Light Gray 47

■その他

下線 4
色の反転 7

 

【PHP】コンソールの標準出力で値の入力を受け取る。

めも。

// 警告文を出す際のなんらかの条件式
if(true) {
	// コンソール上に表示する出力文
	echo '警告文 [y/n] : ';
	$input = null;
	while(1) {
		$input = fgets(STDIN, 4096);
		if($input == "n\n" || $input == "no\n") {
			// 処理を終了する
			die();
		}
		if($input == "y\n" || $input == "yes\n") {
			// 処理を続行する
			break;
		}
		echo '[y] [yes] [n] [no] のいずれかを入力してください : '; 
	}
}

こんな感じでOK。
ちなみにSTDINはstdinへのオープン済みストリーム。そのためfopenなどでのストリームオープン無しに利用することが可能。
fgets(STDIN)とするとその地点で入力待機状態になるため、コンソール上から値を入力することができる。

 

【PHP】glob()関数の取得結果からファイルのみを抽出する。

めも。

前回のエントリ←で書いたディレクトリ内再帰取得関数などでファイルリストを取得した後に。

$list = glob('/path/to/dir');
$list = array_filter($list, 'is_file');

シンプルだね。

 

【PHP】指定したディレクトリ下のファイルを再帰的に取得する。

めも。

下記の再帰関数にパスを渡せばOK。

function scanDir($dir) {
	$list = $tmp = array();
	foreach(glob($dir.'*/', GLOB_ONLYDIR) as $child) {
		if ($tmp = self::scanDir($child)) {
			$list = array_merge($list, $tmp);
		}
	}
	foreach(glob($dir.'{*.*}', GLOB_BRACE) as $file) {
		$list[] = $file;
	}
	return $list;
}