Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Boa noite estou tentando ler alguns arquivos xml em php, porem os arquivos xml são externos, vou postar os códigos.
Código php
>
<?php
// diretório onde estão os arquivos
$dir = "F:\\xxx1\\xxx2\\xxx3\\Rank";
$xml = simplexml_load_file("$dir")
$max = 10; // $max e o numero de noticias q vc quer exibir
$cont = 0; // limita a noticias
// *.xml são os formatos de arquivos a serem alterados
foreach (glob("$dir/*.xml") as $arquivo) {
$p1 = explode("/", $arquivo);
$p2 = explode(".", $p1[1]);
if($cont < $max){
foreach($arquivo->Tudo as $Tudo) echo $Tudo->cod;
echo $Tudo->Nome;
echo $Tudo->Level;
echo $Tudo->Gold;
echo $Tudo->Classe;
echo "<br>";
}
}
$cont++;
}
?>
Código xml
>
<Tudo><Nome>testa-rank</Nome>
<Level>157</Level>
<Gold>14532512</Gold>
<Classe>2</Classe></Tudo>Aparece esse erro.
Parse error: syntax error, unexpected T_VARIABLE in C:\Program Files (x86)\VertrigoServ\www\Exemplos\Ex4.php on line 6
Falta o ponto-e-virgula no final desta linha [inline]$xml = simplexml_load_file("$dir");[/inline]
Arrumei aqui e agora so ta esse erro.
Warning: simplexml_load_file() [<a href='function.simplexml-load-file'>function.simplexml-load-file</a>]: I/O warning : failed to load external entity "file:///F:/RealseUltimateDestiny/TMSRV%0Dun/Rank" in C:\Program Files (x86)\VertrigoServ\www\Exemplos\Ex4.php on line 4
Alternativa 1 :seta: habilitar o allow_url_fopen no php.ini
Alternativa 2 :seta: utilizar cURL :seta: http://forum.imasters.com.br/topic/494166-erro-na-gerao-de-um-arquivo-xml/#entry1965026
Já tentou!
>
Alternativa 1 :seta: habilitar o allow_url_fopen no php.ini
Alternativa 2 :seta: utilizar cURL :seta: http://forum.imasters.com.br/topic/494166-erro-na-gerao-de-um-arquivo-xml/#entry1965026
Já esta On.
Assim, eu quero chamar todos os arquivos xml gerado na pasta Rank que fica no diretório ("F:\\xxx1\\xxx2\\xxx3\\Rank"), e mostrar o conteúdo de cada um deles um em baixo do outro.
Acho que fica difícil assim, então dei uma pesquisada acho que é possível importa os dados xml para um banco de dados.
Tabela "Ranking"
>
CREATE TABLE IF NOT EXISTS `ranking` (
`level` varchar(4) NOT NULL,
`Nome` varchar(255) NOT NULL,
`Gold` varchar(255) NOT NULL,
`Classe` varchar(15) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Codigo php
>
<?php
/ Conectar com o banco de dados da aplicação /
include "config.php";// inclui o arquivo conf.php
$con = mysql_connect($host,$user,$pass) or die ("Não foi possível a conexão com o servidor de banco de dados");// ciar uma conexao com o banco de dados
mysql_select_db($dbname) or die ("Não foi possível encontrar o banco de dados especificado");
$Dir = 'F://RealseUltimateDestiny//TMSRV//run//Rank';/ Percorre o objeto e salva as informações no banco de dados /
$x = 0;
foreach ($xml as $Ranking){
mysql_query("INSERT INTO Ranking(Level, Nome, Gold, Classe) VALUES ('$Ranking->Level', '$Ranking->Nome', '$Ranking->Gold', '$Ranking->Classe')");
if(mysql_affected_rows() != -1){
$x++;
}
}
echo "$x Dados importados com sucesso!";
?>
Config.php
>
<?php
$host = "localhost"; //Host onde a página se encontra
$dbname = "ranking"; //Nome do banco de dados q armazena os dados
$user = "root"; //Nome do usuário q tem acesso ao banco de dados
$pass = ""; //Senha do usuário q tem acesso ao banco de dados
?>tbm acho que é melhor, mas sugiro que substitua o mysql por mysqli, na próxima versão do PHP mysql estará obsoleto
>
tbm acho que é melhor, mas sugiro que substitua o mysql por mysqli, na próxima versão do PHP mysql estará obsoleto
O problema que tenho aqui agora é que ele não chama nenhum arquivo xml do diretório que está ali.
$Dir = 'F://RealseUltimateDestiny//TMSRV//run//Rank';
Esse caminho esta correto?
Qual é a extensão final do arquivo é .xml, .xml.gz, .gz?
>
$Dir = 'F://RealseUltimateDestiny//TMSRV//run//Rank';
Esse caminho esta correto?
Qual é a extensão final do arquivo é .xml, .xml.gz, .gz?
A extensão final dos arquivos estão com .xml
/applications/core/interface/imageproxy/imageproxy.php?img=http://img542.imageshack.us/img542/7963/errokm.png&key=f49ac92734258164866b50d6efc483da201b9c909e44ffdc2acff309195872d5" alt="errokm.png" />
$Dir = 'F://RealseUltimateDestiny//TMSRV//run//Rank';
$xml = simplexml_load_file('$Dir'); / Lê o arquivo XML e recebe um objeto com as informações /
Mas você declarou qual a extensão final do arquivo?
$Dir = 'F://RealseUltimateDestiny//TMSRV//run//Rank';
$xml = simplexml_load_file($Dir . '.xml'); / Lê o arquivo XML e recebe um objeto com as informações /
Sim, ta tudo ali, será que não ficaria melhor se fizesse por txt deves xml ?
Considere utilizar a constante pré-definida DIRECTORY_SEPARATOR, para informar o caminho do arquivo.
Outra coisa é que não é necessário escapar a barra "/", somente a "\".
Bom eu dei uma modificada, como faço agora pra ele abrir todos os xml que estão na pasta e mandar pra BD que eu fiz.
o php que recebe os dados da BD estão assim
>
<?php
include ("conectar.php");
// Colocando o Início da tabela
?><body bgcolor="#000000" text="#FF9933" link="#FF9933">
<p>Ranking - Confira aqui os 10 Players mais fortes do server!</p>
<table width="362" height="86" border="1" cellspacing="10">
<tr>
<td width="170" height="24"><b>Classe</b></td>
<td width="204"><b>Nick</b></td>
<td width="204"><b>Level</b></td>
</tr>
<?php
// Fazendo uma consulta SQL e retornando os resultados em uma tabela HTML
$query = "SELECT `Nome`,`Level` ,`Classe` FROM ranking ORDER BY `Level` DESC LIMIT 10";
$resultado = mysql_query($query) or die(mysql_error()); ?>
<tr>
<td> <?php
if($linha['Classe'] == 0){
echo '<img src="[http://imageshack.us/a/img705/4307/41145501.gif](http://imageshack.us/a/img705/4307/41145501.gif)" alt="" class="img-border">';
} else if($linha['Classe'] == 1){
echo '<img src="[http://imageshack.us/a/img690/8054/15060043.gif](http://imageshack.us/a/img690/8054/15060043.gif)" alt="" class="img-border">';
}else if($linha['Classe'] == 2){
echo '<img src="[http://imageshack.us/a/img842/1372/55905850.gif](http://imageshack.us/a/img842/1372/55905850.gif)" alt="" class="img-border">';
} else if($linha['Classe'] == 3){
echo '<img src="[http://imageshack.us/a/img839/9764/20787621.gif](http://imageshack.us/a/img839/9764/20787621.gif)" alt="" class="img-border">';
} ?></td>
<td> <?php echo $linha['Nome']; ?></td>
<td> <?php echo $linha['Level']; ?></td>
</tr>
<?php
}
$query2 = "SELECT COUNT(*) as user FROM ranking";
$resultado2 = mysql_query($query2) or die(mysql_error());?>
</table>
<p>Total de Contas: <?php echo $linha2['user']; ?></p>
<p>By oxablod.<br>
Ultimate Destiny 7.53
</p>
<?php
}
?>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>Use glob.
Logo após basta iterar o array.
Seria basicamente informar o caminho para os arquivos .xml
<?php
$path = 'path to files';
$files = glob( sprintf( '%s*.xml', $path ) );
foreach( $files as $file )
{
// code here
}Fiz assim, para ele abri os arquivos xml.
Abrir os Arquivos xml = OK
Fiz aqui para importa os dados, mas os dados não estão indo para a tabela.
Importar.php
>
<?php
/ Conectar com o banco de dados da aplicação /
include "config.php";// inclui o arquivo conf.php
$con = mysql_connect($host,$user,$pass) or die ("Não foi possível a conexão com o servidor de banco de dados");// ciar uma conexao com o banco de dados
mysql_select_db($dbname) or die ("Não foi possível encontrar o banco de dados especificado");
$path = 'F:/RealseUltimateDestiny/TMSRV/run/Rank';
$files = glob( sprintf( '%s*.xml', $path ) );
/ Percorre o objeto e salva as informações no banco de dados /
//$x = 0;
foreach( $files as $file ){
$query = 'insert into ranking (Nome, level, Gold, Classe)';
$sxml = new SimpleXMLElement($xml);
foreach ($sxml as $Tudo)
$Nome = (string) $Tudo->Nome;
$level = (string) $Tudo->Level;
$Gold = (string) $Tudo->Gold;
$Classe = (string) $Tudo->Classe;
$tmpQuery = sprintf($query, $Nome, $level, $Gold, $Classe);
echo sprintf('Executando query: %s%s', $tmpQuery, "\n");
mysql_query($tmpQuery);
}
?>
Exibir.php
>
<?php
include ("conectar.php");?><body bgcolor="#000000" text="#FF9933" link="#FF9933">
<p>Ranking - Confira aqui os 10 Players mais fortes do server!</p>
<table width="362" height="86" border="1" cellspacing="10">
<tr>
<td width="170" height="24"><b>Classe</b></td>
<td width="204"><b>Nick</b></td>
<td width="204"><b>Level</b></td>
</tr>
<?php
// Fazendo uma consulta SQL e retornando os resultados em uma tabela HTML
$query = "SELECT `Nome`,`Level` ,`Classe` FROM ranking ORDER BY `Level` DESC LIMIT 10";
$resultado = mysql_query($query) or die(mysql_error()); ?>
<tr>
<td> <?php
if($linha['Classe'] == 0){
echo '<img src="[http://imageshack.us/a/img705/4307/41145501.gif](http://imageshack.us/a/img705/4307/41145501.gif)" alt="" class="img-border">';
} else if($linha['Classe'] == 1){
echo '<img src="[http://imageshack.us/a/img690/8054/15060043.gif](http://imageshack.us/a/img690/8054/15060043.gif)" alt="" class="img-border">';
}else if($linha['Classe'] == 2){
echo '<img src="[http://imageshack.us/a/img842/1372/55905850.gif](http://imageshack.us/a/img842/1372/55905850.gif)" alt="" class="img-border">';
} else if($linha['Classe'] == 3){
echo '<img src="[http://imageshack.us/a/img839/9764/20787621.gif](http://imageshack.us/a/img839/9764/20787621.gif)" alt="" class="img-border">';
} ?></td>
<td> <?php echo $linha['Nome']; ?></td>
<td> <?php echo $linha['Level']; ?></td>
</tr>
<?php
}
$query2 = "SELECT COUNT(*) as user FROM ranking";
$resultado2 = mysql_query($query2) or die(mysql_error());?>
</table>
<p>Total de Contas: <?php echo $linha2['user']; ?></p>
<p>By oxablod.<br>
Ultimate Destiny 7.53
</p>
<?php
}
?>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>O botão de Editar sumiu então peso desculpas pelo Double post, fiz o seguinte então ta ai o Código e o Erro que esta mostrando agora, e ainda não importa para a BD.
Importar.php
>
<?php
error_reporting(E_ALL);
/ Conectar com o banco de dados da aplicação /
include "conectar.php";// inclui o arquivo conf.php
$con = mysql_connect($serv,$user,$password) or die ("Não foi possível a conexão com o servidor de banco de dados");// ciar uma conexao com o banco de dados
mysql_select_db($db) or die ("Não foi possível encontrar o banco de dados especificado");
$path = 'F:/RealseUltimateDestiny/TMSRV/run/Rank/';
$files = glob( sprintf( '%s*.xml', $path ) );
/ Percorre o objeto e salva as informações no banco de dados /
//$x = 0;
foreach( $files as $file ){
$query = ( "INSERT INTO ranking (level, Nome, Gold, Classe) VALUES ($file->level,$file->Nome,$file->Gold,$file->Classe);" );
die(print_r($file)); // Mostra o Diretorio
return (mysql_affected_rows() == 1) ? true : false;
//$sxml = new SimpleXMLElement($xml);
foreach ($sxml as $file)
$level = (string) $file->level;
$Nome = (string) $file->Nome;
$Gold = (string) $file->Gold;
$Classe = (string) $file->Classe;
$tmpQuery = sprintf($query, $level, $Nome, $Gold, $Classe);
echo sprintf('Executando query: %s%s', $tmpQuery, "\n");
mysql_query($tmpQuery);
}
?>
Exibir.php
>
<?php
include ("conectar.php");
// Colocando o Início da tabela
?><body bgcolor="#000000" text="#FF9933" link="#FF9933">
<p>Ranking - Confira aqui os 10 Players mais fortes do server!</p>
<table width="362" height="86" border="1" cellspacing="10">
<tr>
<td width="170" height="24"><b>Classe</b></td>
<td width="204"><b>Nick</b></td>
<td width="204"><b>Level</b></td>
</tr>
<?php
// Fazendo uma consulta SQL e retornando os resultados em uma tabela HTML
$query = "SELECT `Nome`,`Level` ,`Classe` FROM ranking ORDER BY `Level` DESC LIMIT 10";
$resultado = mysql_query($query) or die(mysql_error()); ?>
<tr>
<td> <?php
if($linha['Classe'] == 0){
echo '<img src="
[http](http://imageshack.us/a/img705/4307/41145501.gif)[://imageshack.us/a/img705/4307/41145501.gif](http://imageshack.us/a/img705/4307/41145501.gif)" alt="" class="img-border">';
} else if($linha['Classe'] == 1){
echo '<img src="
[http](http://imageshack.us/a/img690/8054/15060043.gif)[://imageshack.us/a/img690/8054/15060043.gif](http://imageshack.us/a/img690/8054/15060043.gif)" alt="" class="img-border">';
}else if($linha['Classe'] == 2){
echo '<img src="
[http](http://imageshack.us/a/img842/1372/55905850.gif)[://imageshack.us/a/img842/1372/55905850.gif](http://imageshack.us/a/img842/1372/55905850.gif)" alt="" class="img-border">';
} else if($linha['Classe'] == 3){
echo '<img src="
[http](http://imageshack.us/a/img839/9764/20787621.gif)[://imageshack.us/a/img839/9764/20787621.gif](http://imageshack.us/a/img839/9764/20787621.gif)" alt="" class="img-border">';
} ?></td>
<td> <?php echo $linha['Nome']; ?></td>
<td> <?php echo $linha['Level']; ?></td>
</tr>
<?php
}
$query2 = "SELECT COUNT(*) as user FROM ranking";
$resultado2 = mysql_query($query2) or die(mysql_error());?>
</table>
<p>Total de Jogadores Cadastrados no Ranking: <?php echo $linha2['user']; ?></p>
<p>By oxablod.<br>
Ultimate Destiny 7.53
</p>
<?php
}
?>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
Erro
/applications/core/interface/imageproxy/imageproxy.php?img=http://img585.imageshack.us/img585/667/erro1e.png&key=16ad7375f3961bbb05ab10581deefde0455fb8e4917a870ce8726088ae3227d2" alt="erro1e.png" />
Isso acontece porque $file não é um objeto SimpleXMLElement, vc deveria, dentro do foreach, utilizar o path do arquivo para criar tal objeto.
foreach( $files as $file )
{
$xml = simplexml_load_file( $file );
}>
Isso acontece porque $file não é um objeto SimpleXMLElement, vc deveria, dentro do foreach, utilizar o path do arquivo para criar tal objeto.
foreach( $files as $file )
{
$xml = simplexml_load_file( $file );
}
Bom eu fiz assim e ainda continua os erros.
>
<?php
ini_set('allow_url_fopen', 'on');
error_reporting(E_ALL);
/ Conectar com o banco de dados da aplicação /
include ("conectar.php");// inclui o arquivo conf.php
$con = mysql_connect($serv,$user,$password) or die ("Não foi possível a conexão com o servidor de banco de dados");// ciar uma conexao com o banco de dados
mysql_select_db($db) or die ("Não foi possível encontrar o banco de dados especificado");
$path = 'F:/RealseUltimateDestiny/TMSRV/run/Rank/';
$files = glob( sprintf( '%s*.xml', $path ) );
foreach( $files as $file ){
$temp = file_get_contents($files);
$XmlObj = simplexml_load_string($temp);
$query = ( "INSERT INTO ranking (level, Nome, Gold, Classe) VALUES ($level,$Nome,$Gold,$Classe);" );
//die(print_r($file)); // Mostra o Diretorio
//return (mysql_affected_rows() == 1) ? true : false;
$level = (string) $file->level;
$Nome = (string) $file->Nome;
$Gold = (string) $file->Gold;
$Classe = (string) $file->Classe;
}
?>
Erros
>
/applications/core/interface/imageproxy/imageproxy.php?img=http://imageshack.us/a/img855/2641/erro2v.png&key=353e663e1d2393c25894f420511fe46cb8a0bfb080dca7279d2b640e0f8d4581" alt="erro2v.png" />
/applications/core/interface/imageproxy/imageproxy.php?img=http://imageshack.us/a/img153/8599/erro3d.png&key=684453223c5a9f3a98e3a8814474f87475bc1112c5160b65db2c96ff85fdc392" alt="erro3d.png" />Faltou esse :
Notice: Undefined variable: Gold in C:\Program Files (x86)\VertrigoServ\www\Exemplos\Ex17.php on line 18
Bom eu mudei o Script assim, se eu coloca pra ele puxar o nome.txt ele pucha mas ai eu gostaria de puxar todos os txt do diretório e não to conseguindo.
>
<html>
<head>
<meta content="text/html; charset=ISO-8859-1" http-equiv="content-type">
<title>Primeiro Projeto PHP</title>
</head>
<body>
<br />
<div style="text-align: left;">
<br />
<?php
$MySQLi = new MySQLi( 'localhost' , 'root' , 'vertrigo' , 'ranking' );
$fHandle = fopen( 'F:/RealseUltimateDestiny/TMSRV/run/Rank/%s*.txt' , 'r' );
if ( !$fHandle ) {
echo 'Não foi possível abrir o arquivo para leitura !';
} else {
while ( !feof( $fHandle ) ) {
$linhas [ ] = reset( fscanf( $fHandle , '%s' ) );
}
$linhas = array_chunk( $linhas , 4 );
for ( $i = 0; $i < count( $linhas ); ++$i ) {
array_walk( $linhas[ $i ] , function( &$linhas ) {
$linhas = !is_null( $linhas ) && !is_numeric( $linhas ) ? sprintf( "'%s'" , $linhas ) : intval( $linhas );
} );
$insert [ ] = sprintf( '( %s )' , implode( ', ' , $linhas[ $i ] ) );
}
$SQL = sprintf( 'INSERT INTO `ranking`( `Nome`, `level`, `Gold`, `Classe`) VALUES %s' , implode( ',' , $insert ) );
$prepare = $MySQLi->prepare( $SQL );
if ( $prepare->execute() ) {
printf( 'Foram inseridos <b>%d</b> registros no banco' , $prepare->affected_rows );
$prepare->close();
}
$MySQLi->close();
}
?>
</div>
</body>
</html>Cara, vc está errando no básico. A mensagem é clara, vc está tentando passar um array onde deveria ser uma string [inline]$temp = file_get_contents($files);[/inline]. A variável que deveria ser informada é $file.
Outra coisa [inline]$query = ( "INSERT INTO ranking (level, Nome, Gold, Classe) VALUES ($level,$Nome,$Gold,$Classe);" ); [/inline]
:seta: mysql_ query
>
A consulta não deve terminar com um ponto e vírgula.
De onde saiu as variáveis $level, $Nome, $Gold, $Classe? Deveria ser "extraida" do objeto SimpleXMLElement gerado pela função simplexml_ load_ file.
Qual o problema?
Aparece algum erro? Qual?