使用php处理期间丢失了xml元素

时间:2013-02-10 01:32:37

标签: php xml-parsing

我有一个xml文件,但结构处理不正确。关于为什么这种情况不断发生,我一无所知。在PHP 5.1.6版中处理xml时我应该注意什么? (我非常了解VPN的安全问题,也没有外部访问权限。我现在不想升级。)

这是xml结构:

<XML>
  <actions>
    <action>
      <action_id>1</action_id>
    </action>
   <action>
     <action_id>2</action_id>
   </action>
  </actions>
  <actionreferences>
   <actionreference>
     <action_id>2</action_id>
     <reference>1</reference>
   </actionreference>
  </actionreferences>
</XML>

此架构可以有更多操作,因此可以有更多引用,新操作可以基于但不能基于其他操作。我们没有DTD,但是我们的php代码逻辑依赖于结构并且有一些安全防护。对我来说最重要的是,它为每个动作和它找到的参考提供了细粒度的编码记录。

接收到XML文件后,php脚本会将操作和引用写入MySQL DB服务器。

所以问题是,有时缺少动作引用。从PHP的日志记录看起来它们从未到达服务器。我无法在我的实验室设置中复制这个,但确保它在我们的实时系统上发生了0.4%的交易,大约10次。

  • 我排除了生成错误的xml,因为我们手动测试了生成xml才能正常运行的Win32应用程序
  • 我在传输过程中排除了xml文件损坏,因为它会导致错误被抛出,我在actionreference区域切断了xml并再次尝试

我还缺少什么,是什么导致这些引用偶尔不被处理?

更新详情

xml文件是基于带有.net 2.0客户端的Windows上的mdb访问数据库生成的。我们排除了生成xml的问题:

  • 手动启动/关闭它几次,并在生成的xml文件上做了一个diff,总是和预期的一样,已经在其他系统上使用了2y没有遇到问题
  • php脚本使用简单的xml2array函数
  • xml文件被gzip压缩并POST到在Apache 2上运行的php脚本
  • 我们查看了apache和php自定义日志的所有日志,没有传输错误,客户端也写出日志,没有错误,但是我们当前使用的客户端没有记录html返回,它只是记录HTTP 200 OK
  • php xml是http://us4.php.net/manual/en/function.xml-parse-into-struct.php
  • 我不能完全排除MySQL,因为我在Apache错误日志中发现了一些错误,我在php中没有正确捕获一些mysql db错误 也许正确捕捉所有mysql错误会给我更多的洞察力,但它们似乎一见钟情

1 个答案:

答案 0 :(得分:0)

首先,您的XML中存在错误:

<reference>1</references>

应该是

<reference>1</reference>

(注意“s”)