Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Estou com uma duvida e to meio sem saber como posso fazer, eu leio um xml do meu servidor e demonstro as informações com foreach, porem as vezes o xml e muito grande e demorar de mais carregar as informações
então to querendo filtrar, ou seja, quando tiver 10 registro eu vou quebrar em páginas. Porem nao to conseguindo fazer isso com foreach. ate pensei com for mas nao terei como retornar a quantidade de registro teria
>
[...]
<tag1>
<tag>
<Id>1480657</Id>
</tag>
<tag>
<Id>1480657</Id>
</tag>
<tag>
<Id>1480657</Id>
</tag>
</tag1>>
foreach($xml->Data as $dados){
[...]
}
neste caso assim retornei 3 registro, mas queria restringir em 2, como oderia fazer, seria colocar um contador, mas como incluir ele na condicao
mas aí ele vai imprimir apenas uma vez, ou entendi errado
>
$url = "[http://www.site.com.br/teste,xml](http://www.site.com.br/teste,xml)";
$xml = simplexml_load_file($url);
foreach($xml->Data->usuario as $nome){
$i++
if ($i = 20){
[...]
}
}
porque minha intenção é deixar o carregamento do xml mais rapido na pagina, porque tenho xml que tem 5000 linhas e quero paginar este xml
@EDIT
Eu mudei para while, mas ainda nao resolvi meu problema, ele mostra os 20 mas por baixo ele ainda continua carregando o xml por completo para depois demonstrar.
então agora to sem saber, como faço pra mostrar apenas 20 do xml e evitando que ele carregue todo o xml primeiro pra depois demonstrar os valores
Cara, ele só vai imprimir os 20 primeiros, como você disse. ai vc cria uma pagina 2. Ná pagina 2, começa do 20 em diante
Cara, ele só vai imprimir os 20 primeiros, como você disse. ai vc cria uma pagina 2. Ná pagina 2, começa do 20 em diante
eu conseguir fazer aqui, paginando mas pensei que este resolveria meu problema mas ainda nao resolveu.
porque "por baixo" ele ainda carrega o xml e o servidor fica lento (pagina demora 20 segundo pra carregar o xml), como posso fazer pra diminuir este tempo.
ele ta lendo 15 mil linhas para depois imprimir, entao paginando ainda nao resolve. porque vai ler 15k de linha e vai paginar, ler de novo 15k de linha e paginar novamente
problema se transformou em outro
eu mudei a leitura do arquivo utilizando este tutorial mas ainda assim demora de mais carregar
http://www.vrusso.com.br/blog/2009/05/manipulando-xml-em-grande-escala-com-php/
se eu baixo o xml pro servidor (800k) e leio dele é extremamente rapido, mas quando a leitura é feita via url (http://www..../teste.xml) demora de mais a ler, alguma sugestão?
Você já pensou em ler esse XML e mandá-lo para o BD em vez de ficar toda hora consultando ele? Assim você só tem a lentidão uma vez, a paginação partir disto será sempre rápida, óbvio que se esse XML for ficar mudando você terá que de tempos em tempos zerar a tabela e refazer o processo.
sim, ele varia. 3x ao dia ele deve ser atualizado.
to tentando pensar em algo mas ainda sem solução.
tava pensando talvez ao entrar na pagina ele baixa o xml pro host e ele le o xml agora a partir deste download. mas sera que ao entrar na pagina ele ira fazer o download do arquivo rapido, creio que ainda nao.
o bom seria, eu ler ate determinado contador e quando chegar no valor ele sair do foreach, mas sempre ele le tudo pra depois filtrar.
>
tava pensando talvez ao entrar na pagina ele baixa o xml pro host e ele le o xml agora a partir deste download. mas sera que ao entrar na pagina ele ira fazer o download do arquivo rapido, creio que ainda nao.
o bom seria, eu ler ate determinado contador e quando chegar no valor ele sair do foreach, mas sempre ele le tudo pra depois filtrar.
Se os dois servidores tiverem conexões boas o download será muito rápido, quem usa SSH para puxar arquivos de um servidor para outro sabe que a coisa é mágica...
Quanto a encerrar o foreach, basta usar o break no ponto que você deseja e o laço é encerrado.
>
Se os dois servidores tiverem conexões boas o download será muito rápido, quem usa SSH para puxar arquivos de um servidor para outro sabe que a coisa é mágica...
Quanto a encerrar o foreach, basta usar o break no ponto que você deseja e o laço é encerrado.
eu fiz o break, mas ainda assim ele primeiro le todo o xml e depois mostra os dados.
na leitura ele nao encerra, ou estou fazendo errado.
eu uso desta forma na pagina que tenho:
>
$url = "[http://www.site.com.br/teste,xml](http://www.site.com.br/teste,xml)";
$xml = simplexml_load_file($url);
foreach($xml->Data->usuario as $nome){
$i++
if ($i = 20){
[...]
}
}Eu vi. Ele carrega tudo sim.
É porque a função que você usa transforma o arquivo inteiro numa variável.
No caso de arquivos comuns, existe o fopen que abre o arquivo mas você precisa usar o fgets para pegar linha por linha.
Por isso que eu disse aquilo.
Não sei se existe isso pro xml
estou pesquisando e mais proximo que encontrei foi desta forma http://www.vrusso.com.br/blog/2009/05/manipulando-xml-em-grande-escala-com-php/ mas ainda assim ele le tudo pra depois imprimir :(
Cara
Cria uma função então
Leia o arquivo como texto com o fopen e trate para imprimir as tags
Poe um if com um contador dentro do foreach
Se validar, da um break()