PHP XMLReader ile XML Ayrıştırma

4 Cevap php

Ben $ _POST değişkeni bazı XML okuma ve daha sonra bir veritabanına PHP XMLReader ve verileri ekstre giriş kullanarak ayrıştırır program yazıyorum. Ben verilen XML olarak XMLReader kullanıyorum daha büyük olasılıkla belleğine yerleştirmek için çok büyük olacaktır.

Aşağıda gibi bazı sorunları, benim XML ve temel kod yaşıyorum Ancak:

'<?xml version="1.0"?> <data_root> <data> <info>value</info> </data> <action>value</action> </data_root>'

$request = $_REQUEST['xml'];

$reader = new XMLReader();
$reader->XML($request);

while($reader->read()){
   //processing code
}

$reader->close()

Benim sorunum geçirilen XML <?xml version="1.0"?> hattı yoksa kod mükemmel çalışacaktır olduğunu, ama bunu eklemek ve uygulama, canlı bir üretim ortamına gider, {zaman dahil edilecektir while döngüsü için [(1)]} kod çalışmaz ve XML while döngüsü içinde değil ayrıştırılır.

Bu oluyor olabilir ya da neden biliyor önce herkes benzer bir davranış gördü?

Şimdiden teşekkürler.

4 Cevap

Tamam, burada büyük redfaced kodlayıcı, benim dev ortamında bazı değişiklikler yapılmış olması, dün php yeni bir sürümü yüklü ve magic_quotes_gpc böylece XML tırnak kaçan ve soruna neden 'on' için kuruldu

Yardımlarınız için teşekkür ederim

"Çalışmıyor": Sen ne demek istiyorsun? Eğer herhangi bir hata alıyor musunuz?

[Değiştir] ...

Ben de senin sorunu yeniden, ben VolkerK gibi aynı şeyi denedi:

$r = new XMLReader();
$x = '<?xml version="1.0"?> <data_root>  <data>  <info>value</info>  </data> <action>value</action> </data_root>';
$r->XML($x);
while ($r->read()) { echo $r->nodeType . " - "; }

which produces: 1 - 14 - 1 - 14 - 1 - 3 - 15 - 14 - 15 - 14 - 1 - 3 - 15 - 14 - 15 -

I used: PHP 5.3.2-0.dotdeb.1 with Suhosin-Patch (cli) (built: Mar 9 2010 10:14:53)

Ben (ikinci örneğin müşteri olarak php 5.3.2/win32 + firefox kullanıyorsanız) davranışı yeniden olamaz.

$request = '<?xml version="1.0"?> <data_root>  <data>  <info>value</info>  </data>  <action>value</action> </data_root>';
$reader = new XMLReader();
$reader->XML($request);
while($reader->read()){
  echo $reader->nodeType, " ";
}
$reader->close();

prints 1 14 1 14 1 3 15 14 15 14 1 3 15 14 15.
Does $_REQUEST['xml'] really contain what you expect it to?

aslında _REQUEST kullanan Ya da başka bir örnek: düzenleme

<?php
if ( isset($_REQUEST['xml']) ) {
  $request = $_REQUEST['xml'];
  $reader = new XMLReader();
  $reader->XML($request);
  while($reader->read()){
    echo $reader->nodeType, " ";
  }
  $reader->close();
  die;
}
$pre = htmlspecialchars(
'<?xml version="1.0"?>
  <data_root>
    <data> 
      <info>value</info>
    </data> 
  <action>value</action>
</data_root>');
?>
<html><head><title>....</title></head><body>
  <form method="post" action="?">
    <div>
      <textarea cols="25" rows="8" name="xml"><?php echo $pre; ?></textarea>
      <br />
      <input type="submit" />
    </div>
  </form>
</body></html>

form gönderildiğinde tekrar 1 14 1 14 1 3 15 14 15 14 1 3 15 14 15 yazdırılır.

Sen bir kaç şey onaylamanız gerekir:

  1. Bu sadece bir sigara geçerli xml 'belge' ile sonuçlanan ve XML ayrıştırıcı başarısız olmasına neden, bir kısmını depolar değilse veritabanı içinde sütun tipi, xml tutmak için yeterince büyük olduğunu söyledi.
  2. Lütfen post_max_size, max_upload_filesize ve memory_limit değerler onlar değilse geçersiz bir 'belge' olduğu için, aynı sorun arrises, php ayrıştırmak değil, yeterince büyük olduğundan emin olmak için size php.ini klasörünü kontrol edin

Ayrıca, muhtemelen, sadece daha iyi bir uygulama bu verileri almak için $ _POST kullanıyor olmalıdır.