0

我有一个 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 文件进行了比较,始终与预期相同,已在其他系统上使用 2y 没有遇到问题
  • 使用简单 xml2array 函数的 php 脚本
  • xml 文件被压缩并 POST 到在 Apache 2 上运行的 php 脚本
  • 我们查看了 apache 和 php 自定义日志的所有日志,那里没有传输错误,客户端也写了一个日志,那里没有错误,但是我们当前使用的客户端不记录 html 返回,它只记录 HTTP 200好的
  • php xml 是http://us4.php.net/manual/en/function.xml-parse-into-struct.php
  • 我不能完全排除 MySQL,因为我在 Apache 错误日志中发现了一些错误,一些我没有在 php 中正确捕获的 mysql db 错误也许正确捕获所有 mysql 错误会给我更多的洞察力,但它们乍一看似乎是无关的
4

1 回答 1

0

一方面,您的 XML 中有一个错误:

<reference>1</references>

应该

<reference>1</reference>

(注意“s”)

于 2013-02-10T01:38:15.750 回答