Bash в php exec на веб-странице не окрашивает файлы png и mp3 в Linux

У меня есть код вроде этого в php:

header("Content-Type: text/plain"); exec("/bin/bash -c 'ls --color=always'", $result); echo implode("\n", $result); 

и у меня есть результат (побег не видно)

 Makefile README Yann Tiersen - Comptine d'un autre ete L'apres midi.mp3 bush-src.js bush.js bush.min.js [0m[01;34mcgi-bin[0m config.json [01;34mcss[0m favicon.ico foo.png index.php [01;34mlib[0m ls.txt test.php test.php~ [01;32mtest.txt[0m 

Он показывает escape-коды ANSI для каталогов и исполняемых файлов, но когда я вызываю из командной строки

 php -r "exec('bash -c \"ls --color=always\"', \$result);echo implode(\"\\n\", \$result);" | less 

У меня есть это:

 bush.js bush.min.js bush-src.js ESC[0mESC[01;34mcgi-binESC[0m config.json ESC[01;34mcssESC[0m favicon.ico ESC[01;35mfoo.pngESC[0m index.php ESC[01;34mlibESC[0m ls.txt Makefile README test.php test.php~ ESC[01;32mtest.txtESC[0m ESC[00;36mYann Tiersen - Comptine d'un autre ete L'apres midi.mp3ESC[0m 

png и mp3 имеют коды ANSI escapes, почему php exec с веб-страницы не дает это как возвращение?

3 Solutions collect form web for “Bash в php exec на веб-странице не окрашивает файлы png и mp3 в Linux”

У вас, вероятно, есть переменная среды $LS_COLORS определенная где-то в ~/.bashrc / ~/.zshrc … (возможно, через вызов eval "$(dircolors)" ).

php который вы запускаете в командной строке, наследует среду вашей оболочки, включая переменную $LS_COLORS .

В то время как тот, который запускается apache2 , наследует среду apache2 , у которой вряд ли будет $LS_COLORS . bash не читает ~/.bashrc (и в любом случае это будет ~/.bashrc пользователя, использующего apache, если он это сделал), когда он не запускается в интерактивном режиме (за исключением случаев с угловыми случаями, например, при вызове sshd / rshd / telnetd ).

Обратите внимание, что php exec() уже запускает оболочку, поэтому вам не нужно запускать другую (особенно bash которая является самой медленной оболочкой на западе).

  exec('ls --color=always', $result); 

должно быть достаточно.

 $ strace -fe execve php -r 'exec("bash -c echo\ test");' execve("/usr/bin/php", ["php", "-r", "exec(\"bash -c echo\\ test\");"], [/* 49 vars */]) = 0 [pid 3608] execve("/bin/sh", ["sh", "-c", "bash -c echo\\ test"], [/* 49 vars */]) = 0 [pid 3608] execve("/bin/bash", ["bash", "-c", "echo test"], [/* 48 vars */]) = 0 

это потому, что он не отправляет html, а текст

В моем файле .bashrc есть:

 if [ -x /usr/bin/dircolors ]; then eval "`dircolors -b`" fi 

которые окрашивают файлы.

  • Не удается получить доступ к веб-странице из локальной сети
  • Debian: обновлено до php 5.3 и потеряно phpcli, php-pear и т. Д.
  • Downprade PHP 5.4 -> 5.3 на CentOS 5.10
  • Медленное разрешение DNS от curl / lynx и т. Д.
  • Файл, содержащий структуру каталогов
  • Проблемы безопасности
  • Как я могу назвать веб-службу .NET с PHP?
  • Почему apt-get upgrade не устанавливает последнюю версию PHP?
  • Как извлечь из linux некоторые группы захвата, используя командную строку в режиме php / preg?
  • Сценарий для удаления файлов, не соответствующих определенным именам файлов
  • php: команда не найдена на centos
  • Linux и Unix - лучшая ОС в мире.