2013-12-15 4 views
1

다음 문제를 파악할 수 없습니다. SYSTEM을 기반으로하는 DTD에서 외부 엔티티를 해결하고 싶습니다. 최신 Ubuntu 12.10에서 실행됩니다. 사용자 정의 변경이 없습니다!SYSTEM을 사용하는 DTD의 외부 엔터티가 PHP로 해결되지 않았습니다.

나는 다음과 같은 PHP 테스트 코드가 있습니다

<h1>simpleXml Demo</h1> 
<form name="input" action="" method="POST"> 
    <textarea name="xmlInput"></textarea><br /> 
    <input type="submit" value="Submit"> 
</form> 
<?php 
if(isset($_POST['xmlInput']) and strlen($_POST['xmlInput'])>0){ 
    $doc = simplexml_load_string($_POST['xmlInput']); 
    echo "<pre>"; 
    print_r($doc); 
    echo "</pre>";  
?> 

예 1 : 이 XML 파일을 실행, 엔티티 &foo;가 해결됩니다.

<?xml version="1.0" encoding="ISO-8859-1"?> 
<!DOCTYPE results [ 
    <!ENTITY test "some text,"> 
]> 
<results> 
    <result>This result is &test;</result> 
</results> 

예 2 :이 XML 파일을 실행하면 는, 엔티티 &foo; 그냥 아무것도로 대체 - 전혀 오류!

<?xml version="1.0" encoding="ISO-8859-1"?> 
<!DOCTYPE result [ 
    <!ENTITY test SYSTEM "http://textfiles.com/food/btaco.txt"> 
]> 
<results> 
    <result>This result is &test;</result> 
</results> 

'libxml_disable_entity_loader()'로 이미 연주했지만 아무 것도 변경하지 않았습니다.

답변

1

XML 데이터를 구문 분석 할 때 LIBXML_NOENT 옵션을 사용해보십시오. 반 직관적이지만 외부 엔티티를 사용할 수 있으며 URL에 대한 요청이 발생합니다.

+0

이것이 제 설정과 함께 작동하는지 확인할 수 있습니다. OP와 똑같은 문제가 발생했습니다. 아이디어를 가져 주셔서 감사합니다! –