Я столкнулся с ошибкой, из-за которой цвета ANSI не отображаются при включении файла.
Следующая команда bash работает как положено (прямой bash):
echo -e "\033[31m some colored text \033[0m some white text" # Bash command displays fine
Следующая команда, запускаемая из командной строки, также работает нормально (интерпретатор php, прямой ввод команды через cli):
php -r 'echo "\033[31m some colored text \033[0m some white text \n";' # PHP from console displays fine
Включение файла не работает.
Содержание тестового файла:
<?php
//fails
$test = '"\033[31m some colored text \033[0m some white text \n"';
echo $test;
//escaped backslashes, also fails
$test = '"\\033[31m some colored text \\033[0m some white text \n"';
echo $test;
Включая такой файл из командной строки:
php index.php
Или включая это из командной строки:
php -f index.php
Всегда производит это:
"\033[31m some colored text \033[0m some white text \n""\033[31m some colored text \033[0m some white text \n"
Ни разрывы строк, ни цвета консоли не отображаются должным образом. Что является причиной того, что это задыхается конкретно, когда файл запускается, а не вводится непосредственно командой, либо из bash, либо из PHP в командной строке?
Env:
Я использую PHP 7.0 в iTerm на OSX, но тестирование на нативном терминале и zsh также не удается.
Я уже исследовал эту проблему и исключил все следующие
\e
, \033
, а также \x1B
все отображаются правильно. Все они были предприняты, и ни один из них не имеет никакого значения.\033[
а также \\033[
терпит неудачу.Редактировать:
Как отмечалось в некоторых комментариях, вышеприведенное указывается в двойных кавычках Одинарные кавычки также не работают, хотя другие пользователи указывают, что это работает для них, что заставляет меня полагать, что это какая-то таинственная проблема неправильной конфигурации, а не строгая проблема языка PHP. Обновленный источник по запросу:
<?php
//fails
$test = "\033[31m some colored text \033[0m some white text \n";
echo $test;
//escaped backslashes, also fails
$test = "\\033[31m some colored text \\033[0m some white text \n";
echo $test;
В любом случае дает одинаковые результаты:
Задача ещё не решена.
Других решений пока нет …