Ir para conteúdo

POWERED BY:

Arquivado

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

Periscuelo

Problema com Tempo em Execução de Script

Recommended Posts

Amigos estou com o seguinte problema.

 

A Locaweb não libera para mim o comando ini_set() e nem aumenta o max_execution_time do server deles pois muitas pessoas utilizam o mesmo. Não estou em condições financeiras para contratar um servidor dedicado com a locaweb.

Uma pessoa comentou comigo que existe a possibilidade de fazer um script que rode durante 55 segundos por exemplo e depois de um refresh automatico e continue fazendo sua função de onde parou. A pessoa disse que isto é possível mas não disse como fazer e eu presumo que ela não saiba como fazer isto.

 

Agora fiquei na dúvida e recorro ao imasters porque sei que tem muita gente que manja muito de PHP por aqui e gostaria de saber com os colegas se é mesmo possivel fazer isto. Se for como fazer? Alguém poderia me mostrar um exemplo?

 

 

Mais uma vez grato a todos pela atenção.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pelo que entendi, isso seria feito usando sleep(), mas essa função também dependerá de max_execution_time.

Amigo Beraldo até da pra usar um sleep de 55 segundos o problema é dar o refresh depois desse sleep (ou seja, carregar novamente o script) e continuar tudo de onde parou. É possível fazer isto ??? :blink:

 

 

Grato pela Atenção.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Geralmente sleep() é usada em loops. Se você recarregar a página, a execução retorna ao início.

Qual é a finalidade do script?

 

 

Mas se você não pode usar ini_set() nem set_time_limit(), sleep(55) dará erro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Geralmente sleep() é usada em loops. Se você recarregar a página, a execução retorna ao início.

Qual é a finalidade do script?

 

 

Mas se você não pode usar ini_set() nem set_time_limit(), sleep(55) dará erro.

Pois é amigo não da pra usar nenhuma das funções então.

O Script faz uma exportação para Excel porém como a base de dados é muito grande

ele demora para fazer a exportação e nem abre a página pois a locaweb não deixa

agente ver os erros. Como a base de dados é em MySQL e o script funciona com tabelas

menores do que a em questão conclui que o erro se deve ao max_execution_time pois

a pagina demora um certo tempo para abrir e depois não abre.

A pessoa falou que da pra fazer um script executar durante 55 segundos depois dar um

refresh na página (que como você mensionou e eu também conclui vai voltar ao início

tanto é que nem tentei usar sleep por que sabia disto) e continuar a execução do script

de onde parou. Disse ter visto uma solução como esta no PHPBB e eu achei isto excepcionalmente

estranho mas resolvi perguntar apesar de achar meio absurdo não sei se alguém ja conseguiu está

façanha. Iai amigo Beraldo e amigos do fórum imasters, é possível uma coisa destas???? :blink:

 

Grato pela atenção.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Será que a aolução não seria deixar seu Select do mysql mais rápido?

 

quanto tempo demora pra exportar esses dados pro excel?

 

tem uns macetes legais pra melhora isso no mysql mesmo.

 

olha esse tópico.

 

http://forum.imasters.com.br/index.php...=273575&hl=

Compartilhar este post


Link para o post
Compartilhar em outros sites

Será que a aolução não seria deixar seu Select do mysql mais rápido?

 

quanto tempo demora pra exportar esses dados pro excel?

 

tem uns macetes legais pra melhora isso no mysql mesmo.

 

olha esse tópico.

 

http://forum.imasters.com.br/index.php...=273575&hl=

Amigo Eduardo o SQL é simples é de apenas uma tabela tem de pegar a tabela toda

e não é necessário se fazer joins visto que não uso nenhuma clausula WHERE pois

preciso exportar a tabela toda.

 

Minha duvida é se esse "feito" dito pela pessoa que solicitou é possível pois nunca vi

isto.

 

Mas obrigado pela ajuda http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

 

Ainda ficou a dúvida: É possível fazer isto???? :blink:

 

Grato pela atenção.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Use a lógica de uma paginação.

 

Faça somente algumas seleções (10, por exemplo) por execução e, no fim do script, use header(), passando o número da página pela URL. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Use a lógica de uma paginação.

 

Faça somente algumas seleções (10, por exemplo) por execução e, no fim do script, use header(), passando o número da página pela URL. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Pois é amigo Beraldo eu também pensei nisto, porém são mais de 90 mil registros, como vou fazer essa query executar, exportar, dar refresh na página executar outra query (que seria a de continuação) exportar denovo até dar os 90 mil e depois juntar todos as exportações em um arquivo só dando a opção de salvar ????

 

Ainda a dúvida: É possível isto ??? :blink:

 

Grato mais uma vez pela atenção.

Compartilhar este post


Link para o post
Compartilhar em outros sites

hum....

 

deixa eu ver.....

 

ah,

 

faz como o Beraldo disse, e passa o Limit a cada loop no seu SELECT:

 

tipo, se fazer a cada 20 registros só e depois faz do 20 ao 40 e assim vai...

 

exemplo:

 

if (!isset($pg)) // variavel $pg é a pagina atual

$pg = 1;

 

$nitens = 20; // NÚMERO DE ITENS POR PÁGINA

$inicial = $pg - 1;

$inicial = $inicial * $nitens; // CONTA PARA SABER QUAIS ITENS VAI MOSTRAR NA PÁGINA

 

select * from tabela limit $pg,$nitens... que significa

select * from tabela limit 0,20

 

header: location(pagina.ph?pg=$pg+1);

 

aí ele vai para uma pagina e seu select fica assim:

select * from tabela limit 40,20

 

e assim vai até terminar a linha...

 

aí você tem que definir as variaveis e tals, contar quantos registros tem na tabela, etc...

 

se tem como fazer???????????? auhauhuhauha

 

esse eh o unico jeito que eu achei...

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

hum....

 

deixa eu ver.....

 

ah,

 

faz como o Beraldo disse, e passa o Limit a cada loop no seu SELECT:

 

tipo, se fazer a cada 20 registros só e depois faz do 20 ao 40 e assim vai...

 

exemplo:

 

if (!isset($pg)) // variavel $pg é a pagina atual

$pg = 1;

 

$nitens = 20; // NÚMERO DE ITENS POR PÁGINA

$inicial = $pg - 1;

$inicial = $inicial * $nitens; // CONTA PARA SABER QUAIS ITENS VAI MOSTRAR NA PÁGINA

 

select * from tabela limit $pg,$nitens... que significa

select * from tabela limit 0,20

 

header: location(pagina.ph?pg=$pg+1);

 

aí ele vai para uma pagina e seu select fica assim:

select * from tabela limit 40,20

 

e assim vai até terminar a linha...

 

aí você tem que definir as variaveis e tals, contar quantos registros tem na tabela, etc...

 

se tem como fazer???????????? auhauhuhauha

 

esse eh o unico jeito que eu achei...

 

[]'s

Hehehe pois amigo eduardo mas é como eu disse ao amigo beraldo até esta parte tudo bem, o problema é que o script de

export para excel depende do SQL para gerar o arquivo, como eu vou fazer para exportar os arquivos em separado e

depois juntá-los em um unico arquivo e salvar o mesmo? Ou ainda como vou juntar o resultado de todas as querys para que o arquivo de exportação exporte apenas um arquivo com todos os dados em 55 segundos ?

 

Por isso a dúvida persiste: É possível fazer isto ???? :blink:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Agora entendi sua pergunta.

 

 

demorou!.. hehhehe

 

o problema eh que eu nunca gerei um arquivo automático.

 

você ja tentou gravar em sessions as informações e depois juntar tudo e gerar o arquivo?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Agora entendi sua pergunta.

 

 

demorou!.. hehhehe

 

o problema eh que eu nunca gerei um arquivo automático.

 

você ja tentou gravar em sessions as informações e depois juntar tudo e gerar o arquivo?

Então amigo eduardo o código de export faz um for com mysql_num_fields e dentro do for existe um while com mysql_fetch_row e todos estes dependem da query sql para exportar os dados.

Neste caso voltamos a estaca zero pois eu teria de fazer varios exports e juntar todos de uma vez.

Imagine jogar um export em uma sessão ou melhor imagine tendo por base uma SQL rapida de uma tabela com 40 campos e uma pesquisa de 30 a 30 registros e jogar 1200 campos com registro o que vai gerar um export por looping com este conteudo. 90 mil registros vão fazer em média 3 mil loopings e gravar concatenadamente na sessão 3 mil exports cada um com 1200 campos que vai dar em média 3.600.000 campos na sessão. São mais de 90 mil registros :wacko: Como vou juntar isto? A Sessão vai suportar essa quantidade de informações? O Script vai demorar quanto tempo pra executar tudo isto?

 

Ainda persisto é realmente possível fazer isto ??? :blink:

 

Grato pela atenção.

Compartilhar este post


Link para o post
Compartilhar em outros sites

bem seguindo a ideia do beraldo

 

use o isset($_GET["valor"])

 

para pegar o inicio do seu sql.

 

compare e receba esse valor get

 

tipo

 

se eu executei 50 registro e dei refresh na pagina utilizando o header("location; pagina.php?ult=50");

 

eu recupero essa valor via get

 

if(isset($_GET["ult"])){

$inicio = $_GET["ult"];

 

ai é so jogar essa var no teu sql. eu vai continuar de onde parou

ou jogar ela +1 caso o registro de numero 50 tenha cido executado :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

bem seguindo a ideia do beraldo

 

use o isset($_GET["valor"])

 

para pegar o inicio do seu sql.

 

compare e receba esse valor get

 

tipo

 

se eu executei 50 registro e dei refresh na pagina utilizando o header("location; pagina.php?ult=50");

 

eu recupero essa valor via get

 

if(isset($_GET["ult"])){

$inicio = $_GET["ult"];

 

ai é so jogar essa var no teu sql. eu vai continuar de onde parou

ou jogar ela +1 caso o registro de numero 50 tenha cido executado :D

beleza amigo bruno até ai eu concordei com o beraldo mas vou repetir pra você o que disse

ao amigo Eduardo

 

Então amigo eduardo o código de export faz um for com mysql_num_fields e dentro do for existe um while com mysql_fetch_row e todos estes dependem da query sql para exportar os dados.

Neste caso voltamos a estaca zero pois eu teria de fazer varios exports e juntar todos de uma vez.

Imagine jogar um export em uma sessão ou melhor imagine tendo por base uma SQL rapida de uma tabela com 40 campos e uma pesquisa de 30 a 30 registros e jogar 1200 campos com registro o que vai gerar um export por looping com este conteudo. 90 mil registros vão fazer em média 3 mil loopings e gravar concatenadamente na sessão 3 mil exports cada um com 1200 campos que vai dar em média 3.600.000 campos na sessão. São mais de 90 mil registros Como vou juntar isto? A Sessão vai suportar essa quantidade de informações? O Script vai demorar quanto tempo pra executar tudo isto?

Ainda persisto é realmente possível fazer isto ??? :blink:

 

Grato pela atenção.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como é feita a exportação?

Não há como exportar por partes pra o mesmo arquivo? Por exemplo, como fazemos com um txt, adicionando valores no final do arquivo. Dá para fazer assim?

 

Se não der,gere um .csv e o transforme-o em xls pelo Excell ou outro gerenciador de planilhas, como o BrOffice Calc. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

pq você nao faz uma paginacao automatica? fikano tipo select * from tabela limit $inicio,100

 

ai você faz assim

depoiq ele akba ele redireciona a pagina automaticamente pra proxima pagina ja com a paginacao certa fraga? axo q seria o ideal kra....... mas tem um poorem você pode adicionar dados a esse xls ou ele cria de uma vez ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

pq você nao faz uma paginacao automatica? fikano tipo select * from tabela limit $inicio,100

 

ai você faz assim

depoiq ele akba ele redireciona a pagina automaticamente pra proxima pagina ja com a paginacao certa fraga? axo q seria o ideal kra....... mas tem um poorem você pode adicionar dados a esse xls ou ele cria de uma vez ?

O Export cria o xls de uma vez só.

 

É possível fazer de alguma outra maneira? Se sim como? Pode postar um exemplo? :blink:

 

 

Grato pela atenção.

 

Como é feita a exportação?

Não há como exportar por partes pra o mesmo arquivo? Por exemplo, como fazemos com um txt, adicionando valores no final do arquivo. Dá para fazer assim?

 

Se não der,gere um .csv e o transforme-o em xls pelo Excell ou outro gerenciador de planilhas, como o BrOffice Calc. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Então amigo beraldo, eu é que lhe pergunto pois minha dúvida é exatamente se existe alguma forma de se fazer isto. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

 

Iai amigo beraldo tem como adicionar valores no fim de um arquivo xls? Se sim como proceder? Tem um exemplo? :blink:

 

 

Grato pela atenção.

Compartilhar este post


Link para o post
Compartilhar em outros sites

pois eh kra, pq o unico problema de fazer dessa forma seria se você nao pudesse adicionar dados ao fim do xls ...... agora com csv fika tranks !!!!!!!!!! se ja tento exportar pra csv e depois converter?

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.