2013-07-17 11 views
1

감사합니다. 기본적으로 PHP 웹 페이지가 있습니다. 사용자가 도시 이름을 (코드로) 선택한 다음 스크립트로 보내면 데이터베이스에있는 도시를 찾고 XML 파일을 가져옵니다.이 XML 파일에는 현재 웹 사이트가 들어 있습니다 날씨를 표시 한 다음 표시합니다. 사용자가 존재하지 않는 코드를 선택하는 경우를 제외하고 모두 정상적으로 작동합니다. 그 다음에 무슨 일이 내가 메시지를 얻을 수 있습니다 :XML 구문 분석기 오류 처리

Warning: SimpleXMLElement::__construct() [simplexmlelement.--construct]: Entity: line 1: parser error : Start tag expected, '<' not found in ... 

그게 가장 큰 문제는 모든로드를 중지 것을, 그래서뿐만 아니라 사용자는이 참조 않습니다뿐만 아니라, HTML을 포함하여 페이지의 나머지 부분과 모든 것이로드되지 않습니다.

내가 원하는 것은 파일에 잘못된 구조가있는 경우 "오류, 도시를 찾을 수 없음"과 같은 일부 메시지를 반향하고 나머지 스크립트는 건너 뛰고, 그러나 나머지 웹 페이지, HTML 등을로드합니다.

인터넷에서 일부 솔루션을 찾았지만 성공적으로 구현할 수 없었습니다.

실제 XML을로드하는 코드는 다음과 같습니다

http://api.openweathermap.org/data/2.5/weather?id=123456

경우 : 경우 도시가 발견되지

public function __construct($query, $units = 'imperial', $lang = 'en', $appid = ''){ 

$xml = new SimpleXMLElement(OpenWeatherMap::getRawData($query, $units, $lang, $appid, 'xml')); 

$this->city = new _City($xml->city['id'], 
$xml->city['name'], 
$xml->city->coord['lon'], 
$xml->city->coord['lat'], 
$xml->city->country); 

etc. 

대신 XML의 프로그램이 도착 발견되면, 다음과 같이됩니다 :

http://api.openweathermap.org/data/2.5/weather?q=London&mode=xml

답변

0

당신이 시도 할 수 있습니다 : http://php.net/manual/en/language.exceptions.php

가 BTW 사용자에 오류를 던지고 방지하기 위해, 그것은 오류가 아파치 서버 로그 또는 별도의 파일로 기록되지만 사용자에게 표시되지 않도록 이러한 PHP 옵션 중 일부를 설정하는 것이 좋다. http://php.net/manual/en/errorfunc.configuration.php

갱신 :이보기의 보안 관점에서도 좋다 나는 오류 로깅 옵션을 설정 a nice guide를 참조하십시오.

0

SimpleXMLElement의 문서에 따르면 파일을 구문 분석 할 수없는 경우 생성자가 예외를 throw합니다.

무엇 일
try { 
    $xml = new SimpleXMLElement(...); 
    // The xml loaded, so display the proper information. 
} catch (Exception $e) { 
    // If it gets here, the xml could not load, so print your 'city not found' message and continue loading the page. 
} 

, 그것은 새로운 SimpleXMLElement 개체를 생성하려고 시도하지만, 생성자 것 '던져'오류 : 나는 시도 - 캐치에 포장하려고합니다. 일반적으로 던지기는 모든 것을 멈추게 할 것입니다. 그러나 당신이 그것을 잡으므로, 당신은 분명히 말하고 있습니다. "이봐, 문제가 있다면, 내게로 돌아와서 어떻게해야할지 결정하게 해줘."