首页 > 编程技术 > php

php mysql与xml数据相互转换程序

发布时间:2016-11-25 16:03

很多时间我们要把数据保存到其它地方,如保存到xml或又想把xml数据保存到mysql数据库,下面我们就提供了一款php mysql与xml数据相互转换程序哦。

先来看看调用方法


<?php
$xml = new MySQL2XML(array('host'=>'localhost', 'username'=>'root', 'password'=>'', 'database'=>'mysql'));
$xml->setTables(array('wp_term_relationships','wp_terms'));//设置备份的表
$xml->setSaveFolder('datas/');//保存备份文件的文件夹
$xml->toXML();//备份开始
?>

下面是这个互相转换程序的类型文件


<?php
class MySQL2XML {
        protected $conn;
        protected $result;
        protected $tables;
        protected $saveFolder = 'datas/';
       
        public function __construct($config = NULL) {
                if($config !== NULL && is_array($config)) {
                        $this->connect($config);
                }
        }
       
        public function connect($config) {
                $this->conn = mysql_connect($config['host'], $config['username'], $config['password']);
                if($this->conn) {
                        mysql_select_db($config['database']);
                        return true;
                }
                return false;
        }
       
        public function setSaveFolder($folder) {
                if(is_dir($folder)) {
                        $this->saveFolder = rtrim(str_replace("\", "/", $folder),'/');
                        return true;
                }
                return false;
        }
       
        public function setTables($tables) {
                if(is_array($tables)) {
                        $this->tables = $tables;
                        return true;
                }
                return false;
        }
       
        public function query($query) {
                if(!isset($query) || trim($query) == '') return false;
                $this->result = mysql_query($query);
                if($this->result) return true;
                return false;
        }
       
        public function toXML() {
                if(!isset($this->tables)) return false;
                foreach($this->tables as $table) {
                        $file = $this->saveFolder.$table.'.xml';
                        $fp = @fopen($file, 'w');
                        if(!$fp) exit('Can not write file');
                        fwrite($fp, $this->tableToXML($table));
                        fclose($fp);
                        unset($fp);
                }
                return true;
        }
       
        public function tableToXML($table) {
                header("content-type:text/xml;charset=utf-8");
                $xml = "<?xml version="1.0" encoding="utf-8" ?>n<datas>n";
                $fields = $this->getFields($table);
                $datas = $this->getDatas($table);
                $cdata = array();
                foreach($datas as $data) {
                        foreach($data as $key => $value)
                                $cdata[$key][] = $value;
                }
                foreach($fields as $element) {
                        $xml .= "t<fields name="{$element['Field']}" type="{$element['Type']}" null="{$element['Null']}" key="{$element['Key']}" default="{$element['Default']}" extra="{$element['Extra']}">n";
                        foreach($cdata[$element['Field']] as $value) {
                                $xml .= "tt<data>{$value}</data>n";
                        }
                        $xml .= "t</fields>n";
                }
                $xml .= '</datas>';
                return $xml;
        }
       
        protected function getFields($table) {
                $query = "SHOW FIELDS FROM {$table}";
                $this->query($query);
                return $this->fetchAll();
        }
       
        protected function getDatas($table) {
                $query = "SELECT * FROM {$table}";
                $this->query($query);
                return $this->fetchAll();
        }
       
        protected function fetch() {
                if(is_resource($this->result)) {
                        return mysql_fetch_assoc($this->result);
                }
                return false;
        }
       
        protected function fetchAll() {
                if(is_resource($this->result)) {
                        $return = array();
                        $row = NULL;
                        while($row = mysql_fetch_assoc($this->result)) {
                                $return[] = $row;
                        }
                        return $return;
                }
                return false;
        }
}
?>

php 把excel批量导入到数据库代码

我们是利用了ExcelFileParser这个扩展来处理的哦,

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Excel数据获取演示</title>
<meta name="Keywords" content="TODO" />
<meta name="Description" content="TODO"/>
</head>
<body>
    <div>
      <div>Excel数据获取演示</div>
      <div>
        <form method="POST" action="/Index/parse" enctype="multipart/form-data">
            <input type="file" name="excel" value="" />
            <input type="submit" name="submit" value="提交" />
        </form>
      </div>
    </div>
</body>
</html>


<?php
/**
 * CopyRight (c) 2009,
 * All rights reserved.
 * 文件名:
 * 摘  要:
 *
 * @author 星期八 [email=ixqbar@hotmail.com]ixqbar@hotmail.com[/email]
 * @version
 */

class IndexAction extends Action
{
    /**
     * 构造函数
     */
    public function __construct()
    {
        parent::__construct();
    }
    /**
     * 默认索引页
     */
    public function index()
    {
        $this->display();
    }
    /**
     * 提交处理
     */
    public function parse()
    {
       /**
        * $_FILES数组说明
        * array(n) {
        *   ["表单文件框名称"] => array(5) {
        *       ["name"]        => 提交文件名称
        *       ["type"]        => 提交文件类型 Excel为"application/vnd.ms-excel"
        *       ["tmp_name"]    => 临时文件名称
        *       ["error"]       => 错误(0成功1文件太大超过upload_max_filesize2文件太大超过MAX_FILE3上传不完整4没有上传文件)
        *       ["size"]        => 文件大小(单位:KB)
        *   }
        * }
        */
        $return=array(0,'');
        /**
         * 判断是否提交
         * is_uploaded_file(文件名称)用于确定指定的文件是否使用POST方法上传,防止非法提交,通常和move_upload_file一起使用保存上传文件到指定的路径
         */
        if(!isset($_FILES) || !is_uploaded_file($_FILES['excel']['tmp_name']))
        {
            $return=array(1,'提交不合法');
        }
        //处理
        if(0 == $return[0])
        {
            import('@.Util.ExcelParser');
            $excel=new ExcelParser($_FILES['excel']['tmp_name']);
            $return=$excel->main();
        }
        //输出处理
        print_r($return);
    }
}
?>


<?php
/**
 * CopyRight (c) 2009,
 * All rights reserved.
 * 文件名:excel数据获取
 * 摘  要:
 *
 * @author 星期八 [email=ixqbar@hotmail.com]ixqbar@hotmail.com[/email]
 * @version 0.1
 */
class ExcelParser
{
    private $_data=array(0,'');
    private $_excel_handle;
    private $_excel=array();
    /**
     * 构造函数
     * @param <string> $filename 上传文件临时文件名称
     */
    public function __construct($filename)
    {
        /**
         * 引入excelparser类
         * 普通方法为
         * requires 路径.'excelparser.php';
         * import为ThinkPHP自带导入类方法
         */
        import('@.Util.PHPExcelParser.excelparser','','.php');
        $this->_excel_handle=new ExcelFileParser();
        //错误获取
        $this->checkErrors($filename);
    }
    /**
     * 错误校验
     */
    private function checkErrors($filename)
    {
        /**
         * 方法一
         */
        $error_code=$this->_excel_handle->ParseFromFile($filename);
        /**
         * 方法二
         * $file_handle = fopen($this->_filename,'rb');
         * $content = fread($file_handle,filesize($this->_filename));
         * fclose($file_handle);
         * $error_code = $this->_excel->ParseFromString($content);
         * unset($content,$file_handle);
         */
        switch($error_code)
        {
            case 0:
                //无错误不处理
                break;
            case 1:
                $this->_data=array(1,'文件读取错误(Linux注意读写权限)');
                break;
            case 2:
                $this->_data=array(1,'文件太小');
                break;
            case 3:
                $this->_data=array(1,'读取Excel表头失败');
                break;
            case 4:
                $this->_data=array(1,'文件读取错误');
                break;
            case 5:
                $this->_data=array(1,'文件可能为空');
                break;
            case 6:
                $this->_data=array(1,'文件不完整');
                break;
            case 7:
                $this->_data=array(1,'读取数据错误');
                break;
            case 8:
                $this->_data=array(1,'版本错误');
                break;
        }
        unset($error_code);
    }
    /**
     * Excel信息获取
     */
    private function getExcelInfo()
    {
        if(1==$this->_data[0])return;
        /**
         * 获得sheet数量
         * 获得sheet单元对应的行和列
         */
        $this->_excel['sheet_number']=count($this->_excel_handle->worksheet['name']);
        for($i=0;$i<$this->_excel['sheet_number'];$i++)
        {
            /**
             * 行于列
             * 注意:从0开始计数
             */
            $row=$this->_excel_handle->worksheet['data'][$i]['max_row'];
            $col=$this->_excel_handle->worksheet['data'][$i]['max_col'];
            $this->_excel['row_number'][$i]=($row==NULL)?0:++$row;
            $this->_excel['col_number'][$i]=($col==NULL)?0:++$col;
            unset($row,$col);
        }
    }
    /**
     * 中文处理函数
     * @return <string>
     */
    private function uc2html($str)
    {
        $ret = '';
        for( $i=0; $i<strlen($str)/2; $i++ )
        {
            $charcode = ord($str[$i*2])+256*ord($str[$i*2+1]);
            $ret .= '&#'.$charcode.';';
        }
        return mb_convert_encoding($ret,'UTF-8','HTML-ENTITIES');
    }
    /**
     * Excel数据获取
     */
    private function getExcelData()
    {
        if(1==$this->_data[0])return;

        //修改标记
        $this->_data[0]=1;
        //获取数据
        for($i=0;$i<$this->_excel['sheet_number'];$i++)
        {
            /**
             * 对行循环
             */
            for($j=0;$j<$this->_excel['row_number'][$i];$j++)
            {
                /**
                 * 对列循环
                 */
                for($k=0;$k<$this->_excel['col_number'][$i];$k++)
                {
                    /**
                     * array(4) {
                     *   ["type"]   => 类型 [0字符类型1整数2浮点数3日期]
                     *   ["font"]   => 字体
                     *   ["data"]   => 数据
                     *   ...
                     * }
                     */
                    $data=$this->_excel_handle->worksheet['data'][$i]['cell'][$j][$k];
                    switch($data['type'])
                    {
                        case 0:
                            //字符类型
                            if($this->_excel_handle->sst['unicode'][$data['data']])
                            {
                                //中文处理
                                $data['data'] = $this->uc2html($this->_excel_handle->sst['data'][$data['data']]);
                            }
                            else
                            {
                                $data['data'] = $this->_excel_handle->sst['data'][$data['data']];
                            }
                            break;
                        case 1:
                            //整数
                            //TODO
                            break;
                        case 2:
                            //浮点数
                            //TODO
                            break;
                        case 3:
                            //日期
                            //TODO
                            break;
                    }
                    $this->_data[1][$i][$j][$k]=$data['data'];
                    unset($data);
                }
            }
        }
    }
    /**
     * 主函数
     * @return <array> array(标识符,内容s)
     */
    public function main()
    {
        //Excel信息获取
        $this->getExcelInfo();
        //Excel数据获取
        $this->getExcelData();
        return $this->_data;
    }
}

?>

php 保存flash在线拍照发送过照片

<?php
//保存报像头上传的图片.

define('SD_ROOT', dirname(__FILE__).'/');
@header("Expires: 0");
@header("Cache-Control: private, post-check=0, pre-check=0, max-age=0", FALSE);
@header("Pragma: no-cache");


$pic_id = time();

//生成图片存放路径
$new_avatar_path = 'avatar_origin/'.$pic_id.'.jpg';

//将POST过来的二进制数据直接写入图片文件.
$len = file_put_contents(SD_ROOT.'./'.$new_avatar_path,file_get_contents("php://input"));

//原始图片比较大,压缩一下. 效果还是很明显的, 使用80%的压缩率肉眼基本没有什么区别
$avtar_img = imagecreatefromjpeg(SD_ROOT.'./'.$new_avatar_path);
imagejpeg($avtar_img,SD_ROOT.'./'.$new_avatar_path,80);
//nix系统下有必要时可以使用 chmod($filename,$permissions);

log_result('图片大小: '.$len);


//输出新保存的图片位置, 测试时注意改一下域名路径, 后面的statusText是成功提示信息.
//status 为1 是成功上传,否则为失败.
$d = new pic_data();
$d->data->photoId = $pic_id;
//$d->data->urls[0] = 'http://sns.com/avatar_test/'.$new_avatar_path;
$d->data->urls[0] = '/avatar_test/'.$new_avatar_path;
$d->status = 1;
$d->statusText = '上传成功!';

$msg = json_encode($d);

echo $msg;

log_result($msg);
function  log_result($word) {
 @$fp = fopen("log.txt","a"); 
 @flock($fp, LOCK_EX) ;
 @fwrite($fp,$word.":执行日期:".strftime("%Y%m%d%H%I%S",time())."rn");
 @flock($fp, LOCK_UN);
 @fclose($fp);
}
class pic_data
{
  public $data;
  public $status;
  public $statusText;
 public function __construct()
 {
  $this->data->urls = array();
 }
}

?>

在二年前我就接触过了wap网站的制作了,今天 3g出来了现在我们来看看关于用php写wap站点时要注意的一些小细节吧。

(1) 使用“<?”和“?>”来包含PHP编写的WML程序行,格式为:

<?

……(程序行);

?>

(2) 其他WML标签和语句行一律使用PHP的echo关键字来声明,每个WML行的后面加上换行符“n”(根据需要,也可加多个)。其基本格式为:

echo("……(WML标签和语句行)n");

例如,下面的语句就是PHP编写WML语句行的典型例子:

echo("<?xml version="1.0"?>n");

而且,echo语句中的“WML标签和语句行”可以连写,以节省程序代码行。例如,下面的一行语句就连写了WML的3行标签语句:

echo ("<wml> <card> <p>");

3) 文件最后保存时采用的扩展名为“.php”或“.php3”,而不是“.wml”等扩展名。

4) 程序行语句均以分号( ; )结尾,这是与ASP编写WML程序不同的地方。

5) 声明脚本语言。这是对PHP编程的继承,向编译器声明当前程序采用的脚本语言为PHP,格式为:

<script language="PHP">

不过这一句可以省略,因为编译器能够自动识别PHP的脚本程序。

6) 使用PHP的header关键字来声明WML的文件类型,基本格式为:

header("Content-type: text/vnd.wap.wml");

上述格式是专为WAP浏览器识别而采取的书写格式。如果开发中用户想使用普通的浏览器,如IE浏览器来测试程序效果,则可在该语句的前面加上双斜线(//),格式为:

// header("Content-type: text/vnd.wap.wml");

这样,基于PC的浏览器将忽略程序中无法理解的WML标签,这时当前的程序实际上成为了HTML页面。当想在WAP设备或者模拟器上测试的时候,只需要去掉“//”,当前页面就会自动变成WML页面。

很多朋友都是用js来实现级联菜单了,那样有一个不好就是更新可能要修改源码,现在提供的这款ajax+php是一个实时的,不好之处在于耗费服务器资源了。

main.php
<script language="javascript"" width=100% src="initajax.js"></script><!--InitAjax()-->
<script>
<!--

function getoption(select1,target)
{
    if(select1.value!=0){
        //select1是提交数据的来源的select菜单名
        var url = "getoption.php?pid="+select1.value;//取得xml的url
        //alert(url);
        var ajax = InitAjax();
        var i = 0;
        ajax.open("GET", url, true);
        ajax.onreadystatechange = function() {
            //如果执行是状态正常,那么就把返回的内容赋值给指定的地方
            if (ajax.readyState == 4 && ajax.status == 200) {
                var obj = ajax.responseXML;
                var properties = obj.getElementsByTagName("property");
                var name,value;
                target.options.length = 1;
                for (var i=0,x=1;i<properties.length;i++,x++) {
                    name = properties[i].getElementsByTagName("name")[0].firstChild.nodeValue;
                    value = properties[i].getElementsByTagName("value")[0].firstChild.nodeValue;
                    target.options[x] = new Option();
                    target.options[x].text = name;
                    target.options[x].value = value;
                }
            }
        }
        ajax.send(null);
    }
}


<form method="post" name="form" action="index.php">
<select name="level1" onchange="getoption(document.form.level1,document.form.level2);"/>
<option selected="ture" value="0">===选择===</option>
<?
if ($nrows>0){
    for ($i=0;$i<$nrows;$i++){
        echo "<option value="{$results[ID][$i]}">{$results[NAME][$i]}</option>";
    }
}
?>
</select>
<select name="level2" onchange="getoption(document.form.level2,document.form.level3);">
<option selected="ture" value="0">===选择===</option>
</select>

iniajax.js:
function InitAjax()
{
    var ajax=false;
    try {
        ajax = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
        try {
            ajax = new ActiveXObject("Microsoft.XMLHTTP");
        } catch (E) {
            ajax = false;
        }
    }
    if (!ajax && typeof XMLHttpRequest!='undefined') {
        ajax = new XMLHttpRequest();
    }
    return ajax;
}

getoption.php:
<?php
if($pid=$_GET["pid"])
{
    header("Content-type: text/xml;charset=GB2312");
    echo "<?xml version="1.0" encoding="GB2312"?>";
    include("./oracle.inc");
    $sql="select * from AJAXTEST where PARENTID = $pid";
    //echo $sql;
    $stmt=ociparse($handle,$sql);
    ociexecute($stmt);
    ocicommit($handle);
    ocilogoff();
    $nrows=ocifetchstatement($stmt,$results);
    echo "<properties>";
    //echo "<row>{$nrows}</row>";
    for ($i=0;$i<$nrows;$i++){
    echo "<property>";
    echo "<value>{$results[ID][$i]}</value>";
    echo "<name>{$results[NAME][$i]}</name>";
    echo "</property>";
    }
    echo "</properties>";
}
?>

标签:[!--infotagslink--]

您可能感兴趣的文章: