奇怪的PHP问题

时间:2011-02-25 22:26:45

标签: php

我有以下代码......

<?php
  session_start();
  require_once('myDB.php');
  if (isset($_POST))
  {
     foreach($GLOBALS['myDB']->getShops()as $i)
     {
       $tempLat = $i['latitude'];
       $templong  = $i['longitude'];
       $distance = distance($_POST['latitude'],$_POST['longitude'],$tempLat,$templong);
       if($distance <= 300)
       {
          echo "".$i['id']."|".$i['shopName']."|".$i['longitude']."|".$i['latitude']."|".$i['advert']."|";
       }      
     }
  }
  function distance($lat1, $lon1, $lat2, $lon2) {
  $theta = $lon1 - $lon2;
  $dist = sin(deg2rad($lat1)) * sin(deg2rad($lat2)) + cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * cos(deg2rad($theta));
  $dist = acos($dist);
  $dist = rad2deg($dist);
  $miles = $dist * 60 * 1.1515;
  return (($miles * 1.609344)*1000);
 }
?>

现在,当我看到该页面时,它给出了错误324(net :: ERR_EMPTY_RESPONSE)并且它表示网站可能暂时关闭...如果我尝试使用firefox打开页面,则会打开一个下载对话框php文件......

我想要做的是让它打印回声(如果距离实际上大于300米)或者根本不打印,但它应该仍然是一个空的html页面......

任何人都可以看到那个错误???

注意:代码在本地工作正常,但不在我的服务器上工作..所有其他页面按预期工作,因此服务器已启动并运行...

3 个答案:

答案 0 :(得分:0)

如果我正确地阅读了您的代码,那么只有当距离为&gt;时才会得到回复。 300.需要考虑的事情。

答案 1 :(得分:0)

答案是在你的IF之后放一个ELSE语句。你会看到它只是打印一个HTML骨架。

显然,你需要一个doctype声明,也许还有一条很好的消息说“没有结果”,但你明白了......

<?php
  session_start();
  require_once('myDB.php');
  if (isset($_POST))
  {
     foreach($GLOBALS['myDB']->getShops()as $i)
     {
       $tempLat = $i['latitude'];
       $templong  = $i['longitude'];
       $distance = distance($_POST['latitude'],$_POST['longitude'],$tempLat,$templong);
       if($distance <= 300)
       {
          echo "".$i['id']."|".$i['shopName']."|".$i['longitude']."|".$i['latitude']."|".$i['advert']."|";
       }      
     }
  }
else{
  print '<html><Head><title></title></Head><body></body></html>';
}
  function distance($lat1, $lon1, $lat2, $lon2) {
  $theta = $lon1 - $lon2;
  $dist = sin(deg2rad($lat1)) * sin(deg2rad($lat2)) + cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * cos(deg2rad($theta));
  $dist = acos($dist);
  $dist = rad2deg($dist);
  $miles = $dist * 60 * 1.1515;
  return (($miles * 1.609344)*1000);
 }
?>

如果您仍然收到错误,那么您的包含内容有问题(您需要发布该内容),或者您的IF中的某些内容会引发异常。

您是否有错误报告?你检查过你的网络服务器日志吗?您是否尝试在try / catch中包装可疑操作?

答案 2 :(得分:0)

在评论完并逐一取消注释每一行后,我发现问题出在哪里......

 foreach($GLOBALS['myDB']->getShops()as $i)

数据库中的查询失败,因为字段的类型设置为longtext ...

完全没有意义,但改为varchar解决了这个问题......