Boa tarde Srs.
Estou desenvolvendo uma ferramenta de busca personalizada para um cliente utilizando a biblioteca cURL e estou preocupado com o tempo em que o algoritimo leva para retornar o resultado.
O programa funciona da seguinte maneira:
1º - Primeiro o usuário deve passar uma URL. Depois o programa captura todos os links dessa página inicial e salva em um vetor. A partir desse vetor, ela procura links dentro de cada url salva nesse vetor.. e assim por diante. A idéia é que o programa percorra o site inteiro até o fim da estrutura de diretório através dos links.
Alguns mecanismos foram utilizados como filtragem dos links para que não seja capturado links de domínios diferentes e a verificação dos links para que não seja capturado links repetidos (Para cada página nova que o programa vai capturar os links, ele verifica os novos links com um vetor que contem todos os links).
Se for em relação ao tempo de execução em php você pode utilizar para aumentar o set_time_limit ([tempo]); com ele você incrementa o tempo padrado do PHP de 30s para quantos você quiser.
Atc,
![]()
Sérgio Ricardo Machado Lemos
8688391999
skype:sergiolemos.net
--
Você está recebendo esta mensagem porque se inscreveu no
grupo "php-brasil" dos Grupos do Google.
Para postar neste grupo, envie um e-mail para php-b...@googlegroups.com.
Para cancelar a inscrição nesse grupo, envie um e-mail para
php-brasil+...@googlegroups.com.
Para obter mais opções, visite esse grupo em
http://groups.google.com/group/php-brasil?hl=pt-BR.
E se, ao invés de colocar um FOR dentro de outro, não use um primeiro for,
dai nele tu faz a busca de primeiro nível.
Dai, em outro FOR (não dentro do anterior), busque pelos links que foram
armazenados na busca anterior.
E assim sucessivamente.
Não esquecendo de fechar toda conexão CURL que tu fizer após cada FOR.
Acredito que, assim, evitará sobrecarga de diversas sessões CURL abertas.
Sds,
Anderson Fraga
www.andersonfraga.net
con...@andersonfraga.net
----- Original Message -----
From: "Guilherme Longo" <grlongo...@gmail.com>
To: "php-brasil" <php-b...@googlegroups.com>
Sent: Monday, December 14, 2009 3:29 PM
Subject: [PHP-BRASIL - 2.0] Re: cURL -> Tempo exagerado de computação
Então Carlos,
Eu fiz esse tratamento para o FOR não entrar em loop infinito sim.
O script está gastando 30s a cada 100 links buscados.
Até agora o máximo que eu consegui foi 3000 links o que está
gastantando pouco menos de 20 minutos.
Eu vou procurar outra solução...
Muito obrigado a todos.
On 14 dez, 14:53, Ninetails - Carlos Kazuo <ninetails.n...@gmail.com>
wrote:
> eu acho que de qualquer jeito (ou qualquer implementação) direta do código
> ficaria um tanto lenta...
>
> tenta ver se há alternativas, como usar o google search ou ver se dá pra
> tentar implementar em YQL se forem páginas públicas...
>
> caso não seja possível, tenta ver fazer algum servidor que gerencie filas
> de
> requisições e use cache pra evitar que faça a requisição
> desnecessariamente
> (tipo, uma mesma requisição em um curto espaço de tempo)
>
> penso em algo parecido com o browsershots[1]... vc faz uma requisição e
> tua
> requisição vai pra fila... enquanto um (ou mais) servidores vão fazendo o
> trabalho, vc fica com uma tela de "espere ou pegue essa url e acesse
> depois"
> e aos poucos vai aparecendo um 'preview'
>
> tipo só não esqueça de que este teu "for" tem que ter um fim... algo do
> tipo
> acessar 100 páginas do mesmo domínio ou até que todas as URI sejam
> idexadas
> (pra n entrar em loop infinito e travar a fila bla bla bla) mas acho que
> nisto já terias pensado...
>
> [1]http://browsershots.org/
>
> --------------------------------------------------
> /**
> * @author Ninetails - Carlos Kazuo <ninetails.nine [at] gmail.com>
> */
>
> 2009/12/14 Guilherme Raymo Longo <grlongo.irel...@gmail.com>
>
>
>
> > Sérgio, esse recurso apenas me livra de um erro por limite de tempo.
> > Me desculpe se eu não fui muito claro mas a dúvida é quanto a
> > implementação
> > do algoritimo. Gostaria de uma opinião dos mais expêrientes se teria
> > alguam
> > forma de otimizar meu código.
>
> > Se eu procuro em até 2 níveis o tempo é aceitável, mas acima disso como
> > eu
> > estou utilizando FOR dentro de FOR dentro de FOR, nem sei se o grau de
> > complexidade desse algoritimo nem quadrático é mais...
>
> > Você deu uma olhada do código???
> > Muito obrigado pela dica, se eu não conseguir otimizar o código vai ter
> > que
> > ser alterando o tempo limite mesmo.
>
> >> Se for em relação ao tempo de execução em php você pode utilizar para
> >> aumentar o set_time_limit ([tempo]); com ele você incrementa o tempo
> >> padrado
> >> do PHP de 30s para quantos você quiser.
>
> >> Atc,
>
> >> [image: SL_sombra_s]
>
> >> *Sérgio** **Ricardo Machado** **Lemos***
>
> >> 8688391999
>
> >> skype:sergiolemos.net
>
> >>http://sergiolemos.net
>
> >> cont...@sergiolemos.net
>
> >> *De:* php-b...@googlegroups.com [mailto:php-b...@googlegroups.com]
> >> *Em
> >> nome de *Guilherme Raymo Longo
> >> *Enviada em:* segunda-feira, 14 de dezembro de 2009 11:33
> >> *Para:* php-b...@googlegroups.com
> >> *Assunto:* [PHP-BRASIL - 2.0] cURL -> Tempo exagerado de computação
>
> >> Boa tarde Srs.
>
> >> Estou desenvolvendo uma ferramenta de busca personalizada para um
> >> cliente
> >> utilizando a biblioteca cURL e estou preocupado com o tempo em que o
> >> algoritimo leva para retornar o resultado.
> >> O programa funciona da seguinte maneira:
> >> 1º - Primeiro o usuário deve passar uma URL. Depois o programa captura
> >> todos os links dessa página inicial e salva em um vetor. A partir desse
> >> vetor, ela procura links dentro de cada url salva nesse vetor.. e assim
> >> por
> >> diante. A idéia é que o programa percorra o site inteiro até o fim da
> >> estrutura de diretório através dos links.
> >> Alguns mecanismos foram utilizados como filtragem dos links para que
> >> não
> >> seja capturado links de domínios diferentes e a verificação dos links
> >> para
> >> que não seja capturado links repetidos (Para cada página nova que o
> >> programa
> >> vai capturar os links, ele verifica os novos links com um vetor que
> >> contem
> >> todos os links).
>
> >> Obs. O programa segue em anexo.
>
> >> strpos.php -> Tad do Crawler
>
> >> pegatexto.php -> Implementação do programa.
>
> >> Alguém já implementou algo parecido ou teria alguma idéia para diminuir
> >> o
> >> tempo de computação?
> >> Muito obrigado.
>
> >> Atenciosamente
>
> >> Guilherme Longo
>
> >> --
>
> >> Você está recebendo esta mensagem porque se inscreveu no grupo
> >> "php-brasil" dos Grupos do Google.
> >> Para postar neste grupo, envie um e-mail para
> >> php-b...@googlegroups.com
> >> .
> >> Para cancelar a inscrição nesse grupo, envie um e-mail para
> >> php-brasil+...@googlegroups.com<php-brasil%2Bunsubscribe@googlegrou
> >> ps.com>
> >> .
> >> Para obter mais opções, visite esse grupo em
> >>http://groups.google.com/group/php-brasil?hl=pt-BR.
>
> >> --
> >> Você está recebendo esta mensagem porque se inscreveu no grupo
> >> "php-brasil" dos Grupos do Google.
> >> Para postar neste grupo, envie um e-mail para
> >> php-b...@googlegroups.com
> >> .
> >> Para cancelar a inscrição nesse grupo, envie um e-mail para
> >> php-brasil+...@googlegroups.com<php-brasil%2Bunsubscribe@googlegrou
> >> ps.com>
> >> .
> >> Para obter mais opções, visite esse grupo em
> >>http://groups.google.com/group/php-brasil?hl=pt-BR.
>
> > --
> > Você está recebendo esta mensagem porque se inscreveu no grupo
> > "php-brasil"
> > dos Grupos do Google.
> > Para postar neste grupo, envie um e-mail para
> > php-b...@googlegroups.com.
> > Para cancelar a inscrição nesse grupo, envie um e-mail para
> > php-brasil+...@googlegroups.com<php-brasil%2Bunsubscribe@googlegrou
> > ps.com>
> > .
> > Para obter mais opções, visite esse grupo em
Você está recebendo esta mensagem porque se inscreveu no grupo "php-brasil"
Para cancelar a inscrição nesse grupo, envie um e-mail para
php-brasil+...@googlegroups.com.
Para obter mais opções, visite esse grupo em
http://groups.google.com/group/php-brasil?hl=pt-BR.
--
Você está recebendo esta mensagem porque se inscreveu no grupo "php-brasil" dos Grupos do Google.
Para cancelar a inscrição nesse grupo, envie um e-mail para php-brasil+...@googlegroups.com.
Para obter mais opções, visite esse grupo em http://groups.google.com/group/php-brasil?hl=pt-BR.
Não vi seu código, mas o próprio curl possui um recurso para
multithreading. De uma googlada sobre "PHP Multithreading with Curl".
Você também pode usar pcntl_fork() para criar um processo filho para
cada url a ser processada, mas pra isso vai precisar de uma extensão
de cache, como APC ou memcache, por que os processos criados não são
threads, portanto não poderão compartilhar a informação. Mas voce pode
simular threads com cache.
Feliz Natal.
:)
--
Tiago Natel de Moura
http://blog.tiagomoura-design.com.br