Pergunta

Eu tenho um script PHP que verifica se há atualizações em muitos (milhares) de sites. Na ocasião (mais freqüentemente como o número de sites aumenta), eu recebo um tempo limite de execução relativa à actualização de um desses sites, e todo o roteiro vai pelo ralo.

A melhor idéia que eu poderia vir acima com é de desembolsar cada atualização, por isso, se ele morre, a atualização geral a apenas continua. Pelo que eu recolhi, parece PHP segmentação não é algo para se confiar, especialmente em uma plataforma Windows (que eu infelizmente tenho que trabalhar por diante).

Eu pensei sobre usando curl como um mecanismo de bifurcação, mas não vai ser muito mais caro para o servidor (no tempo e poder de processamento)?

Eu ficaria feliz de ouvir algumas ideias e experiências sobre PHP bifurcação / rosqueamento ...

graças, Omer.

Foi útil?

Solução 5

Bem, no final eu fui para onda, e ele funciona muito bem.

Eu precisava de uma solução multi-plataforma, como eu desenvolver em um Mac, enquanto neste caso o Serer produção é o Windows. Isso pcntl significava estava fora de questão.

Eu estava preocupado que o envio de milhares de pedidos de onda para o meu próprio servidor pode monopolizar-lo e incomodá usuários no site no momento, mas eu estava enganado.

Eu, entretanto, tem que adicionar um set_time_limit(0) para o script que inicia todas as chamadas onda, caso contrário, apenas expira.

Outras dicas

Se você estiver indo para usar cURL olhar no Multi * família de métodos que lhe permite agilizar cURL e interagindo com um conjunto de sites. Dito isto, você também pode definir o tempo de execução máximo (via ini_set) para algum número arbitrariamente alta e / ou manter o seu próprio contador watchdog para que você nunca deixá-lo ficar muito alto.

Mas sim, em última análise, vai ter problemas e a falta de apoio rosca completa em PHP. Então, sua melhor aposta é a de olhar para outras alternativas, por exemplo, outros idiomas / plataformas que fornecem suporte de segmentação nativo.

Eu consegui obter alguma forma de rosqueamento em php usando PCNTL extension.It não a melhor das soluções foi, mas fez o truque.

http://www.php.net/manual/en/ref .pcntl.php

experimente os seguintes links também, o me deu uma idéia de como ir sobre a implementação.

http://www.van-steenbeek.net/?q=php_pcntl_fork

http://www.hudzilla.org/phpbook/read.php/16_1_3

http://www.electrictoolbox.com/article/php/process- bifurcação /

Espero que isso ajude, mas php não é muito bom com enfiar embora.

Você pode definir a ini directiva max_execution_time a 0. isso deve remover o tempo de execução máximo, e permitir que o script seja executado sem incorrer este erro. Este valor tem de ser definido no seu arquivo php.ini no entanto -. Utilizando ini_set não trabalho

set_time_limit(0);

set_time_limit docs

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top