Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Willian Aquino

[Resolvido] API DOM XML

Recommended Posts

Boa tarde pessoal,

 

 

Gente é o seguinte, estou usando a Api Dom XML em PHP para gerar um sitemap para indexar as páginas no google e ocorre um erro muito estranho que não sei o que seria se alguém poder me ajudar, fico muito agradecido.

 

Warning: DOMDocument::save() [function.DOMDocument-save]: encoder erroroutput conversion failed due to conv error, bytes 0xE7 0x61 0x2D 0x70 in C:\wamp\www\Sitemap\gerador_sitemap-0-2.php on line 46

Warning: DOMDocument::save() [function.DOMDocument-save]: encoder erroroutput conversion failed due to conv error, bytes 0xE7 0x61 0x2D 0x70 in C:\wamp\www\Sitemap\gerador_sitemap-0-2.php on line 67

Ele até gerar os arquivos xml mas erado, faltando links de várias páginas , á realizei vários debug e está trazendo os valores corretos como eu quero mas por algum motivo da erro e gerar esse Warning que desconheço.

Só para lembrar o csv tem mais de 8 mil links.

 

$cont   = 0;
	$salvar = 1;

	function AddLinks($document, $link, $data, $changefreq, $prioridade){
		$URL  = $document->createElement("url");  			// Cria nó URL
		$link = $document->createElement("loc", $link); 	// Cria No filho link
		$data = $document->createElement("lastmod", $data); 	// Cria nó filho data
		$changefreq = $document->createElement("changefreg", $changefreq);
		$prioridade = $document->createElement("priority", $prioridade);
		
		$URL->appendChild($link);	// add elementos no root
		$URL->appendChild($data);	// add elementos no root
		$URL->appendChild($changefreq);
		$URL->appendChild($prioridade);
		
		return $URL;
	}
	
	
	$arquivo = fopen ("teste.csv","r"); // abre arquivo csv
	$data = date("Y-m-d:T16 G:i:s");

		while (($arr_links = fgetcsv($arquivo, 0, ",")) != FALSE) {	
		
			$arr[] = $arr_links[0];
		
		}

                // varrendo o array

		foreach($arr as $valor){
			
			if($cont == 1000){
				$dom = new DOMDocument("1.0", "ISO-8859-1");
				$dom->preserveWhiteSpace = false;
				$dom->formatOutput = true;
				$root = $dom->createElement("urlset"); 

                                // gerando os nos com os links
				
				for($i=0; $i+1 <= count($arr_links); $i++) {
						$changefreq = "daily";
						$prioridade = "0.9";
						$url = AddLinks($dom, $arr_links[$i], $data, $changefreq, $prioridade);	
						$root->appendChild($url);
				}
					$dom->appendChild($root);
					$dom->save("C:\wamp\www\Sitemap\XML\sitemap".$salvar.".xml");     //salvando o arquivo
					$cont = 0;
					$salvar++;
					unset($arr_links);
					
			}else{	
					// cria um vetor com os 1000 links anteriores 
					$arr_links[] = $valor; 
					$cont++;
			}
		}
		
                   // quando acabar os links e não chegar a 1000 varre o vetor novamente para pegar os links que não foram criados
			if(next($arr_links) != false){
				
				for($i=0; $i+1 <= count($arr_links); $i++) {
					
					$changefreq = "daily";
					$prioridade = 0.9;
					$url = AddLinks($dom, $arr_links[$i], $data, $changefreq, $prioridade);	
					$root->appendChild($url);
					$dom->appendChild($root);
					$dom->save("C:\wamp\www\Sitemap\XML\sitemap".$salvar.".xml");     //salvando o arquivo
				}	
			}

			header("Content-Type: text/xml");
			echo $dom->saveXML(); 


 

Obrigado !!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom pessoal,

 

Depois de várias tentativas 3 dias praticamente, já não aguentava mais mexer nesse código consegui resolver a parada !!!!! http://forum.imasters.com.br/public/style_emoticons/default/clap.gif

 

 

Mudei de

$dom = new DOMDocument("1.0", "ISO-8859-1");
para
$dom = new DOMDocument("1.0", "UTF-8");

E deu tudo certo...

Procure o erro na net e achei esse página aqui...

http://bugs.php.net/bug.php?id=31994

 

E lá verifiquei que para gerar xmls grandes preciso salvar gerar um xml no formato UTF-8....

 

Abraços !!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.