Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá,
Eu tenho uma pagina no meu site que realiza uma sincronização de dados, ou seja, quando entra nesta página ele atualiza todos seus dados. Como tenho muitos usuarios cadastrados no site estou querendo uma forma de automatizar isso, ou seja, um array por exemplo onde ele vai atualizando pagina a pagina e assim sincronizando-as.
Porem nao sei como realizar isso, seria algo do tipo
http://www.meusite.com.br/index.php?usuario=1
http://www.meusite.com.br/index.php?usuario=2
http://www.meusite.com.br/index.php?usuario=3
http://www.meusite.com.br/index.php?usuario=4
[...]
assim, quando terminar de sincronizar o usuario 1, ele faz para o 2 e por aí vai. ate fechar todos os usuarios.
Alguem poderia me ajudar
up, caiu rapido de mais :(
Olá FMDA. Não entendi muito bem o que você está querendo fazer, mas você pode criar um único script de alteração e colocar ele dentro de um WHILE ou FOR, e ir executando até alterar todos os dados que você deseja.
Você vai alterar páginas ou dados no banco? Qualquer coisa coloca o código para que o pessoal possa analisar.
eu conseguir criar um laço com array, mas nao sei porque cargas d'agua que se eu executar no chrome so le ate a posicao 20, ja no ie ate a posição 100. Ou seja, se eu tenho 1000 páginas pra sincronizar ele retorna erro 500, o servidor num guenta. sera pau no codigo?
tem como faze de uma forma melhor, a duvida seria.
por 1000 paginas num array, por exemplo, e cada termino de leitura ele vai pra outra pagina.
Assim ate chegar no final das 1000 pagias
<?php
$pos = 0;
if (!empty($_GET['pos'])) {
$pos = $_GET['pos'];
}
$xmls = array(
'http://www.meusite.com.br/pagina.xml?usuario=1',
'http://www.meusite.com.br/pagina.xml?usuario=2',
.....
);
$total = count($xmls);
$xmldata = simplexml_load_file($xmls[$pos]);
foreach ($xmldata->Data as $teste) {
<aqui eu pego os dados e salvo no banco>
}
if ($pos < $total_pos) {
header("Location: teste.php?pos=" . $pos);echo 'Todos os XMLS foram lidos.';
}Era isso que eu ia te sugerir fmda....
Um tempo atrás desenvolvi um agregador de ofertas de compra coletiva, e ele usava uma lógica parecida com essa...
No seu caso seria o seguinte, você adicionaria uma variável na tabela de usuários informando se já foi sincronizado ou não....
Ai você roda o script para pegar 1 registro, atualiza os dados que você precisa e seta o campo dele no banco como sincronizado, e depois de 10/15/20 segundos atualiza a página. Automaticamente ele irá pegar o próximo registro que não esteja sincronizado.
Entendeu a lógica?
Abraços,
Vitor M. Braga.
sera o que esta ocasionando isso é varias consultas em sequencia? aí barra no erro 500?
problema de por 10 segundos, que vai demorar muito ler todos registros.
tem como deixar o servidor fazer isso em background, tipo programar pra ele fazer em off, ou seja, não demonstrando para o usuario. sem precisar deu statar o serviço?
esta parte nao entendo bem
Em que parte voce incrementa a variável $pos?
Faça o teste de usar javascript para redirecionar com um time de 1 ou 2 segundos.
A ideia do vitorm11 é boa, marcar quais ja foram sincronizados. Dessa forma se der erro voce não perde o progresso.
Sobre o servidor, procure se ele oferece o serviço de Cron Job, se for cPanel ja vem por padrão. Ele permite que voce agende horários para executar scripts automáticos.
incremento antes do ultimo laço
eu utilizo locaweb, parece que eles utilizam isso.
mas como funciona, basta passar o comando em cima de uma pagina php por exemplo
que naquele momento ele vai executar?
outra duvida, não entendi a parte do script de redirecionar. Pois se eu colocar 2 redirect, no primeiro ja vai redirecionar e não consigo mais realizar o redirecionamneot
<META http-equiv="refresh" content="3;URL=[http://www.meusite.com.br/teste.php&user=1](http://www.meusite.com.br/teste.php&user=1)">
<META http-equiv="refresh" content="3;URL=[http://www.meusite.com.br/teste.php&user=2](http://www.meusite.com.br/teste.php&user=2)">Com o Cron Job voce configura de quanto em quanto tempo ele vai acessar uma determinada página. Ex: a cada uma hora quero que o servidor acesse a página www.meusite.com.br/atualizaUsuarios.php. É só fazer a configuração no painel e ele vai acessar a cada hora..
Pode utilizar o seguinte para redirecionar:
echo "<script>setTimeout(function() { window.location.replace('www.meusite.com.br/teste.php?user=".$pos."');}, 2000); </script>";>
Com o Cron Job voce configura de quanto em quanto tempo ele vai acessar uma determinada página. Ex: a cada uma hora quero que o servidor acesse a página www.meusite.com.br/atualizaUsuarios.php. É só fazer a configuração no painel e ele vai acessar a cada hora..
Pode utilizar o seguinte para redirecionar:
echo "<script>setTimeout(function() { window.location.replace('www.meusite.com.br/teste.php?user=".$pos."');}, 2000); </script>";
ainda nao entendi a questão do redirect. Porque se eu redirecionar a pagina sera atualizada e nao ira redirecionar para outros urls.
Estou tentando fazer desta forma, mas nao sei porque ele chega no final mas ele nao vista as paginas que coloquei no array, porque?
<?php
set_time_limit(3600);
$pos = 0;
if (!empty($_GET['pos'])) {
$pos = $_GET['pos'];
}
$xmls = array(
'http://www.meusite.com.br/teste.php?user=1',
'http://www.meusote.com.br/teste.php?user=2'
);
$total_pos = count($xmls);
$pos++;
if ($pos < $total_pos) {
header("Location: teste.php?pos=" . $pos);echo 'Todos os dados foram sincronizados.';
}
?>
Olá fmda,
Primeiro... Sem esses ups.... kkkkk
Segundo vamos ao seu problema:
Você pode criar um arquivo de sincronização que no final da sincronização de um usuário ele procura o próximo usuário e é redirecionado para página.
Como está o seu código de sincronização, tem como você postar aqui para ver se eu posso te ajudar melhor?
Abraços,
Vitor M. Braga.