Ir para conteúdo

POWERED BY:

Arquivado

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

gelsonalves

&quot sujando a busca (simplexml_load_file(): I/O warning)

Recommended Posts

ERRO: Warning: simplexml_load_file(): I/O warning : failed to load external entity "http://servicos.cptec.inpe.br/XML/listaCidades?city=rio%20de%20janeiro" in c:\www\index.php on line 19

 

 

Bom dia a todos.

Este código consulta o CPTEC para informar a previsão do tempo, contudo não estou conseguindo consultar o arquivo xml do cptec, ao que parece ao gerar a URL ele inclui a sujeira "&quot" no ínicio e no final como pode ser observado acima. Alguém sabe o que pode estar ocorrendo. Segue o código até a geração da url:

 

 

$cidade_1 = 'Rio de Janeiro';
$uf = 'RJ';

if(isset($_POST['pesq']) && $_POST['pesq'] == 'ok'){

function slug($string){
$a = 'ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜüÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûýýþÿŔŕ"!@#$%&*()_-+={[}]/?;:.,\\\'<>';
$b = 'aaaaaaaceeeeiiiidnoooooouuuuuybsaaaaaaaceeeeiiiidnoooooouuuyybyRr ';
$string = utf8_decode($string);
$string = strtr($string, utf8_decode($a), $ B);
$string = strip_tags(trim($string));
$string = str_replace(" ","%20",$string);
return strtolower(utf8_encode($string));
}

$cidade = slug($cidade_1);

$xml = simplexml_load_file('http://servicos.cptec.inpe.br/XML/listaCidades?city='.$cidade.'') ;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo, "&quot" são as aspas duplas, se o código for exatamente como esse que você colou aqui, então está com problemas com suas aspas ai na última linha.

E outra coisa, você abriu 2 chaves e só fechou 1.

Compartilhar este post


Link para o post
Compartilhar em outros sites

A chave é fechada logo em baixo, este é apenas um trecho do código, porém já estou achando que há outro problema dele não estar conseguindo carregar o xml... não sei o que é,

Compartilhar este post


Link para o post
Compartilhar em outros sites

O problema é que, não está conseguindo ler o arquivo externo.

Para permitir o tratamento de URL's (como http:// ou ftp://) como arquivos, habilite no php.ini [inline]allow_url_fopen = On[/inline]

Outra forma é utilizando cURL com DOMDocument

$url = 'http://servicos.cptec.inpe.br/XML/listaCidades?city=rio de janeiro"';
 
$ch = curl_init( $url );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
$xml = curl_exec( $ch );
curl_close( $ch );
 
$DOMDocument = new DOMDocument( '1.0', 'UTF-8' );
$DOMDocument->preserveWhiteSpace = false;
$DOMDocument->loadXML( $xml );
 
$cities = $DOMDocument->getElementsByTagName( 'cidade' );
 
foreach( $cities as $city )
{
    foreach( $city->childNodes as $childNode )
    {
        printf( '<strong>%s:</strong> %s<br/>', $childNode->nodeName, $childNode->nodeValue );
    }
}


Saída

nome: Rio de Janeiro
uf: RJ
id: 241

Compartilhar este post


Link para o post
Compartilhar em outros sites

Peguei o seu exemplo e testei aqui, deu o seguinte erro:

 

Warning: DOMDocument::loadXML(): Empty string supplied as input in C:\wamp\www\index.php on line 11

 

a linha 11 é o:

 

$DOMDocument->loadXML($xml);

 

 

O curl está ligado e para minha surpresa o allow_url_fopen já estava = on

Compartilhar este post


Link para o post
Compartilhar em outros sites
Só para confirmar...


Você habilitou cURL removendo o ponto-e-virgula ( ; ) deixando assim [inline]extension=php_curl.dll[/inline]


E o fopen assim [inline]allow_url_fopen = On[/inline]


Logo após, reiniciou o servidor.


Foi isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estranho <_<

 

Vamos fazer uma verificação

 

var_dump( 
    extension_loaded( 'curl' ), // boolean true 
    ini_get( 'allow_url_fopen' ) // string '1' (length=1)
);

Se a extensão cURL estiver realmente habilitada, deverá retornar true.

Se o valor de configuração de allow_url_fopen for on será retornado como "1"

 

 

Também coloque esse código na primeira linha do script para habilitar todas as mensagens de erro

ini_set( 'display_errors', true );

error_reporting( E_ALL | E_STRICT );

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie um novo arquivo e execute este script, poste o que vai retornar disso

ini_set( 'display_errors', true );
error_reporting( E_ALL | E_STRICT );

$url = 'http://servicos.cptec.inpe.br/XML/listaCidades?city=rio de janeiro"';   
$ch = curl_init( $url ); 
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true ); 
$xml = curl_exec( $ch ); 
curl_close( $ch );

$DOMDocument = new DOMDocument( '1.0', 'UTF-8' );

var_dump( $xml );
var_dump( $DOMDocument->load( $url ) );
var_dump( simplexml_load_file( $url ) );
var_dump( file_get_contents( $url ) );



Qual a versão do PHP do seu servidor?

Compartilhar este post


Link para o post
Compartilhar em outros sites

boolean false

 

 

( ! ) Warning: DOMDocument::load(http://servicos.cptec.inpe.br/XML/listaCidades?city=rio%20de%20janeiro&quot;): in C:\wamp\www\index.php on line 15 Call Stack # Time Memory Function Location 1 0.0010 142632 {main}( ) ..\index.php:0 2 21.9834 143752 load ( ) ..\index.php:15

 

 

( ! ) Warning: DOMDocument::load(): I/O warning : failed to load external entity "http://servicos.cptec.inpe.br/XML/listaCidades?city=rio%20de%20janeiro&quot;" in C:\wamp\www\index.php on line 15 Call Stack # Time Memory Function Location 1 0.0010 142632 {main}( ) ..\index.php:0 2 21.9834 143752 load ( ) ..\index.php:15

 

 

( ! ) Fatal error: Maximum execution time of 30 seconds exceeded in C:\wamp\www\index.php on line 15 Call Stack # Time Memory Function Location 1 0.0010 142632 {main}( ) ..\index.php:0

 

 

PHP 5.4

Utilizo o Wamp server última versão: 2.4

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esqueci de perguntar se vc já tentou remover " do final da url

$url = 'http://servicos.cptec.inpe.br/XML/listaCidades?city=osorio';

Já não sei mais o que pode ser, se não são as configurações que já foram habilitadas e também a url com o destino correto. Nunca tinha me ocorrido algo assim. Já testei em dois servidores Windows e um Linux, todos funcionaram corretamente logo após habilitar cURL e allow_url_fopen.

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.