file_get_contents()找到为什么不工作

时间:2014-03-10 20:43:52

标签: php file-get-contents

<?

$ip = '95.79.1.36'; //russian ip for test
$str = 'http://ipgeobase.ru:7020/geo?ip='.$ip;
$content = file_get_contents($str);
preg_match_all('#<country>(.*)(</country>)#Usi', $content, $matches); 
$country = $matches[0][0];
preg_match_all('#<city>(.*)(</city>)#Usi', $content, $matches); 
$city = $matches[0][0];
if($country == 'RU'){
echo 'City: '.$city.'';
}else{
echo 'Country: '.$country.'';
}

?>

问题是 $ country =='RU',不行,我的问题是为什么?

谢谢)))

2 个答案:

答案 0 :(得分:3)

您的服务器可能不是allow_url_fopen(php.ini指令)。无论如何,您正在为这个特定案例寻找的技术是cURL:https://php.net/curl

我很高兴能够专门提供有关您的代码的更多解释,甚至在您正确编辑问题后提供cURL代码示例,并提供更多信息和尝试。

答案 1 :(得分:3)

您可能不应该使用Regex解析HTML / XHTML / XML。请参阅:RegEx match open tags except XHTML self-contained tags

我建议使用PHP的SimpleXML解析器。以下对我有用:

<?php
$ip = '95.79.1.36'; //russian ip for test
$str = 'http://ipgeobase.ru:7020/geo?ip='.$ip;

$results = simplexml_load_file($str);
$country = $results->ip->country;
$city = $results->ip->city;

if($country == 'RU'){
echo 'City: '.$city.'';
}else{
echo 'Country: '.$country.'';
}

?>