2009-07-24 5 views
0

내 소셜 네트워크 용 PHP 코드를 작성 중입니다. 사용자 가입 또는 프로필 업데이트시에 수행 할 작업은 입니다. yip 코드를 입력하고 검색을 위해 yahoo를 사용합니다. 거기에 위도와 경도 zipcode 나는 그곳에 사용자의 mysql 테이블에이 값을 저장합니다.이 값은 나중에 X 값 안에있는 사용자를 찾는데 사용됩니다. yahoo 서비스에 대한 PHP 및 XML에 대한 도움말

다음은 DB

<?PHP 
function yahoo_geo($location) { 
    $q = 'http://api.local.yahoo.com/MapsService/V1/geocode'; 
    q .= '?appid=rlerdorf&location='.rawurlencode($location); 
    echo $q; 
    libxml_use_internal_errors(true); 
    $xml = simplexml_load_file($q); 
    if(!is_object($xml)) return false; 
    $ret['precision'] = (string)$xml->Result['precision']; 
    foreach($xml->Result->children() as $key=>$val) { 
     if(strlen($val)){ 
      $ret[(string)$key] = (string)$val; 
     } 
    return $ret; 
} 

$_REQUEST['location'] = 32744; // my zip code 
$a = yahoo_geo($_REQUEST['location']); 

// set retunred data to some variables for storage into MySQL 
$latitude = $a[Latitude]; 
$longitude = $a[Longitude]; 

    // MySQL code will go here 

// Output for demo 
echo 'Lattitude' .$latitude. '<BR><BR>'; 
echo 'Longitude' .$longitude. '<BR><BR>'; 
?> 

이 긴 경우를 제외하고 좋은 작품에 저장하기 전에이 정보를 얻기 위해 지금까지 내 코드입니다. 및 위도. 찾을 수없는 경우 브라우저에 오류를 반환합니다.

Warning: simplexml_load_file(http://api.local.yahoo.com/MapsService/V1/geocode?appid=rlerdorf&location=some non zipcode) [function.simplexml-load-file]: failed to open stream: HTTP request failed! HTTP/1.1 400 Bad Request in C:\webserver\htdocs\test\geolocation\index.php on line 16 

참고 : 나는 zipcode가 숫자로만되어 있는지 확인 할 수 있지만 야후는 ​​다른 필드에서도 검색을 할 수 있으므로 오히려하지 않을 것입니다. 사용자가 우편 번호를 입력하지 않으면 도시 나 주나 심지어는 국가를 더 나쁘게 사용할 것입니다. 모든 사용자가 경도와 위도를 알아야합니다. 저장된

오류를 피하는 좋은 방법이 있습니까 아니면 거기에 오류가 ID를 감지하는 방법이며 거기에 오류가 발생하면 해당 사용자에 대한 기본값을 삽입 할 수 있습니까?

답변

1

정확하게 확실하지 무엇을 당신의 질문은,하지만 난 당신이 다음 정상으로 false를 반환합니다 error control operator @

xml = @simplexml_load_file($q); 

함수를 찾고 생각합니다. 당신은 (일부 인용 부호를 추가합니다) 나중에 생각 확인해야 다음 @ 운영자와

if (!$a) 
{ 
    // Do something 
} 
else 
{ 
    $latitude = $a['Latitude']; 
    $longitude = $a['Longitude']; 
} 
+0

아마도 작동 할 것입니다. 내가하려는 것은 최종 사용자에게 표시되는 추악한 오류를 피하는 것입니다. – JasonDavis

1

:

  • 당신이 그것을 사용해야 할 때마다 당신이 필요로하는 것이
  • 디버깅 할 , 어디에서나 제거해야합니다 (또는 scream 확장자를 사용해야합니다. 호스팅 서비스에 따라 항상 설치할 수있는 것은 아닙니다)
  • 어딘가에 넣지 않은 오류가있는 경우 @ , 여전히 사용자에게 표시됩니다.

    ini_set('display_errors', 'Off'); 
    

    그 방법, 에러가 이제까지 최종 사용자에게 표시됩니다 :

또 다른 해결책은 프로덕션 서버에있는 경우, 스크립트의 시작 부분에 이런 식으로 뭔가를 사용하는 것 (그들은 그것들을 볼 필요가없고 아마도 이해할 수 없을 것입니다), 심지어 생각하지 않은 상황에서도; 개발 컴퓨터에 표시되는 모든 오류를 쉽게 얻을 수 있습니다 .- 온라인으로 주석 달기 ;-)

참고 : 프로덕션 환경에서 원하는대로 구성 할 수 있으면 오류를 기록 할 수 있습니다. 파일; 그 방법으로, 당신은 그것들을 검사 할 수 있고 그것들을 표시 할 수 없습니다.

+0

감사합니다. – JasonDavis

+0

당신을 환영합니다 :-) –