CodeSOD: 나중에 이걸 지불하세요
Ross는 XML을 사용하여 데이터를 교환하는 신용 카드 결제 게이트웨이와 통합하는 소프트웨어를 작성하는 과제를 받았다. 이 결제 게이트웨이는 비교적 작고, 게시된 스키마 문서가 없었지만, XML 메시지를 파싱하는 샘플 코드를 제공했다. 샘플 코드는 XML 응답에서 데이터를 추출하는 데 사용되는 fetch_data라는 함수를 사용했다. 그러나 fetch_data 함수는 XML 문서의 구조를 고려하지 않고 여러 substring을 사용하여 XML을 파싱하는 방법으로 구현되어 있어, 중첩된 태그, 속성 또는 자체 닫히는 태그를 처리할 수 없었다. 또한 이 함수는 임의의 잘못된 문서 조각을 추출하는 것도 허용하고 있었다. PHP의 내장 XML 파싱 클래스를 사용하는 것이 더 나은 접근 방법이 될 것이다. 이러한 방법은 더 견고하고 유지 가능한 솔루션을 제공할 것이다. 현재 구현은 문서를 여러 번 선형 검색하는 데 사용되는 방식으로 인해 성능상의 이점조차 제공하지 않을 수 있다. 취약하고 제한적인 파싱 접근 방식을 사용하면 장기적으로 문제를 일으킬 수 있다. 코드의 작성자는 XML을 단순하게 파싱하는 방법을 택했는데, 복잡한 XML 문서를 처리하는 데 적합하지 않다.