在php中保存xml数据

时间:2017-02-28 22:49:32

标签: php xml

我正在尝试使用PHP中的数据库查询创建并保存xml文件。 代码

<?php
$INC_DIR = $_SERVER["DOCUMENT_ROOT"]. "/dispatch-dev/";
include_once($INC_DIR. 'config/database.class.php');
require_once ($INC_DIR.'functions/ftp.php');

function export_xml($call_number)
{
 $db = new Database();


$sql = "SELECT * FROM nfirs_export WHERE incident_number = :call_number";
$db->bind(':call_number', $call_number);
$db->query($sql);
$row=$db->single();
$xml = new XMLWriter();
$xml->openMemory();
$file = 'parkerfd_' . $call_number . '.xml';
$xml_File = $INC_DIR. "nfirs_files/" .$file;

$xml->setIndent(true);
$xml->startDocument();

    $xml->startElement('incident');

    //call number
    $xml->startElement('incident_number');
    $xml->writeRaw($row['incident_number']);
    $xml->endElement();

    //year
    $xml->startElement('incident_year');
    $xml->writeRaw($row['incident_year']);
    $xml->endElement();


    //address number
    $xml->startElement('address_number');
    $xml->writeRaw($row['address_number']);
    $xml->endElement();

    //prefix directions
    $xml->startElement('prefix_directional');
    $xml->writeRaw($row['prefix_directional']);
    $xml->endElement();

    //street name
    $xml->startElement('street_name');
    $xml->writeRaw($row['street_name']);
    $xml->endElement();

    //street type
    $xml->startElement('street_type');
    $xml->writeRaw($row['street_type']);
    $xml->endElement();

    //cross street 1
    $xml->startElement('cross_street_1');
    $xml->writeRaw($row['cross_street_1']);
    $xml->endElement();

    //cross street 2
    $xml->startElement('cross_street_2');
    $xml->writeRaw($row['cross_street_2']);
    $xml->endElement();

    //city
    $xml->startElement('city');
    $xml->writeRaw($row['city']);
    $xml->endElement();

    //state
    $xml->startElement('state');
    $xml->writeRaw($row['state']);
    $xml->endElement();

    //incident type
    $xml->startElement('incident_type');
    $xml->writeRaw($row['incident_type']);
    $xml->endElement();

    $xml->endElement(); //incident element

    header('Content-type: text/xml');

    file_put_contents($xml_File, $xml->outputMemory());

    $xml->flush();

    send_ftp($xml_File, $file);
}

代码的目的是将名为“parkerfd_xxxxxxxx.xml”的xml文件保存到目录root / nfirs_files中。为什么我不保存xml文件? [R

1 个答案:

答案 0 :(得分:0)

有很多原因导致这种情况无效。

  

首先,您要访问未在您的函数中定义的$INC_DIR。您希望通过添加以下代码来允许它使用

function export_xml($call_number)
{
    global $INC_DIR;

    // rest of your code
}
  

第二个原因,路径$INC_DIR. "nfirs_files/"可能甚至不存在,因此无法创建文件。您将要确保该文件夹存在,如果不存在,则

if (false === is_dir($INC_DIR. "nfirs_files/")) {
    if (false === mkdir($INC_DIR. "nfirs_files/", 0755)) {
        die('failed to create folder'); // you'll need to debug this
    }
}
  

第三,这更多只是为了让您的生活更轻松。而不是定义每个键只是这样做。

$xml->startElement('incident');

foreach($row as $key => $value) {
    $xml->startElement($key);
    $xml->writeRaw($value);
    $xml->endElement();
}

$xml->endElement();