请问PHP用拼接字符串的形式生成xml文件为什么会丢失数据?

核心代码:

$orderCount = 0; //实际订单推送订单数量
foreach ($newData as $key => $val)
{
    $str .= "        <Order>\r\n";
    $str .= "            <OrderId>{$val['lp_number']}</OrderId>\r\n";//LP号
    $str .= "            <LabelUrl>{$val['pdf_url']}</LabelUrl>\r\n";//面单地址
    $str .= "            <Products>\r\n";
    foreach ($val['goods'] as $value) {
        $str .= "            <Product>\r\n";
        $str .= "                 <Number>{$value['sku_number']}</Number>\r\n";//条形码
        $str .= "                 <ExternalId>{$value['external_product_id']}</ExternalId>\r\n";//天猫ID
        $str .= "                 <Description>{$value['sku_name']}</Description>\r\n";//,名称
        $str .= "                 <Quantity>{$value['count']}</Quantity>\r\n";//数量
        $str .= "            </Product>\r\n";
    }
    /*
    *  step4 生成时间
    */
    OrderFinally::updateAll(
        [
            'is_success'  => '1',
            'convert_num' => '1',
            'update_time' => date('Y-m-d H:i:s', time())
        ],
        [
            'order_number'=>$val['order_number']
        ]);
    $str .= "            </Products>\r\n";
    $str .= "        </Order>\r\n";

    $orderCount++;
}

$str .= "    </Orders>\r\n";
$str .= "</Data>\r\n";

$fullPath = $path . "/{$fileName}"; //文件的全路径

$file     = fopen($fullPath, 'w');
fwrite($file, $str);
fclose($file);

生成的xml格式
QQ截图20200320162739.png

这是一个定时脚本任务,自动执行的时候,它会有一定的概率少数据,手动执行的时候数据都是正常的.
比如一个订单下的实际商品是7个,但是最后生成XML文件的时候,商品只有5个了.
目前判断脚本本身应该是没问题的,请教各位还有哪种原因会造成偶发性的丢失数据.(推测过可能是服务器硬盘有坏道造成的偶发性丢失数据,但是感觉也不像~)

阅读 2.3k
1 个回答

可以加个日志,即把每次取出来的数据和生成的 XML 代码一起存进数据库,到时候一起比对,就知道是取数据的问题还是拼接 XML 的问题了。
早上就看到你这个问题了,但是一直没有描述清除,这会儿又刷到了。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏