Faça isso no servidor web.
É importante considerar que a máquina cliente não precisa manter nenhuma porta aberta, enquanto que o servidor mantém escutando a porta 80, que normalmente já esta aberta e sendo ouvida pelo Apache. O sistema é capaz de atravessar firewalls e roteadores sem necessidade de estabelecer uma conexão ponto a ponto, assim eu posso colocar o servidor de impressão remota em qualquer máquina de uma sub-rede local atrás de um roteador de ADSL ou em IP fixo doméstico por exemplo.
Slackware 11.0:
1. Criando os diretórios necessários:
# mkdir /var/spool/webpserver
# chown nobody.nobody /var/spool/webpserver
Agora crie o arquivo webpserver.cgi no diretório /var/www/cgi-bin:
# vim /var/www/cgi-bin/webpserver.cgi
#!/usr/bin/perl
use CGI qw/:standard/;
print header;
$fila=param('fila');
$nfiles = 0 ;
$t0 = time ;
while ( ( $nfiles == 0 ) and (time - $t0 < 30) and time >= $t0 ) {
@files = </var/spoll/webpserver/$fila/*> ;
$nfiles = $#files + 1 ;
sleep 1 ;
}
while (</var/spoll/webpserver/$fila/*>){
$file = $_;
$txt=`cat $file`;
print $txt ;
system("rm $file") ;
}
No nosso exemplo vamos usar uma fila chamada notafiscal:
# mkdir /var/spool/webpserver/notafiscal
# chown nobody.nobody /var/spool/webpserver/notafiscal
Para imprimir um arquivo basta copiar para dentro da fila. Ex.:
# cp /etc/meuarquivo /var/spool/webpserver/notafiscal
Isso pode ser feito de dentro do PHP ou do script CGI gerando o arquivo com o conteúdo a ser impresso e depois copiando para o diretório da fila correspondente.
OBS: Como existe tanto o Apache como Perl para Windows, este esquema pode ser aplicado tanto em um servidor baseado em
Linux como em Windows, entretanto não tenho nenhuma máquina servidora com Windows, não tenho como calcular as alterações necessárias no script webpserver.cgi, que provavelmente deverá ser somente a substituição da barra / pela barra \ com a inclusão de C: na frente.