Eu tenho um servidor web em uma rede local (headless Mac-Mini), executando um sistema de POS baseado na web. Quero oferecer uma possibilidade aos funcionários regulares da loja, trocar manualmente a impressora térmica de recibos do caixa 1 para o caixa 2, em caso de falta de papel ou outros problemas de impressão, com o resultado, que o cliente pode sair da loja com o recibo, sem precisar esperar pelo rolo de papel alterado (até 5 mnts.) ou chegada de administrador de rede (até 5 horas) :-) A solução atual é uma selectbox, que é gerada assim (simplificada para melhor entendimento):

<?php

$printers = exec("lpstat -a | cut -f1 -d ' ' >printer.txt");
$p = file('printer.txt');

$tmp = '<select name="printer" autocomplete="off">';
$tmp .= '<option> --- select printer --- </option>';
foreach($p AS $printer) $tmp .= '<option value="' . $printer . '">' . $printer . '</option>';
$tmp .= '</select>';

echo $tmp;

?>

Minha pergunta é, como seria possível pegar as impressoras listadas e construir o selectbox sem o desvio de escrever um arquivo que é lido por php depois. Quero dizer, usando a saída do console (via exec) diretamente em apenas uma linha, por exemplo, adicionando um delimitador como; que o resultado pode ser usado em uma variável como essa (não funciona, apenas para explicar):

<?php

$printers = exec("lpstat -a | cut -f1 -d ' ' **another option to add the delimiter**");
$p_ary = explode(';', $printers);

... build the selectbox ...

?>

A variável $printers deve parecer Epson_1;Epson_2;Epson_1_cashier2 ... que deve ser fornecido pelo exec em uma única linha.

Obrigado pelas suas ideias.

ddlab
fonte