Apache崩溃,可能是因为这段php代码。你能看一下吗?

Apache崩溃,可能是因为这段php代码。你能看一下吗?,php,apache,codeigniter,Php,Apache,Codeigniter,我正在开发基于codeigniter的web应用程序。 我编写这个函数是为了获取任何城市或地址的时区数据 function gettimezone($address) { $_url = 'http://api.local.yahoo.com/MapsService/V1/geocode'; $_url .= sprintf('?appid=%s&location=%s',"phpclasses",rawurlencode($address));

我正在开发基于codeigniter的web应用程序。 我编写这个函数是为了获取任何城市或地址的时区数据

function gettimezone($address)
    {
       $_url = 'http://api.local.yahoo.com/MapsService/V1/geocode';
        $_url .= sprintf('?appid=%s&location=%s',"phpclasses",rawurlencode($address));
        $_result = false;
        if($_result = file_get_contents($_url)) {
            preg_match('!<Latitude>(.*)</Latitude><Longitude>(.*)</Longitude>!U', $_result, $_match);
            $lng = $_match[2];
            $lat = $_match[1]; 
            $url = "http://ws.geonames.org/timezone?lat={$lat}&lng={$lng}";
            $timedata = file_get_contents($url);
            $sxml = simplexml_load_string($timedata);
            return $sxml->timezone;
        } 
        else
            return false;
    }

除了缺少internet连接之外,如果php.ini文件中的
allow\u url\u fopen
设置为false,那么它将无法工作,因此,
file\u get\u contents
函数不会从url获取数据。

由于没有错误堆栈或错误日志,我怀疑问题的原因可能是:

 $url = "http://ws.geonames.org/timezone?lat={$lat}&lng={$lng}";
因为您正试图从另一个web服务获取一些数据,所以这可能是问题所在

我要说的是,在这一部分放一个try/catch,如下所示:

try
{
    $url = "http://ws.geonames.org/timezone?lat={$lat}&lng={$lng}";
    $timedata = file_get_contents($url);
    $sxml = simplexml_load_string($timedata);
}
catch(Exception $e)
{
    // log this exception to file
}
return $sxml->timezone;

就像你说的,它大部分时间都有效。所以现在就离开它,大约一周后,回来看看错误日志是否包含您感兴趣的内容。

否。。这是启用的。请看,这种情况真正棘手的是,此代码和应用程序几乎每次都能工作。这些崩溃只发生过几次,但我仍然需要调查,因为我无法关闭web服务器。有些东西告诉我这是一段代码,因为在我添加此功能之前,Apache从未崩溃过。@Munim:读取外部数据可能是原因,有时由于各种原因您无法获取外部数据,请为这一行设置一个检查条件,例如:
if($timedata=file\u get\u contents($url);{//进一步的代码}@Sarfaz-Oh。。我不知道为什么我错过了。希望这会有所帮助。谢谢@其他人:请查看这段代码是否还有其他错误。:是否有错误日志?我也在使用xampp,因此我怀疑错误日志可能会告诉您问题的原因。或者您真的将此web应用部署到了托管服务器?代码也已部署到服务器上。但它只是在我的开发机器上崩溃了。不过我还是很担心。将用我的错误日志的一小部分更新问题。我将添加异常处理例程以防万一。谢谢你的建议。你能看看我最新的编辑,看看日志中的错误对你是否有意义吗?@Munim:Ahhh,谷歌告诉我这是由于xampp配置不当造成的。查看参考资料。所以我想说,这可能不是由您的代码引起的问题。修复xampp环境可能会一劳永逸地解决此问题。另外,这也解释了为什么您的实际服务器从不报告任何崩溃:)@Micheal我也这样做了。但不太确定这是否是问题所在。因为这些事故非常罕见。xampp几乎每次都能正常工作。
try
{
    $url = "http://ws.geonames.org/timezone?lat={$lat}&lng={$lng}";
    $timedata = file_get_contents($url);
    $sxml = simplexml_load_string($timedata);
}
catch(Exception $e)
{
    // log this exception to file
}
return $sxml->timezone;