findrai 11 Denunciar post Postado Abril 21, 2013 Acho que eu sei onde está meu erro. O foreach tá executando a instrução pra cada elemento. Vou alterando aqui. De toda forma, vc não quer me passar a URL desses XMLs para eu testar antes de te enviar o código? Abs. Compartilhar este post Link para o post Compartilhar em outros sites
fmda 0 Denunciar post Postado Abril 21, 2013 eu to fazendo num servidorzinho da minha maquina, mas o xml de teste que estou usando é este parece que eu certo passando o pos++ pra dentro, tinha dado erro porque tinha lixo <Data> <Id>1</Gamertag> <Nome>Nome</Nome> <Sobrenome>Sobrenome</Sobrenome> </Data> E quando nao tem os dados é <Data> <Error>Sem dados</Error> <Status>falhou</Status></Data> eu estou fazendo algumas modificações, melhorias e jogando direto pro banco, ao invez de jogar no arquivo. para caso precisse basta trocar o fwrite por esta linha, num é? mysql_query("INSERT INTO tabela (id, nome, sobrenome) VALUES ('$gravar->Id', '$gravar->Nome', '$gravar->Sobrenome'"); sim, estou alimentando para o banco agora vamos ver no final se tudo vai dar certo, mandei ler varios xml Compartilhar este post Link para o post Compartilhar em outros sites
findrai 11 Denunciar post Postado Abril 21, 2013 Amigo, antes do <data> vc tem outro parâmetro, certo? O <response>, isso? Amigo, vamos lá. Desta vez eu montei arquivos e testei: <?php #set_time_limit(3600); //1 hora pra dar timeout $pos = 0; if (!empty($_GET['pos'])) { $pos = $_GET['pos']; } $xmls = array( 'http://localhost/test/xmls/xml1.xml', 'http://localhost/test/xmls/xml2.xml', 'http://localhost/test/xmls/xml3.xml', 'http://localhost/test/xmls/xml4.xml' ); $total_pos = count($xmls); $xmldata = simplexml_load_file($xmls[$pos]); if (!empty($xmldata->Data->ID)) { //verifica se o valor existe foreach ($xmldata->Data as $gravar) { $fp = fopen("bloco.txt", "a"); //passei o fopen e fclose pra dentro do loop pra não abrir o arquivo se não for gravar $escreve = fwrite($fp, $gravar->ID . ";\n"); fclose($fp); } } $pos++; //não verdade, fora da condição pois tem que pular o arquivo dando certo ou não if ($pos < $total_pos) { header("Location: teste.php?pos=" . $pos); } else { echo 'Todos os XMLS foram lidos.'; } ?> Se atente apenas que vc tinha me passado a estrutura do XML com uma TAG a menos (sem o <response>) e sem ela o PHP não lê. Outro fato é que no código vc chama por ID e na estrutura de XML que vc me passou estava Id. Ou seja, verifique se seu xml vem com uma tag antes das que vc passou (seja response ou qual for, basta ter) e se vem ID mesmo ao invés de Id. Tô falando isso apenas pra evitar problemas na hora que vc for executar. Eu montei 4 XMLs aqui de teste, um com o formato de erro e mandei salvar no arquivo TXT com ponto e vírgula e quebra de linha. Tudo funcionou redondo com esse código que postei agora. Abraço. Compartilhar este post Link para o post Compartilhar em outros sites
fmda 0 Denunciar post Postado Abril 22, 2013 vou testar com o codigo que vc psotou acima. antes eu deixei lendo todos os arquivos, mas quando chegou no xml 20 ele deu a mensagem abaixo Redirecionamento incorreto O Firefox detectou que o pedido para este endereço não será concluído devido à forma que o servidor o está redirecionando. Este problema algumas vezes pode ser causado pela desativação ou bloqueio de cookies isso dava antes quando nao tinha o Id, mas depois vc editou o codigo pra remover isso e parece que deu novamente. Não entendi, vou executar novamente. Sim tem o response esqueci de escreve-lo e o Id realmente estava errado @EDIT executei novamente e sempre quando chega no pos=20 ele da esta mensagem. Porque? não entendi de 20 em 20 acontece isso Compartilhar este post Link para o post Compartilhar em outros sites
findrai 11 Denunciar post Postado Abril 22, 2013 Acho que seu firefox vai continuar bloqueando. É uma função de segurança no seu navegador. Ele vê que a página redireciona e não carrega nunca, ele acha que vc está sendo trollado. Aí acho que tá na hora da gente voltar a discutir o "por que" que vc não consegue ler mais de um XML em uma execução só. Compartilhar este post Link para o post Compartilhar em outros sites
fmda 0 Denunciar post Postado Abril 22, 2013 que merd** tem :( sera que consigo uma forma de quebrar este bloqueio ao mesmo pra ler todos xml? sera que com IE acontece? se bem que IE ninguem merece tbm deve bloquear no 2 rsrsrs @edit parece que no IE, ele ta lendo todos, pelo menos agora ta no 30 Compartilhar este post Link para o post Compartilhar em outros sites
findrai 11 Denunciar post Postado Abril 22, 2013 Amigo, qual erro que vc tem quando tenta assim: <?php set_time_limit(3600); //1 hora pra dar timeout $xmls = array( 'http://localhost/test/xmls/xml1.xml', 'http://localhost/test/xmls/xml2.xml', 'http://localhost/test/xmls/xml3.xml', 'http://localhost/test/xmls/xml4.xml' ); $fp = fopen("bloco.txt", "a"); //passei o fopen e fclose pra dentro do loop pra não abrir o arquivo se não for gravar foreach ($xmls as $xml) { $xmldata = simplexml_load_file($xml); if (!empty($xmldata->Data->ID)) { //verifica se o valor existe foreach ($xmldata->Data as $gravar) { $escreve = fwrite($fp, $gravar->ID . ";\n"); } } } fclose($fp); echo 'Todos os XMLS foram lidos.'; ?> Compartilhar este post Link para o post Compartilhar em outros sites
fmda 0 Denunciar post Postado Abril 22, 2013 deste jeito nenhum, ele le normal @edit com o IE ja leu 94 @edit 2 travou no xml 101 e parece que em alguns momentos ele gravou 2x o mesmo xml, ficando duplicada a linha Compartilhar este post Link para o post Compartilhar em outros sites
findrai 11 Denunciar post Postado Abril 22, 2013 Do jeito que postei por último ele lê normal? Por que ficar dando redirects? Não entendi. Compartilhar este post Link para o post Compartilhar em outros sites
fmda 0 Denunciar post Postado Abril 22, 2013 tbm não sei, sera que é o firefox que ta travando? sem os redirect ele dava o erro 503, quando passava varios xml, neste exemplo acima so testei com 2 pode ser isso vou ler com todos xmls, sem o redirect Compartilhar este post Link para o post Compartilhar em outros sites
findrai 11 Denunciar post Postado Abril 22, 2013 Beleza, aguardo resultados. Compartilhar este post Link para o post Compartilhar em outros sites
fmda 0 Denunciar post Postado Abril 22, 2013 sem os redirect não funciona mesmo não por algum motivo ele da este erro, parece que ele le tudo na memoria pra depois sair imprimindo, isso deve sobrecarregar @edit porque as vezes ele repete o conteudo, aparece alguns registros iguais. estranho Compartilhar este post Link para o post Compartilhar em outros sites
findrai 11 Denunciar post Postado Abril 22, 2013 Muito estranho mesmo parceiro... Não tem sentido isso pra mim. Meus testes vão OK. Vai se contentar com o IE então? Compartilhar este post Link para o post Compartilhar em outros sites
fmda 0 Denunciar post Postado Abril 22, 2013 ele sempre para no 101 ou 102, como tenho 300 e poucos xml acho que da levar por enquanto, quebro ele em 3 partes. se acha que por um contador quando chegar em 100 e dar tipo um standby e depois comecar novamente sera q da certo? cara muito obirgado pelo ajuda, obrigado mesmo :) ajudou bastante Compartilhar este post Link para o post Compartilhar em outros sites
findrai 11 Denunciar post Postado Abril 22, 2013 A gente pode fazer o redirect em javascript. Talvez o firefox dê como carregado dessa forma...Testa por favor: <?php #set_time_limit(3600); //1 hora pra dar timeout $pos = 0; if (!empty($_GET['pos'])) { $pos = $_GET['pos']; } $xmls = array( 'http://localhost/test/xmls/xml1.xml', 'http://localhost/test/xmls/xml2.xml', 'http://localhost/test/xmls/xml3.xml', 'http://localhost/test/xmls/xml4.xml' ); $total_pos = count($xmls); $xmldata = simplexml_load_file($xmls[$pos]); if (!empty($xmldata->Data->ID)) { //verifica se o valor existe foreach ($xmldata->Data as $gravar) { $fp = fopen("bloco.txt", "a"); //passei o fopen e fclose pra dentro do loop pra não abrir o arquivo se não for gravar $escreve = fwrite($fp, $gravar->ID . ";\n"); fclose($fp); } } $pos++; //não verdade, fora da condição pois tem que pular o arquivo dando certo ou não if ($pos < $total_pos) { echo '<script type="text/javascript"> window.location = \'teste.php?pos=\'' . $pos . '\'; </script>'; } else { echo 'Todos os XMLS foram lidos.'; } ?> Compartilhar este post Link para o post Compartilhar em outros sites
fmda 0 Denunciar post Postado Abril 22, 2013 parece que nao consegue redirecionar, so le 2 e para mas creio que com o DISTINCT consigo retirar estas duplicidades Compartilhar este post Link para o post Compartilhar em outros sites
findrai 11 Denunciar post Postado Abril 22, 2013 Entranho brother. Se eu puder ajudar mais em algo, me diga. Vlw. Compartilhar este post Link para o post Compartilhar em outros sites
fmda 0 Denunciar post Postado Abril 22, 2013 estranho, deixei lendo os xml e vi que ele pulou alguns sera que esta atropelando e nao ta lendo tem como por um tempo pra leitura? e em um deles leu id e nome, mas nao leu sobrenome isso para um mesmo xml 0o Compartilhar este post Link para o post Compartilhar em outros sites
findrai 11 Denunciar post Postado Abril 22, 2013 Muito estranho. Mas ele não faz leitura do redirect enquanto não terminar de ler o XML. Não é pra pular de forma alguma. Seus XMLs são 100% confiáveis sempre? Compartilhar este post Link para o post Compartilhar em outros sites
fmda 0 Denunciar post Postado Abril 23, 2013 num sei, pode ser o servidorzinho q da algum problema e da algum problema e nao consegue ler o xml e assim pula ele. Eu comecei a aumentar os dados do xml pra varias linhas pra ver, porque antes era so umas 10 linhas Compartilhar este post Link para o post Compartilhar em outros sites