PHP 5.3.3 XSD en iç içe karşı XML doğrulamak için başarısız

0 Cevap php

5.3.3 PHP 5.2.8 yükselttikten sonra, yeni libxml_disable_entity_loader(false) function bir ağ paylaşımında bir PHP dosyası ile komut satırı üzerinden Windows üzerinde çalışmak için görünmüyor. Daha spesifik olarak, DOMDocument::schemaValidate() iç içe birden fazla düzeyde içeren XSD dosyaları ile başarısız bir ağ paylaşımında diğer XSD dosyaları () 'ler bulunur.

Aşağıdaki örnek libxml_disable_entity_loader(false) iç içe XSD'nin çoklu düzeyde içeren XSD dosyaları PHP ile onurlandırıldı getirilmiyor işlev çağrısı () 'ler arasında inanmak için bana yol açar.

Ben burada bir şey eksik veya bu PHP ile bir hata var ya da muhtemelen libxml'e düşünüyorsunuz?

TO REPLICATE:

Test 1 (success):

"C:\PHP\5.3.3\php.exe" -c "C:\PHP\5.3.3\php.ini" "C:\Temp\validate.php"
  • Windows komut satırı örneği üzerinde bir sabit kodlanmış yolu değil, bir Windows paylaşılan klasörü kullanır.
  • "Geçti" PHP 5.2.8 ve PHP 5.3.3 hem de. Başarılı yankılanacak

Test 2 (fail):

"C:\PHP\5.3.3\php.exe" -c "C:\PHP\5.3.3\php.ini" "\\192.168.82.99\Deployment\Temp\validate.php"
  • , C sağ tıklayın: Özellikler> Paylaşım> sürücü> Yeni Pay> Paylaşım adı: "Dağıtım"
  • Yerel makine eşleşecek yukarıdaki komut satırı örnekte IP adresini düzenleyin.
  • Windows komut satırı Yukarıdaki örnek, bir Windows paylaşılan klasör aracılığıyla aynı dosyaları kullanır ama.
  • PHP 5.2.8 olarak, "geçti" yankılanacak.
  • PHP 5.3.3, bu "başarısız" echo ve "dış varlık yüklenemedi" ve "belge yüklenemedi" hakkında şu PHP Uyarılar üretecektir:

Running the above command line example in PHP 5.3.3 produces:

Warning: DOMDocument::schemaValidate(): I/O warning : failed to load external entity "/192.168.82.99/DEPLOYMENT/Temp/grandparent.xsd" in \\192.168.82.99\DEPLOYMENT\Temp\validate.php on line 8
Warning: DOMDocument::schemaValidate(): Element '{http://www.w3.org/2001/XMLSchema}include': Failed to load the document '/192.168.82.99/DEPLOYMENT/Temp/grandparent.xsd' for inclusion. in \\192.168.82.99\DEPLOYMENT\Temp\validate.php on line 8
Warning: DOMDocument::schemaValidate(): Invalid Schema in \\192.168.82.99\DEPLOYMENT\Temp\validate.php on line 8
failed

FILES NEEDED TO REPLICATE:

Place all these files in "C: \ Temp \" (or change your paths in the command line examples)

validate.php

<?php
chdir(dirname(__FILE__));
libxml_disable_entity_loader(false);

$xmlDoc = new DomDocument();
$xmlDoc->load('sample.xml');

echo $xmlDoc->schemaValidate('child.xsd') ? 'passed' : 'failed'; 
?>

sample.xml

<?xml version="1.0"?>
<team mascot="cowboys" />

child.xsd

<?xml version="1.0" encoding="utf-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="qualified" >
  <!-- The include below works -->
  <xsd:include schemaLocation="parent.xsd" />
  <xsd:element name="team" type="baseTeam" />
</xsd:schema>

parent.xsd

<?xml version="1.0" encoding="utf-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="qualified" >
  <!-- The include below fails in PHP 5.3.3 even though libxml_disable_entity_loader(false) is called! -->
  <xsd:include schemaLocation="grandparent.xsd" />
  <xsd:complexType name="baseTeam">
     <xsd:attribute name="mascot" type="mascotNames" use="required" />
  </xsd:complexType>
</xsd:schema>

grandparent.xsd

<?xml version="1.0" encoding="utf-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="qualified" >
  <xsd:simpleType name="mascotNames">
    <xsd:restriction base="xsd:string">
      <xsd:enumeration value="bengals" />
      <xsd:enumeration value="cowboys" />
      <xsd:enumeration value="patriots" />
    </xsd:restriction>
  </xsd:simpleType>
</xsd:schema>

0 Cevap