Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Bem, eu estou codando um sistema para pegar dados de uma página, trata-los e expor em uma função ajax.
O seguinte código:
<?php define('verifica_acesso', TRUE); ?>
<?php include 'config.php'; ?>
<?php
function getNowPlaying($servidor,$porta)
{
$open = fsockopen($servidor,$porta,$errno,$errstr,'.5');
if ($open) {
fputs($open,"GET /7.html HTTP/1.0\nUser-Agent:Mozilla/5.0\n\n");
stream_set_timeout($open,'1');
$read = fread($open,200);
$text = explode(",",$read);
$text2 = $text [6];
$text3 = explode("<", $text2);
if($text[6] == '' || $text[6] == '</body></html>'){ $msg = ' live stream '; } else { $msg = $text3[0]; }
$text = $msg;
} else { return false; }
fclose($open);
return $text;
}
$current_song = getNowPlaying($servidor,$porta);
echo $current_song;
?>
baseado em fsockopen() funciona muito bem no meu servidor local mostrando em texto puro a música que está sendo executada na rádio. Mas ao ser enviado para o servidor da Hostnet (http://felonydesign.com.br/html5/sc_now_playing_fsockopen.php) ele gera:
Warning: fsockopen() [function.fsockopen]: unable to connect to 69.64.56.138:7788 (Connection refused) in /home/felonydesign/www/html5/sc_now_playing_fsockopen.php on line 6
Eu já conectei ao servidor por telnet na porta e ela conecta. Acessar pelo navegador também gera a página (http://69.64.56.138:7788/7.html) corretamente.
A porta responde normalmente quando o script está em meu computador, mas na hostnet não (e em nenhum outro host que testei).
Quanto ao script cURL, que funciona no meu pc, ao ser enviado para o host (http://felonydesign.com.br/html5/sc_now_playing_curl.php) ele simplesmente me dá uma tela branca:
<?php define('verifica_acesso', TRUE); ?>
<?php include 'config.php'; ?>
<?php
header ("User Agent: Mozilla/5.0");
function get_url_contents($url){
$crl = curl_init();
$timeout = 5;
curl_setopt ($crl, CURLOPT_URL,$url);
curl_setopt ($crl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($crl, CURLOPT_CONNECTTIMEOUT, $timeout);
curl_setopt ($crl, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.9) Gecko/20071025 Firefox/2.0.0.9');
$ret = curl_exec($crl);
curl_close($crl);
$text = explode(",",$ret);
$text2 = $text [6];
$text3 = explode("<", $text2);
$text4 = $text3[0];
$ret = $text4;
return $ret;
}
$tocando = get_url_contents($servidor.":".$porta."/7.html");
echo $tocando;
?>
Eu ainda não compreendi o problema. Alguém pode me dar uma luz?
PHPINFO do servidor da Hostnet: http://felonydesign.com.br/html5/server_info.php
Agora que eu usei o error_reporting( E_ALL | E_STRICT ); recebi o erro:
Notice: Undefined offset: 6 in /home/felonydesign/www/html5/sc_now_playing_curl.php on line 15
Fiquei sem entender se o cURL não recebeu o conteúdo da página e por isso não escreveu na variável ou se simplesmente passou por cima do código e não teve o que expor. No desktop funciona normalmente. Alguma idéia?
Quando adicionei curl_setopt ($crl, CURLOPT_FOLLOWLOCATION, true); para garantir que se houvesse um redirecionamento por conta do IP ou qualquer outra coisa, recebi o erro:
Warning: curl_setopt() [function.curl-setopt]: CURLOPT_FOLLOWLOCATION cannot be activated when safe_mode is enabled or an open_basedir is set in /home/felonydesign/www/html5/sc_now_playing_curl.php on line 11
Notice: Undefined offset: 6 in /home/felonydesign/www/html5/sc_now_playing_curl.php on line 16
Acho que de alguma forma, o open_basedir está impedindo o cURL e o fsockopen de obter a página do servidor remoto. Alguém concorda ou vê outro motivo?
Carregando comentários...