Ir ao conteúdo
  • Cadastre-se

PHP ERRO maximum execution time encerra meu processo


Posts recomendados

Olá Amigos. 

Estou usando uma hospedagem compartilhada M da Hostgator. 

Criei um script php para compactar todas as imagens que começam com "ticker" em uma determinada pasta.
Até ai tudo bem, ele faz o que eu preciso. 

Porém quando mando executar em uma quantidade grande de arquivos ele é encerrado antes de concluir. 
São 7.800 arquivos. aproximadamente.
As vezes ele apresenta o erro "maximum execution time" as vezes não. 

 

* Eu consegui acessar as configurações do php.ini no cpanel e defini a opção "max_execution_time" para "0". também tentei aumentar para "600" , "2600" e nada adiantou.
* Também adicionei ao inicio do script "set_time_limit(0);" também testei "600" e "2600" e nada.
* Já tentei dar uma pausa de 10 segundos a cada 20 arquivos, 10 arquivos, 2 arquivos, e ainda assim ele finaliza.

Agora estou fazendo um teste com 1 pausa a casa 1 arquivo. mas desta forma demora muito, pois apesar de ter alguns arquivos que podem demorar mais, a maioria é bem pequena, e tem menos de 1mb, onde o serviços executa vários por segundo.

Gostaria de uma forma de evitar que este script se encerrasse. 
Ou caso encerrasse ele, iniciasse sozinho e continuasse de onde parou. até concluir todos os arquivos.

Segue abaixo código como está agora, pausando 10 segundos a cada arquivo.

<?php
ini_set('memory_limit', '-1'); /*resolvendo o erro de falta de memoria*/
set_time_limit(0);
$count = 0;
$total = 0;
$timestamp = time();
echo date('H:i:s')."<br>";
echo "timestamp: ".$timestamp."<br>";


function compressImage($source_path, $destination_path, $quality) {
/* Obtendo informações da imagem */
$size = getimagesize($source_path);
/* Verifica a largura da imagem, caso for maior que 800 será reduzida para 800 */
if ($size[0] > 800){
   $new_width = "800";
/* Caso seja menor a largura original será mantida */
} else ($new_width = $size[0]);
/* Obtendo a altura proporcional a nova largura */
$new_height = ( int )(( $new_width/$size[0] )*$size[1] );
/* Criano a imagem com cores reais e dimensões escolhidas */
$img_true_color = ImageCreateTrueColor( $new_width, $new_height );
/* Verifica o tipo de imagem para usar a função adequada */
if ($size['mime'] == 'image/jpeg') {
   $image = imagecreatefromjpeg($source_path);
} elseif ($size['mime'] == 'image/png') {
   $image = imagecreatefrompng($source_path);
} elseif ($size['mime'] == 'image/gif') {
   $image = imagecreatefromgif($source_path);
} elseif ($size['mime'] == 'image/bmp') {
   $image = imagecreatefrombmp($source_path);
}
/* Criando a imagem redimensionada */
ImageCopyResampled( $img_true_color, $image, 0, 0, 0, 0, $new_width, $new_height, $size[0], $size[1] );
/* Salva a imagem em jpg definindo local+nome e qualidade */
imagejpeg($img_true_color, $destination_path, $quality);
return $destination_path;
/* Limpa da memoria a imagem criada temporáriamente */
ImageDestroy( $img_true_color );
}

/* Definindo a pasta das imagens */
$dir_img = "xb/web/midia/";
/* Handler do diretório */
$dh = opendir($dir_img); 
/* loop que busca todos os arquivos que iniciam com "ticker" */
while (false !== ($filename = readdir($dh))) { 
/* Verificando se o arquivo inicia com "ticker" */
if (substr($filename,0,6) == "ticker") { 
echo "$filename     -     ";

/* Fazendo uma pausa */
$count ++;
$total ++;
echo $count." ----- Total: ".$total." ----- ".time()."<br>";

/*if ($count > 1){*/
echo date('H:i:s')."<br>";
/*echo "<br><br> >>>>>>>>>>>>>>>>>>>> Pausando  <<<<<<<<<<<<<<<<< <br><br>";*/
sleep(10);
echo date('H:i:s')."<br>";
$count = 0;
$timestamp = time();
/*}*/

/* Chama a função para cada arquivo que inicia com "ticker" */ 
$img = compressImage($dir_img.$filename, $dir_img.$filename, 50);
}
}
?>

 

 

 

E aqui o mesmo código mais limpo, sem os contadores e prints que eu usei para acompanhar o progresso e tentar descobrir o erro:

 

<?php
ini_set('memory_limit', '-1'); /*resolvendo o erro de falta de memoria*/
set_time_limit(0);

function compressImage($source_path, $destination_path, $quality) {
/* Obtendo informações da imagem */
$size = getimagesize($source_path);
/* Verifica a largura da imagem, caso for maior que 800 será reduzida para 800 */
if ($size[0] > 800){
   $new_width = "800";
/* Caso seja menor a largura original será mantida */
} else ($new_width = $size[0]);
/* Obtendo a altura proporcional a nova largura */
$new_height = ( int )(( $new_width/$size[0] )*$size[1] );
/* Criano a imagem com cores reais e dimensões escolhidas */
$img_true_color = ImageCreateTrueColor( $new_width, $new_height );
/* Verifica o tipo de imagem para usar a função adequada */
if ($size['mime'] == 'image/jpeg') {
   $image = imagecreatefromjpeg($source_path);
} elseif ($size['mime'] == 'image/png') {
   $image = imagecreatefrompng($source_path);
} elseif ($size['mime'] == 'image/gif') {
   $image = imagecreatefromgif($source_path);
} elseif ($size['mime'] == 'image/bmp') {
   $image = imagecreatefrombmp($source_path);
}
/* Criando a imagem redimensionada */
ImageCopyResampled( $img_true_color, $image, 0, 0, 0, 0, $new_width, $new_height, $size[0], $size[1] );
/* Salva a imagem em jpg definindo local+nome e qualidade */
imagejpeg($img_true_color, $destination_path, $quality);
return $destination_path;
/* Limpa da memoria a imagem criada temporáriamente */
ImageDestroy( $img_true_color );
}

/* Definindo a pasta das imagens */
$dir_img = "xb/web/midia/";
/* Handler do diretório */
$dh = opendir($dir_img); 
/* loop que busca todos os arquivos que iniciam com "ticker" */
while (false !== ($filename = readdir($dh))) { 
/* Verificando se o arquivo inicia com "ticker" */
if (substr($filename,0,6) == "ticker") { 

/* Fazendo uma pausa */
sleep(10);

/* Chama a função para cada arquivo que inicia com "ticker" */ 
$img = compressImage($dir_img.$filename, $dir_img.$filename, 50);
}
}
?>

 

Link para o comentário
Compartilhar em outros sites

Você já tentou fazer outro processo que leve bastante tempo para ver se a variável max_execution_time está sendo lida pelo servidor? Tenta fazer um loop infinito em um arquivo e testa quanto tempo ele vai ficar rodando.

 

Isso ta com cara de ser configuração de servidor mesmo.

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!