Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Boa Tarde seguinte estou com dois problemas ao fazer chamadas externas com o php. O primeiro é: É possível tratar erros ao utilizar shell_exec e demais comandos para fazer chamadas externas?
O segundo é tem como pegar o carregamento do que está sendo processado em background? Para essa segunda dúvida eu fiz uma gambiarra aqui que funciona, mas queria saber se tinha como fazer do jeito correto.
O que eu fiz para resolver a segunda dúvida foi na função ajax eu chamo várias funções no php, passando um valor inteiro e modificando uma barra com jQuery.
Abraços,
Matheus
To conseguindo responder não deve ser o código... :(
Beraldo eu fiz exatamente o que você falou no caso 2. Porém to fazendo uma barra de progresso fictícia passando valores a cada execução, mas a barra não é real pelo progresso do programa que tá sendo executado. Sobre o caso 1 não sabia sobre o terceiro paramêtro, pois eu uso dois parâmetros no exec e um justamente é a variável que guarda a saída do programa, porém não entendi esse terceiro parâmetro como seria? Eu faço assim:
//$cmd_trimmer = "path/to/program/params 2>&1";
//echo exec($cmd_trimmer, $out_trimmer);
Vlw
Todo programa retorna um exit status, que pode ser exibido com $? no shell. Veja:
piemonte:tmp beraldo$ date
Thu Apr 21 11:10:41 BRT 2016
piemonte:tmp beraldo$ echo $?
0
piemonte:tmp beraldo$ comando_nao_existe
Segmentation fault: 11
piemonte:tmp beraldo$ echo $?
139
0 é exit status sem erro. Números diferentes de 0 significam erro
Esse é o número salvo no terceiro parâmetro de exec
O caso da barra de progresso depende da resposta do PHP. Por padrão, a resposta é enviada no final, depois de todo o processamento. Dá pra enviar imediatamente usando as funções de controle de buffer (flush, ob_end_flush etc)
Diga Beraldo, vou dar uma olhada nessas funções de buffer. Quanto ao tratamento do erro eu não entendi muito bem, seria como vc disse acima? Eu adicionaria o terceiro parâmetro no exec e testaria a saída se for diferente de 0 eu tenho um erro?
Abraços,
Matheus
Exato. Se o terceiro parâmetro for diferente de zero, geralmente significa que houve um erro. Isso pode variar, dependendo do programa que está sendo chamado. Mas é orientação geral que todo programa Unix retorne 0 quando tudo corre bem
1. Dá pra usar exec(). O terceiro parâmetro é o exit status do programa. Se esse programa retornar códigos de erro (que é comum em Unix), o tratamento será fácil.
2. Isso me parece mais um problema de JS, não PHP. Mesmo rodando em background, as chamadas Ajax costumam ter um handler que processa o retorno (a função definida em "success" no caso do jQuery, por exemplo)