Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Matheus Brito

Dúvida sobre como tratar erro

Recommended Posts

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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)

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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)

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.