Jump to content


Photo

File_get_contents Alternativa


  • Faça o login para participar
19 replies to this topic

#1 guilhermevs

guilhermevs

    Turista

  • Usuários
  • 53 posts
  • Sexo:Masculino
  • Localidade:SP

Posted 23/04/2007, 00:31

Bom, tinha meu site cadastrado em um servidor que aceitava a funçao file_get_contents. Porém migrei meu site para outro servidor, e nesse servidor, a fuinção esta disabilitada.
O próprio servidor me indicou usar cURL através de uma função pronta. Mas a verdade é que não funcionou do jeito novo e não sei mexer com cURL.
Alguém poderia me ajudar?

maneira antiga:
$site = 'www.abc.com';
$file = file_get_contents($site);

nova maneira que não ta funcionando:
$site = 'www.abc.com';
	$ch = curl_init();
	$timeout = 0; // set to zero for no timeout
	curl_setopt ($ch, CURLOPT_URL, $site);
	curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
	ob_start();
	curl_exec($ch);
	curl_close($ch);
	$file = ob_get_contents();
	ob_end_clean();

tentei também dessa maneira e nada:
$ch = curl_init();
$timeout = 5; // set to zero for no timeout
curl_setopt ($ch, CURLOPT_URL, 'http://example.com');
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$file = curl_exec($ch);
curl_close($ch);

Por favor, preciso realmente de ajuda!
Valeu

Edição feita por: guilhermevs, 24/04/2007, 00:37.

Ainda to aprendendo...

http://www.caronasunicamp.com

#2 Paulo Freitas

Paulo Freitas

    ××××××× LRU #456504 ××××××× ××××××× LRM #364686 ×××××××

  • Ex-Admins
  • 5612 posts
  • Sexo:Masculino
  • Localidade:Campinas - SP

Posted 23/04/2007, 02:14

E não indico CURL para esta finalidade, pois funções mais simples dão muito bem do recado. Inclusive, para qualquer função que seu servidor não suporte ou tenha bloqueado, lhe recomendo a utilizar a biblioteca PEAR PHP_Compat, que provê uma série de funções alternativas. Para utilizar qualquer função basta dar um include no arquivo da mesma e chamar a função normalmente. E claro, esta função consta nesta biblioteca, que por sinal utiliza funções de socket para realizar a mesma proeza. ;)

[]’s :DAté mais

#3 Evitark

Evitark

    Normal

  • Usuários
  • 67 posts
  • Sexo:Masculino

Posted 23/04/2007, 07:07

Por acaso está usando o DreamHost? :)

De qualquer forma, fiz uma função para isso pois eu tive o mesmo problema.

function curl_file($url, $timeout=0) {
	$ch = curl_init();
	curl_setopt ($ch, CURLOPT_URL, $url);
	curl_setopt ($ch, CURLOPT_HEADER, 1);
	curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
	curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
	$conteudo = curl_exec($ch);
	curl_close($ch);
	//$arquivo = explode("\n", $conteudo);
  
	return $conteudo;
  }

Não sei se servirá para o que você está fazendo, mas serviu perfeitamente para o que eu precisava ;)

A linha comentada é só para mostrar como era para deixar caso você quisesse que a função funcionasse igual a file(), que retorna o conteudo do arquivo em uma array.
Mas como você citou file_get_contents, que retorna o conteúdo em uma string, não precisa do explode ;)

Por favor, avise se funcionar. :)

#4 guilhermevs

guilhermevs

    Turista

  • Usuários
  • 53 posts
  • Sexo:Masculino
  • Localidade:SP

Posted 23/04/2007, 12:21

OI paulo ricardo, eu tentei usar do jeito que você falou, mas fica dando esse erro:
Warning: main(file_get_contents.php) [function.main]: failed to open stream: No such file or directory in /home/........ on line 4
Warning: main() [function.include]: Failed opening 'file_get_contents.php' for inclusion (include_path='.:/usr/local/lib/php') in /home/.....php on line 4
Warning: file_get_contents() [function.file-get-contents]: URL file-access is disabled in the server configuration in /home/.......php on line 17
Warning: file_get_contents(http://www......) [function.file-get-contents]: failed to open stream: no suitable wrapper could be found in /home/.......php on line 17

Você sabe o que pode ser?

Evitark, també tentei do seu jeito e não funcionou. Não deu erro não, mas também não mostrou o esperado.

Valeu pela ajuda até agora, mas ainda não consegui o que queria!

Edição feita por: guilhermevs, 23/04/2007, 12:22.

Ainda to aprendendo...

http://www.caronasunicamp.com

#5 Paulo Freitas

Paulo Freitas

    ××××××× LRU #456504 ××××××× ××××××× LRM #364686 ×××××××

  • Ex-Admins
  • 5612 posts
  • Sexo:Masculino
  • Localidade:Campinas - SP

Posted 23/04/2007, 12:35

OI paulo ricardo, eu tentei usar do jeito que você falou, mas fica dando esse erro:
Warning: main(file_get_contents.php) [function.main]: failed to open stream: No such file or directory in /home/........ on line 4
Warning: main() [function.include]: Failed opening 'file_get_contents.php' for inclusion (include_path='.:/usr/local/lib/php') in /home/.....php on line 4
Warning: file_get_contents() [function.file-get-contents]: URL file-access is disabled in the server configuration in /home/.......php on line 17
Warning: file_get_contents(http://www......) [function.file-get-contents]: failed to open stream: no suitable wrapper could be found in /home/.......php on line 17

Você sabe o que pode ser?

Arquivo não encontrado. Você precisa indicar o local correto de onde os arquivos de funções se encontram. Dê uma conferida aí pois o PHP não está encontrando. ;)

[]’s :DAté mais

#6 guilhermevs

guilhermevs

    Turista

  • Usuários
  • 53 posts
  • Sexo:Masculino
  • Localidade:SP

Posted 23/04/2007, 13:09

Agora deu Warning: file_get_contents() [function.file-get-contents]: URL file-access is disabled in the server configuration in /home/......php on line 9

Acho que vai ter que ser por cURL. Mas eu não manjo muito. Ou tem outra maneira ainda?
Valeu, espero ajuda :D
Ainda to aprendendo...

http://www.caronasunicamp.com

#7 sk15

sk15

    Super Veterano

  • Usuários
  • 2071 posts
  • Sexo:Masculino
  • Localidade:SP - SP

Posted 23/04/2007, 13:22

Bem se desejar pode tentar com "fopen" ou tbm "fsockopen"

<?php
// Cód. retirada do proprio manual do PHP
$handle = fopen ("http://forum.wmonline.com.br/", "rb");
$xhtml  = "";
do {
 $data = fread($handle, 8192);
 if (strlen($data) == 0) { break;}
 $xhtml .= $data;
} while(true);
fclose($handle);

echo $xhtml;
?>
http://www.php.net/m...ction.fopen.php
http://www.php.net/m...ction.fread.php

Ou usar as função de Socket
<?php
// Cód. retirada do proprio manual do PHP
$fp = fsockopen("forum.wmonline.com.br", 80, $errno, $errstr, 30);
if (!$fp) {
 echo "$errstr ($errno)<br />\n";
} else {
 $out = "GET / HTTP/1.1\r\n";
 $out .= "Host: forum.wmonline.com.br\r\n";
 $out .= "Connection: Close\r\n\r\n";
 fwrite($fp, $out);
 while (!feof($fp)) {
  echo fgets($fp, 128);
 }
 fclose($fp);
}
?>

http://www.php.net/m...n.fsockopen.php

... Ou tem outra maneira ainda? ...


Edição feita por: sk15, 23/04/2007, 13:23.


#8 guilhermevs

guilhermevs

    Turista

  • Usuários
  • 53 posts
  • Sexo:Masculino
  • Localidade:SP

Posted 23/04/2007, 18:41

fopen -> Warning: fopen() [function.fopen]: URL file-access is disabled in the server configuration

fsockopen -> Warning: fsockopen() [function.fsockopen]: php_network_getaddresses: getaddrinfo failed: Name or service not known

poxa será que não vai funcionar?
vou colocar aqui meu código completo.
$vet = array("SaoPaulo-SP","Campinas-SP");
$num = count($vet);
for($i=0; $i<$num; $i++) {
	$url = "http://www.tempoagora.com.br/previsao.htm/brasil/" . $vet[$i];
	$file = file_get_contents($url);
	$array1 = explode("<div class=\"s02\">", $file);
	$array2 = explode("<br />", $array1[1]);
	$t1 = array(" "," ");
	$t2 = array("","ã");
	$city = str_replace($t1, $t2, $array2[0]);
	echo "<div class=\"dados\" style=\"margin-left: 10px\">" . $city . "</div>";
	$t1 = array("<div align=\"right\">"," ","</div>");
	$t2 = array("","","");
	$atual = str_replace($t1, $t2, $array2[2]);
	$data = substr($atual, -12, -7);
	$hora1 = substr($atual, -26, -21);
	$hora = str_replace("h", ":", $hora1);
	echo "<div class=\"temp\"> [" . $data . " " . $hora . "]</div>";
	$array3 = explode("<div id=\"Layer1\">", $array2[1]);
	$array2 = explode("</div>", $array3[1]);
	$foto1 = $array2[0];
	$aux = explode("<div id=\"Layer2\">", $array2[1]);
	$exp1 = substr($aux[1], 0, 1);
	$exp2 = substr($aux[1], 1);
	$exp1 = strtoupper($exp1);
	echo "<div class=\"temp\">" . $foto1 . /*"<div class=\"dados\">" . */$exp1 . $exp2 . "</div>";
	$t1 = array("<div id=\"boxtemp\">","<div id=\"boxprec\">","<div id=\"boxsens\">"," "," ","<br />","");
	$t2 = array("","","","","","","°");
	$temp = str_replace($t1, $t2, $array2[2]);
	echo "<div class=\"temp\"><img src=\"temp.gif\"> Temperatura: " . $temp . "</div>";
	$umidade = str_replace($t1, $t2, $array2[4]);
	echo "<div class=\"temp\"><img src=\"umid.gif\"> Umidade: " . $umidade . "</div>";
	$sensacao = str_replace($t1, $t2, $array2[5]);
	echo "<div class=\"temp\"><img src=\"sens.gif\"> Sensação Térmica: " . $sensacao . "</div><br>";
}
?>

Alguém me ajuda? Valeu!
Ainda to aprendendo...

http://www.caronasunicamp.com

#9 Evitark

Evitark

    Normal

  • Usuários
  • 67 posts
  • Sexo:Masculino

Posted 23/04/2007, 19:09

O que aconteceu com o código que eu lhe passei?
Eu uso ele para pegar o conteúdo de um arquivo externo, e ele funciona perfeitamente.
Tente usar novamente e verifique se o endereço está correto...

#10 guilhermevs

guilhermevs

    Turista

  • Usuários
  • 53 posts
  • Sexo:Masculino
  • Localidade:SP

Posted 23/04/2007, 19:19

$vet = array("SaoPaulo-SP","Campinas-SP");
$num = count($vet);
for($i=0; $i<$num; $i++) {
	$url = "http://www.tempoagora.com.br/previsao.htm/brasil/" . $vet[$i];
	$ch = curl_init();
	curl_setopt ($ch, CURLOPT_URL, $url);
	curl_setopt ($ch, CURLOPT_HEADER, 1);
	curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
	curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, 0);
	$file = curl_exec($ch);
	curl_close($ch);
	$array1 = explode("<div class=\"s02\">", $file);
	$array2 = explode("<br />", $array1[1]);
	$t1 = array("&nbsp;"," ");
	$t2 = array("","&atilde;");
	$city = str_replace($t1, $t2, $array2[0]);
	echo "<div class=\"dados\" style=\"margin-left: 10px\">" . $city . "</div>";
	$t1 = array("<div align=\"right\">","&nbsp;","</div>");
	$t2 = array("","","");
	$atual = str_replace($t1, $t2, $array2[2]);
	$data = substr($atual, -12, -7);
	$hora1 = substr($atual, -26, -21);
	$hora = str_replace("h", ":", $hora1);
	echo "<div class=\"temp\"> [" . $data . " " . $hora . "]</div>";
	$array3 = explode("<div id=\"Layer1\">", $array2[1]);
	$array2 = explode("</div>", $array3[1]);
	$foto1 = $array2[0];
	$aux = explode("<div id=\"Layer2\">", $array2[1]);
	$exp1 = substr($aux[1], 0, 1);
	$exp2 = substr($aux[1], 1);
	$exp1 = strtoupper($exp1);
	echo "<div class=\"temp\">" . $foto1 . /*"<div class=\"dados\">" . */$exp1 . $exp2 . "</div>";
	$t1 = array("<div id=\"boxtemp\">","<div id=\"boxprec\">","<div id=\"boxsens\">"," ","&nbsp;","<br />","");
	$t2 = array("","","","","","","&deg;");
	$temp = str_replace($t1, $t2, $array2[2]);
	echo "<div class=\"temp\"><img src=\"temp.gif\"> Temperatura: " . $temp . "</div>";
	$umidade = str_replace($t1, $t2, $array2[4]);
	echo "<div class=\"temp\"><img src=\"umid.gif\"> Umidade: " . $umidade . "</div>";
	$sensacao = str_replace($t1, $t2, $array2[5]);
	echo "<div class=\"temp\"><img src=\"sens.gif\"> Sensa&ccedil;&atilde;o T&eacute;rmica: " . $sensacao . "</div><br>";
}


O que apareceu na tela:
<div class="dados" style="margin-left: 10px"></div><div class="temp"> [ ]</div><div class="temp"></div><div class="temp"><img src="temp.gif"> Temperatura: </div><div class="temp"><img src="umid.gif"> Umidade: </div><div class="temp"><img src="sens.gif"> Sensa&ccedil;&atilde;o T&eacute;rmica: </div><br><div class="dados" style="margin-left: 10px"></div><div class="temp"> [ ]</div><div class="temp"></div><div class="temp"><img src="temp.gif"> Temperatura: </div><div class="temp"><img src="umid.gif"> Umidade: </div><div class="temp"><img src="sens.gif"> Sensa&ccedil;&atilde;o T&eacute;rmica: </div><br>

Ou seja, nenhuma informação.
O que pode ser?
Ainda to aprendendo...

http://www.caronasunicamp.com

#11 Bruno Augusto

Bruno Augusto

    ∙•● Restarting... ●•∙

  • Usuários
  • 1968 posts
  • Sexo:Não informado
  • Localidade:Itajubá

Posted 23/04/2007, 20:59

Com a do fopen, no php.ini [b]allow_url_fopen[/url] tem de estar como On (ou é TRUE, não lembro).

[]'s

#12 guilhermevs

guilhermevs

    Turista

  • Usuários
  • 53 posts
  • Sexo:Masculino
  • Localidade:SP

Posted 24/04/2007, 00:10

Evitark, eu fiz o uso certo da função que você passou? Por que eu peguei esse código e coloquei num outro server gratuito que funciona file_get_contents, e o seu código não funcionou. Muito estranho.
Ainda to aprendendo...

http://www.caronasunicamp.com

#13 Evitark

Evitark

    Normal

  • Usuários
  • 67 posts
  • Sexo:Masculino

Posted 24/04/2007, 00:23

Você já tentou dar um echo $file antes de passar por todo o código?

A URL que você estava colocando, "http://www.tempoagor...ao.htm/brasil/", redireciona para outro lugar, "http://tempoagora.uo...o.htm/brasil/". Portanto tudo que o script estava pegando era aquela página "padrão" dizendo que o documento foi movido para outro lugar ;)

Testei aqui, e se você colocar o endereço como "http://tempoagora.uo...ao.htm/brasil/", o script funciona legal! :)

Se quiser entender melhor, acesse esses 2 endereços para ver a diferença:

URL nova
URL antiga

Espero ter ajudado ;)

#14 guilhermevs

guilhermevs

    Turista

  • Usuários
  • 53 posts
  • Sexo:Masculino
  • Localidade:SP

Posted 24/04/2007, 00:36

Nossa cara funcionou! Valeu mesmo.
Estranho que com file_get_contents, ele funcionava com o link velho. Mas do seu jeito funcionou com o link novo!

Valeu Evitark, Bruno Augusto, sk15 e Paulo Ricardo pela ajuda (y)

Pra quem tem o mesmo problema que eu, de o servidor não deixar usar file_get_contents, eu consegui arrumar usando a função do Evitark.

function curl_file($url, $timeout=0) {
	$ch = curl_init();
	curl_setopt ($ch, CURLOPT_URL, $url);
	curl_setopt ($ch, CURLOPT_HEADER, 1);
	curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
	curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
	$conteudo = curl_exec($ch);
	curl_close($ch);
	//$arquivo = explode("\n", $conteudo);
  
	return $conteudo;
  }

Abraços
Ainda to aprendendo...

http://www.caronasunicamp.com

#15 Paulo Freitas

Paulo Freitas

    ××××××× LRU #456504 ××××××× ××××××× LRM #364686 ×××××××

  • Ex-Admins
  • 5612 posts
  • Sexo:Masculino
  • Localidade:Campinas - SP

Posted 24/04/2007, 01:41

Pra quem tem o mesmo problema que eu, de o servidor não deixar usar file_get_contents, eu consegui arrumar usando a função do Evitark.

Sinceramente, eu trocaria é de servidor! Se você paga pelo serviço, é um direito seu de exigir pelas funcionalidades padrões de uma linguagem. Se dão a desculpa "por motivos de segurança e blá blá blá" pode crer que é conversa fiada de serviço amador, isto não existe. Ou é um servidor seguro controlado por um pessoal competente ou é o inverso disso, saca o que eu digo? :assobio:

Fica aí a opção... :notme:

[]’s :DAté mais




1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq