除dom装入外,还可以用sax推模式取xml文档内容及xmlreader拉模式取xml文档内容。
实例:
/*******************************************************************/
//Sax读取
/*******************************************************************/
<?php
//session_start();
require_once('./includes/common.php');
$conn = ftp_connect("192.168.0.17",21,160);
$fl_array= array();
$rtn=true;
$rtnvalue="";
$filename="log//".date("Ymd").".log";
if (!$conn)
{
$rtn=false;
$rtnvalue="无法连接服务器!";
}
else
{
// 使用username和password登录
$login=ftp_login($conn, "ftp", "ftp");
if (!$login)
{
$rtn=false;
$rtnvalue="用户名密码无效,无法登录服务器!";
}
else
{
//首先读取over文件,此时xml文件已写入完毕
$contents = ftp_nlist($conn, "*.over");
//获取所有符合当天日期的ftp正则表达式的xml
$strdate= date ("Ymd");
$fl_array = preg_grep ("/TCM_USER_".$strdate."[0-9][0-9].over/", $contents);
foreach ($fl_array as $ftpfile)
{
//设置本地路径
echo "远程文件上有文件:".$ftpfile."</br>";
$real_path = realpath("../")."/后台管理/xml//".str_replace(".over",".xml",$ftpfile);
//下载全部符合条件的文件
$rtn=ftp_get($conn, $real_path, str_replace(".over",".xml",$ftpfile), FTP_BINARY);
echo "获取远程文件:".str_replace(".over",".xml",$ftpfile)."</br>";
if (!$handle = fopen($filename, 'a+'))
{
echo "不能打开文件 $filename";
exit;
}
if (fwrite($handle, gmdate("M d Y H:i:s")."/t"."读取远程文件".str_replace(".over",".xml",$ftpfile)."/r/n") === FALSE)
{
echo "不能写入到文件 $filename";
exit;
}
if (!$rtn)
{
$rtn=false;
$rtnvalue="无法找到文件".$ftpfile;
}
}
}
}
// 关闭联接
ftp_quit($conn);
$v=opendir("log");
if ($v==0)
{
mkdir("log");
}
if (!$rtn)
{
$filename="log/error".date("Ymd").".log";
if (!$handle = fopen($filename, 'a+'))
{
echo "不能打开文件 $filename";
exit;
}
if (fwrite($handle, gmdate("M d Y H:i:s")."/t".""."/t$rtnvalue/r/n") === FALSE)
{
echo "不能写入到文件 $filename";
exit;
}
}
$g_colums = array();
$g_elem = null;
function startElement( $parser, $name, $attrs )
{
global $g_colums, $g_elem;
if ( $name == 'ROW' ) $g_colums []= array();
$g_elem = $name;
}
function endElement( $parser, $name )
{
global $g_elem;
$g_elem = null;
}
function textData( $parser, $text )
{
global $g_colums,$g_elem;
//if ($g_elem == "USER_ID" || $g_elem == "USER_SEQ" || $g_elem == "ORD_NO" || $g_elem == "BUREAU_NO" || $g_elem == "USER_BRANCH_NO" || $g_elem == "REGION_NO" || $g_elem == "CUST_ID" || $g_elem == "USER_NAME" || $g_elem == "NUM" || $g_elem == "NUM_STATE" || $g_elem == "STATE" || $g_elem == "CITY_NO" || $g_elem == "CONTRACT_ID" || $g_elem == "PREPAY_FLAG" || $g_elem == "STOP_STATE" )
switch ($g_elem)
{
case "NUM":
$g_colums[ count($g_colums) - 1 ][$g_elem] = utf8_decode($text);
break;
case "CITY_NO":
$g_colums[ count($g_colums) - 1 ][$g_elem] = utf8_decode($text);
break;
case "STOP_STATE":
$g_colums[ count($g_colums) - 1 ][$g_elem] = utf8_decode($text);
break;
}
}
foreach ($fl_array as $ftpfile)
{
$parser = xml_parser_create(); //xml解析器
xml_set_element_handler( $parser, "startElement", "endElement" ); //设置元素句柄
xml_parser_set_option($parser,XML_OPTION_TARGET_ENCODING,'UTF-8');
xml_set_character_data_handler( $parser, "textData" );
$localfile="xml//".str_replace(".over",".xml",$ftpfile);
echo "读取本地文件:".$localfile."</br>";
$f = fopen( $localfile,'r' );
if (!$handle = fopen($filename, 'a+'))
{
echo "不能打开文件 $filename";
exit;
}
if (fwrite($handle, gmdate("M d Y H:i:s")."/t"."打开本地文件".$localfile."/r/n") === FALSE)
{
echo "不能写入到文件 $filename";
exit;
}
echo "小节起始时间:".date("i s")."</br>";
while( $data = fread( $f, 4096 ) )
{
xml_parse( $parser, $data );
}
echo "小节终止时间:".date("i s")."</br>";
xml_parser_free( $parser );
foreach( $g_colums as $column )
{
//echo $column['CITY_NO']."-----".$column['NUM']."</br>";
//先判断CITY_NO是否属于黔西南地区
if($column['CITY_NO']=="0859")
{
//判断是否停机
switch ($column['STOP_STATE'])
{
case "F01":
$STOP_STATE='1';
break;
case "F0A":
$STOP_STATE='1';
break;
default:
$STOP_STATE='0';
break;
}
$SQL="update hrb_telephone,tb_user set hrb_telephone.telstate= $STOP_STATE,tb_user.accountstate=$STOP_STATE where hrb_telephone.telcode='".$column['NUM']."' and hrb_telephone.telid=tb_user.bindtelid";
// echo "执行sql语句:".$SQL."</br>";
$db->query($SQL);
//在此处写入日志
if (!$handle = fopen($filename, 'a+'))
{
echo "不能打开文件 $filename";
exit;
}
if (fwrite($handle, gmdate("M d Y H:i:s")."/t"."执行语句".$SQL."/r/n") === FALSE)
{
echo "不能写入到文件 $filename";
exit;
}
//OprLog(1,"执行修改xml接口:'".$column['NUM']."' 信息");
}
//此处判断某一标识位,确定更新或者插入
/*$SQL="insert into TCM_USER(USER_ID,USER_SEQ,ORD_NO,BUREAU_NO,USER_BRANCH_NO,REGION_NO,CUST_ID,USER_NAME,NUM,NUM_STATE,STATE,CITY_NO,CONTRACT_ID,PREPAY_FLAG,STOP_STATE) values ('".$column['USER_ID']."','".$column['USER_SEQ']."','".$column['ORD_NO']."','".$column['BUREAU_NO']."','".$column['USER_BRANCH_NO']."','".$column['REGION_NO']."','".$column['CUST_ID']."','".$column['USER_NAME']."','".$column['NUM']."','".$column['NUM_STATE']."','".$column['STATE']."','".$column['CITY_NO']."','".$column['CONTRACT_ID']."','".$column['PREPAY_FLAG']."','".$column['STOP_STATE']."')";
$db->query($SQL);
$filename="log//".date("Ymd").".log";
if (!$handle = fopen($filename, 'a+'))
{
echo "不能打开文件 $filename";
exit;
}
if (fwrite($handle, gmdate("M d Y H:i:s")."/t"."添加用户".$column['USER_ID']"/r/n") === FALSE)
{
echo "不能写入到文件 $filename";
exit;
}
*/
//在此处写入日志
//echo "success";//$SQL;
// exit;
}
}
//tangwf 2007-07-13 add
//批量处理更新后的数据语句
//$SQL="update hrb_telephone,tb_user,TCM_USER set hrb_telephone.telstate= case TCM_USER.STOP_STATE when 'F01' then '1'when 'F0A' then '1' else '0' end,tb_user.accountstate=case TCM_USER.STOP_STATE when 'F01' then '1' when 'F0A' then '1' else '0' end where TCM_USER.NUM=hrb_telephone.telcode and hrb_telephone.telid=tb_user.bindtelid";
//$db->query($SQL);
//添加日志,写入数据库中
echo "执行完毕:</br>";
?>
/*******************************************************************/
//XmlReader读取
/*******************************************************************/
<?php
//session_start();
require_once('./includes/common.php');
$conn = ftp_connect("192.168.0.17",21,160);
$fl_array= array();
$rtn=true;
$rtnvalue="";
$filename="log//".date("Ymd").".log";
if (!$conn)
{
$rtn=false;
$rtnvalue="无法连接服务器!";
}
else
{
// 使用username和password登录
$login=ftp_login($conn, "ftp", "ftp");
if (!$login)
{
$rtn=false;
$rtnvalue="用户名密码无效,无法登录服务器!";
}
else
{
//首先读取over文件,此时xml文件已写入完毕
$contents = ftp_nlist($conn, "*.over");
//获取所有符合当天日期的ftp正则表达式的xml
$strdate= date ("Ymd");
$fl_array = preg_grep ("/TCM_USER_".$strdate."[0-9][0-9].over/", $contents);
foreach ($fl_array as $ftpfile)
{
//设置本地路径
echo "远程文件上有文件:".$ftpfile."</br>";
$real_path = realpath("../")."/后台管理/xml//".str_replace(".over",".xml",$ftpfile);
//下载全部符合条件的文件
$rtn=ftp_get($conn, $real_path, str_replace(".over",".xml",$ftpfile), FTP_BINARY);
echo "获取远程文件:".str_replace(".over",".xml",$ftpfile)."</br>";
if (!$handle = fopen($filename, 'a+'))
{
echo "不能打开文件 $filename";
exit;
}
if (fwrite($handle, gmdate("M d Y H:i:s")."/t"."读取远程文件".str_replace(".over",".xml",$ftpfile)."/r/n") === FALSE)
{
echo "不能写入到文件 $filename";
exit;
}
if (!$rtn)
{
$rtn=false;
$rtnvalue="无法找到文件".$ftpfile;
}
}
}
}
// 关闭联接
ftp_quit($conn);
$v=opendir("log");
if ($v==0)
{
mkdir("log");
}
if (!$rtn)
{
$filename="log/error".date("Ymd").".log";
if (!$handle = fopen($filename, 'a+'))
{
echo "不能打开文件 $filename";
exit;
}
if (fwrite($handle, gmdate("M d Y H:i:s")."/t".""."/t$rtnvalue/r/n") === FALSE)
{
echo "不能写入到文件 $filename";
exit;
}
}
$g_colums = array();
$g_elem = null;
function startElement( $parser, $name, $attrs )
{
global $g_colums, $g_elem;
if ( $name == 'ROW' ) $g_colums []= array();
$g_elem = $name;
}
function endElement( $parser, $name )
{
global $g_elem;
$g_elem = null;
}
function textData( $parser, $text )
{
global $g_colums,$g_elem;
//if ($g_elem == "USER_ID" || $g_elem == "USER_SEQ" || $g_elem == "ORD_NO" || $g_elem == "BUREAU_NO" || $g_elem == "USER_BRANCH_NO" || $g_elem == "REGION_NO" || $g_elem == "CUST_ID" || $g_elem == "USER_NAME" || $g_elem == "NUM" || $g_elem == "NUM_STATE" || $g_elem == "STATE" || $g_elem == "CITY_NO" || $g_elem == "CONTRACT_ID" || $g_elem == "PREPAY_FLAG" || $g_elem == "STOP_STATE" )
switch ($g_elem)
{
case "NUM":
$g_colums[ count($g_colums) - 1 ][$g_elem] = utf8_decode($text);
break;
case "CITY_NO":
$g_colums[ count($g_colums) - 1 ][$g_elem] = utf8_decode($text);
break;
case "STOP_STATE":
$g_colums[ count($g_colums) - 1 ][$g_elem] = utf8_decode($text);
break;
}
}
foreach ($fl_array as $ftpfile)
{
/*
$parser = xml_parser_create(); //xml解析器
xml_set_element_handler( $parser, "startElement", "endElement" ); //设置元素句柄
xml_parser_set_option($parser,XML_OPTION_TARGET_ENCODING,'UTF-8');
xml_set_character_data_handler( $parser, "textData" );
*/
$reader = new XMLReader();
$localfile="xml//".str_replace(".over",".xml",$ftpfile);
$reader->open($localfile);
echo "读取本地文件:".$localfile."</br>";
$f = fopen( $localfile,'r' );
if (!$handle = fopen($filename, 'a+'))
{
echo "不能打开文件 $filename";
exit;
}
if (fwrite($handle, gmdate("M d Y H:i:s")."/t"."打开本地文件".$localfile."/r/n") === FALSE)
{
echo "不能写入到文件 $filename";
exit;
}
echo "小节起始时间:".date("i s")."</br>";
/*
while( $data = fread( $f, 4096 ) )
{
xml_parse( $parser, $data );
}*/
$NUM="";
$CITY_NO="";
$STOP_STATE="";
$STOP_STATE_MOD="";
while ($reader->read())
{
switch ($reader->nodeType)
{
case (XMLREADER::ELEMENT):
if ($reader->localName == "NUM")
{
$reader->read();
//echo $reader->value."**";
$NUM = $reader->value;
}
if ($reader->localName == "CITY_NO")
{
$reader->read();
//echo $reader->value."**";
$CITY_NO = $reader->value;
}
if ($reader->localName == "STOP_STATE")
{
$reader->read();
//echo $reader->value."**</br>";
$STOP_STATE = $reader->value;
if($CITY_NO=="0859")
{
switch ($STOP_STATE)
{
case "F01":
$STOP_STATE_MOD='1';
break;
case "F0A":
$STOP_STATE_MOD='1';
break;
default:
$STOP_STATE_MOD='0';
break;
}
$SQL="update hrb_telephone,tb_user set hrb_telephone.telstate= $STOP_STATE_MOD,tb_user.accountstate=$STOP_STATE_MOD where hrb_telephone.telcode='".$NUM."' and hrb_telephone.telid=tb_user.bindtelid";
//echo "执行sql语句:".$SQL."</br>";
$db->query($SQL);
//在此处写入日志
if (!$handle = fopen($filename, 'a+'))
{
echo "不能打开文件 $filename";
exit;
}
if (fwrite($handle, gmdate("M d Y H:i:s")."/t"."执行语句".$SQL."/r/n") === FALSE)
{
echo "不能写入到文件 $filename";
exit;
}
}
}
break;
}
//echo $NUM."<br/>";
/*
if($CITY_NO=="0859")
{
echo $NUM."---".$CITY_NO."---".$STOP_STATE."<br/>";
}
*/
/*
switch ($STOP_STATE)
{
case "F01":
$STOP_STATE_MOD='1';
break;
case "F0A":
$STOP_STATE_MOD='1';
break;
default:
$STOP_STATE_MOD='0';
break;
}
$SQL="update hrb_telephone,tb_user set hrb_telephone.telstate= $STOP_STATE_MOD,tb_user.accountstate=$STOP_STATE_MOD where hrb_telephone.telcode='".$NUM."' and hrb_telephone.telid=tb_user.bindtelid";
//echo "执行sql语句:".$SQL."</br>";
$db->query($SQL);
//在此处写入日志
if (!$handle = fopen($filename, 'a+'))
{
echo "不能打开文件 $filename";
exit;
}
if (fwrite($handle, gmdate("M d Y H:i:s")."/t"."执行语句".$SQL."/r/n") === FALSE)
{
echo "不能写入到文件 $filename";
exit;
}
*/
}
echo "小节终止时间:".date("i s")."</br>";
}
echo "执行完毕:</br>";
?>