Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
olá tenho um programa que faz consultas mysql e oci e gera cupons em um determinada pasta do servidor em formatos .txt aconteceu que presciso mandar esses cupons para impressoras em rede um por um para que a impressora possa picotar o papel após o termino deles para isso estou usando um .vbs onde o mesmo seleciona todos os arquivos .txt seta a impressora em rede como padrao e manda imprimir todos os arquivos desta pasta, este vbs funciona normal quando dado dois cliques nele, o problema é que eu preciso que o php mande executar ele, eu tentei a funçao
exec ("imprimir.vbs"); \\ assim o navegador fica carregando sem parar e nada acontece
tentei também criar um bat e este por sua vez chamar o vbs
exec ("imp.bat"); \\ pagina carrega normal porém nao é executado o vbs no mesmo bat coloquei comandos para copy e renomear arquivos como teste para ver se ta passando, verificando que somente a parte do vbs nao é chamada
tentei também a função shell_exec
shell_exec (start cscript "d:\xampp\htdocs\vale\teste\imprimir.vbs"); \\ assim o navegador fica carregando sem parar e nada acontece também
por ultimo tentei a função COM, sendo a mesma abilitada no php.ini e com a devida extensão na pasta
/ Defina o caminho para o arquivo(s) /
$command = 'wscript.exe d:/xammp/htdocs/vale/teste/imprimir.vbs';
// Executa os arquivos/comandos
$obj = new COM ( 'WScript.Shell' );
if ( is_object ( $obj ) )
{
$obj->Run ( 'cmd /C ' . $command, 0, FALSE );
}
else
{
echo 'Não foi possível criar o objeto!';
}
$obj = null;
// desta forma a pagina carrega normal sem dar erro algum porem nada acontece
segue arquivos em anexo para tal visualização, por favor me ajudem.
>
19 minutos atrás, EdCesar disse:
Tente assim:
exec('wscript "D:/xammp/htdocs/vale/teste/imprimir.vbs"');
(O caminho também pode ser relativo)
Isso também deve ser do seu interesse:
https://technet.microsoft.com/en-us/library/ee156587.aspx
deste jeito também a pagina fica carregando sem parar e não acontece nada
@tiagoluizmartins, primeiro tente executar esse .vbs usando apenas o cmd do windows, pois se nem ai estiver imprimindo, então não adianta tentar nada com PHP. Caso positivo, use o mesmo script que usou no cmd com uma das sugestões abaixo e nos de um retorno.
exec('wscript "D:/xammp/htdocs/vale/teste/imprimir.vbs"');
$shell = new COM('WScript.Shell');
$shell->run('php D:/xammp/htdocs/vale/teste/imprimir.vbs', 0, false);>
46 minutos atrás, EdCesar disse:
@tiagoluizmartins, primeiro tente executar esse .vbs usando apenas o cmd do windows, pois se nem ai estiver imprimindo, então não adianta tentar nada com PHP. Caso positivo, use o mesmo script que usou no cmd com uma das sugestões abaixo e nos de um retorno.
exec('wscript "D:/xammp/htdocs/vale/teste/imprimir.vbs"');
$shell = new COM('WScript.Shell');
$shell->run('php D:/xammp/htdocs/vale/teste/imprimir.vbs', 0, false);
@EdCesar, sim ele executa e imprimi mandando via cmd ou dando dois clicks nele, a primeira opção
exec('wscript "D:/xammp/htdocs/vale/teste/imprimir.vbs"');
não da erro porem a pagina fica carregando eternamente
a segunda opção
$shell = new COM('WScript.Shell');
$shell->run('php D:/xammp/htdocs/vale/teste/imprimir.vbs', 0, false);
no navegador da esse erro no caso a linha 11 do codigo teste.php meu é codigo abaixo as anteriores são testes que estão comentados
$shell->run('php D:/xammp/htdocs/vale/teste/imprimir.vbs', 0, false);
**Fatal error**: Uncaught exception 'com_exception' with message '<b>Source:</b> Unknown<br/><b>Description:</b> Unknown' in D:\xampp\htdocs\vale\teste\teste.php:11 Stack trace: #0 D:\xampp\htdocs\vale\teste\teste.php(11): com->run('php D:/xammp/ht...', 0, false) #1 {main} thrown in **D:\xampp\htdocs\vale\teste\teste.php** on line **11 **
no meu php.ini esta ativado a extensão php_com_dotnet
PHP Version 5.6.15
System
Windows NT WEB-HOST-2 6.1 build 7600 (Windows Server 2008 R2 Standard Edition) i586
Build Date
Oct 29 2015 12:34:05
Compiler
MSVC11 (Visual C++ 2012)
Architecture
x86
Configure Command
cscript /nologo configure.js "--enable-snapshot-build" "--disable-isapi" "--enable-debug-pack" "--without-mssql" "--without-pdo-mssql" "--without-pi3web" "--with-pdo-oci=c:\php-sdk\oracle\x86\instantclient_12_1\sdk,shared" "--with-oci8-12c=c:\php-sdk\oracle\x86\instantclient_12_1\sdk,shared" "--enable-object-out-dir=../obj/" "--enable-com-dotnet=shared" "--with-mcrypt=static" "--without-analyzer" "--with-pgo"
Server API
Apache 2.0 Handler
com_dotnet
COM support
enabled
DCOM support
disabled
.Net support
enabled
Directive
Local Value
Master Value
com.allow_dcom
0
0
com.autoregister_casesensitive
1
1
com.autoregister_typelib
0
0
com.autoregister_verbose
0
0
com.code_page
*no value*
*no value*
com.typelib_file
*no value*
*no value*
Core
PHP Version
5.6.15Veja essa nota na documentação do exec
Nota:
Se um programa é iniciado com esta função, e deseja que ele continue rodando em background, a saída do programa precisa ser redirecionada para um arquivo ou outro output stream. Se isso não é feito, o que irá ocorrer é que o PHP ficará esperando até que a execução do programa termine.
http://php.net/manual/pt_BR/function.exec.php
Então tente isso:
exec('wscript "D:/xammp/htdocs/vale/teste/imprimir.vbs" > impressaolog.txt');
Se também não entendi errado, se colocar o **& **o php não aguardara o retorno
exec('wscript "D:/xammp/htdocs/vale/teste/imprimir.vbs" &');
Caso ainda não de certo, só confirme duas coisas que não ficou claro:
Você disse que a primeira opção "não da erro porem a pagina fica carregando eternamente", ok, mas imprime?
Qual o comando que você esta usando para imprimir pelo cmd?>
22 minutos atrás, EdCesar disse:
Veja essa nota na documentação do exec
Nota:
Se um programa é iniciado com esta função, e deseja que ele continue rodando em background, a saída do programa precisa ser redirecionada para um arquivo ou outro output stream. Se isso não é feito, o que irá ocorrer é que o PHP ficará esperando até que a execução do programa termine.
http://php.net/manual/pt_BR/function.exec.php
Então tente isso:
exec('wscript "D:/xammp/htdocs/vale/teste/imprimir.vbs" > impressaolog.txt');
Se também não entendi errado, se colocar o **& **o php não aguardara o retorno
exec('wscript "D:/xammp/htdocs/vale/teste/imprimir.vbs" &');
Caso ainda não de certo, só confirme duas coisas que não ficou claro:
Você disse que a primeira opção "não da erro porem a pagina fica carregando eternamente", ok, mas imprime?
Qual o comando que você esta usando para imprimir pelo cmd?
não não imprime!!!
desse dois modos fica carregando eternamente do primeiro jeito cria um arquivo de log em txt porem ele esta em branco e nao imprimi nada em nenhum dos dois!
para imprimir estou usando um script.vbs que no caso o nome é imprimir.vbs que coloquei em anexo na primeira postagem as linhas que tem ' sao comentarios
' Script para impressão de documentos
' Modificado por Rafael Zottesso
' ******************************
' Cria a variável para definir a impressora padrão
Set objPrinter = CreateObject("WScript.Network")
' Para impressora da rede utilize "\servidorNome da Impressora"
objPrinter.SetDefaultPrinter "\\comp-1-pc\hp"
' Define o diretório
TargetFolder = "D:\xampp\htdocs\vale\teste\temp\"
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.Namespace(TargetFolder)
' Lista os arquivos
Set colItems = objFolder.Items
For Each objItem in colItems
' Imprime os arquivos encontrados
objItem.InvokeVerbEx("Print")
Next
' Define-se a impressora padrão após 5 segundos
Wscript.Sleep 3000
Set oldPrinter = CreateObject("WScript.Network")
oldPrinter.SetDefaultPrinter "Foxit Reader PDF Printer"
Talvez o problema esteja em uma das perguntas que coloquei, como é que você executa o .vbs pelo cmd? E quando você faz isso, apos imprimir, no cmd fica processando ou volta ao prompt permitindo digitar outros comandos?
estou de mandando um print da tela em anexo para você ver ele executa normal e quando acaba de imprimir cai para digitar mais comando
comando do cmd
cscript.exe D:\xampp\htdocs\vale\teste\imprimir.vbs
imprimindo_pelo_cmd.bmp
Olha, talvez seja bem simples! Faça da mesma forma
troque wscript por cscript
exec('cscript "D:/xammp/htdocs/vale/teste/imprimir.vbs"');
Fiz um teste aqui e criei um hello.vbs
function Main()
Wscript.Echo "Hello!"
end function
call Main
<?php
echo exec('cscript hello.vbs'); # Executa
echo exec('wscript hello.vbs'); # fica em loop infinito
Olhando a documentação do vbs ficou claro o motivo, o cscript envia a saída para o console, já o wscript para uma caixa de dialogo, que precisa de um clique no ok
>
21 minutos atrás, EdCesar disse:
Olha, esse era o ponto! Faça da mesma forma
troque wscript por cscript
exec('cscript "D:/xammp/htdocs/vale/teste/imprimir.vbs"');
Fiz um teste aqui e criei um hello.vbs
function Main()
Wscript.Echo "Hello!"
end function
call Main
<?php
echo exec('cscript hello.vbs'); # Executa
echo exec('wscript hello.vbs'); # fica em loop infinito
Olhando a documentação do vbs ficou claro o motivo, o cscript executa em console, já o wscript chama uma caixa de dialogo, que precisa de um clique no ok
@EdCesar, veio nao roda mesmo colocando desta forma
exec('cscript hello.vbs');
claro que com o meu vbs imprimir.vbs ele nao fica carregando porem nao é acionado o vbs no servidor, sendo assim nao imprimi, como eu falei anteriormente eu fiz esse bat abaixo e e fiz a funçao exec chamar esse bat, contudo tbm nao rodou o script vbs ai fiz um teste, no mesmo bat pedindo para copiar um determinado arquivo para outro lugar antes do script e apos chamar o script renomear esse arquivo, os todos os processo de copia de rename foi executado menos chamar o vbs pelo cmd atraves do cscript.exe
ECHO starting program
cmd.exe /c cscript.exe D:\xampp\htdocs\vale\teste\imprimir.vbs
echo finish program
Só tira uma duvida, você testando com esse hello.vbs que coloquei, ele executa e traz Hello! na tela?
sim fiz o teste com aquele vbs que você fez trazendo hello na tela ele funcionou. porem o meu nao roda é para o meu abrir os arquivos no notepad.exe no servidor setando impressora padrao e mandando imprimir
>
Em 2017-5-16 at 17:19, EdCesar disse:
Só tira uma duvida, você testando com esse hello.vbs que coloquei, ele executa e traz Hello! na tela?
@EdCesar, com o hello funciona, mais o meu .vbs não tem alguma sugestão?
@tiagoluizmartins, a impressão que da, é que o seu problema não é com PHP, fica em aberto para quem tiver mais sugestões.
Caso consiga resolver, não deixe de compartilhar aqui a solução, boa sorte!
Tente assim:
https://technet.microsoft.com/en-us/library/ee156587.aspx