php中ftp下载xml,sax读取xml

除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>";
  ?>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值