post xml 操作类

/**
	 * 返回解析后的xml为数组格式
	 * @author caihaibin
	 * @param  $url 提交的url
	 * @param  $data 提交的xml本体
	 * @param  $domtoxml 返回值是否做将xml转换为array
	 * @param  $checkxml 检查提交的xml格式
	 * @param  $replace_empty 将xml转换成单行
	 * @throws Exception
	 * @return mixed
	 */
	function postxml($url,$data,$domtoxml=true,$checkxml=false,$replace_empty=false){
		//过滤换行 必要可以开启调试
		if($replace_empty){
			$data=preg_replace('/(?<=>)([^<]*?)(?=<[/])/sm', '', $data);
			$data=preg_replace('/(?<=>)([s]+?)(?=<[^/])/sm', '', $data);
		}
		//检查dom
		if($checkxml){
			$res = @simplexml_load_string ( $data, NULL, LIBXML_NOCDATA );
			if (! $res) {
				throw new Exception("提交xml异常!");
			}
		}
		$header[] = "Content-type: application/xml";        //定义content-type为xml,注意是数组
		$ch = curl_init ($url);
		curl_setopt($ch, CURLOPT_URL, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
		curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
		curl_setopt($ch, CURLOPT_POST, 1);
		curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
		$response = curl_exec($ch);
		if(curl_errno($ch)){
			//print curl_error($ch);
		}
		curl_close($ch);
		if(!$domtoxml)
			return $response;
		$res = @simplexml_load_string ( $response, NULL, LIBXML_NOCDATA );
		if (! $res) {
			throw new Exception("解析xml异常!");
		}
		$res = json_decode ( json_encode ( $res ), true );
		if (! $res) {
			throw new Exception("解析json异常!");
		}
		return $res;
	}

转发请注明出处http://blog.martoo.cn
如有漏缺,请联系我 QQ 243008827

RSA 签名相关

php demo:

参考:

https://gist.github.com/winok/6153500

<?php 

## openssl genrsa -out key.pem 1024
## openssl rsa -in key.pem -pubout -outform PEM -out pubkey.pem
## openssl rsa -in key.pem -pubout -outform DER -out pubkey.der

function hextobin($hexstr) 
{ 
	$n = strlen($hexstr); 
	$sbin="";   
	$i=0; 
	while($i<$n) 
	{       
		$a =substr($hexstr,$i,2);           
		$c = pack("H*",$a); 
		if ($i==0){$sbin=$c;} 
		else {$sbin.=$c;} 
		$i+=2; 
	} 
	return $sbin; 
} 

function buildSign($toSign) {

	$signature = null;
	$priv_key = file_get_contents('key.pem');

	$pkeyid = openssl_get_privatekey($priv_key);
	openssl_sign($toSign, $signature, $pkeyid);
	openssl_free_key($pkeyid);

	$hex = bin2hex( $signature );
	return $hex;
}

function verifySign($sign, $toSign) {

	$signdata = hextobin($sign);

	$ret = openssl_verify($toSign, $signdata, file_get_contents('pubkey.pem'));
	return $ret;	
}

function verifySign_der($sign, $toSign) {

	$signdata = hextobin($sign);

	$der = file_get_contents('pubkey.der');
	$pem = "-----BEGIN PUBLIC KEY-----n";
	$str = base64_encode($der);
	$pem .= wordwrap($str, 64, "n", true)."n";	
	$pem .= "-----END PUBLIC KEY-----n";	

	$ret = openssl_verify($toSign, $signdata, $pem);
	return $ret;	
}

$sign = buildSign('test1');
if (verifySign($sign, 'test1') == 1)
	echo "successn";
if (verifySign_der($sign, 'test1') == 1)
	echo "successn";

echo "n";

$sign = buildSign('test1');
if (verifySign($sign, 'test2') == 0)
	echo "successn";
if (verifySign_der($sign, 'test2') == 0)
	echo "successn";

?>

 

相关格式参考:

http://www.cnblogs.com/xiaoweiyu/archive/2011/12/26/2302297.html

 

注意:

1.相关参数(如:openssl pkcs8 -topk8 -inform PEM -outform DER -in key.pem -out key.der -nocrypt 里的最后一个参数 )

2.公钥和私钥所用命令不同

3.通常二进制der格式通过 base64 或十六进制表示。先还原,再转换格式。

转发请注明出处http://blog.martoo.cn
如有漏缺,请联系我 QQ 243008827

mysql 表结构+数据 转 oracle

一、命令操作(没有试过)

参考:

http://stackoverflow.com/questions/8395612/how-to-convert-a-mysql-database-to-an-oracle-database

官方参考:

https://dev.mysql.com/doc/refman/5.1/en/mysqldump.html

 

 

二、工具操作(只考虑短期简单的):

参考:

Convert Mysql to Oracle

http://dbmover.com/download/mysqltooracle_cn.zip

需要注意:

1. 特殊类型会导致数据不出来,如(tinyint)

2.主键会丢失,需要重新设置

3. 特别需要留意大小写的问题.oracle 默认是将字段转换为大写。如果有小写的字段,需要用”包起来。mysql默认是大小兼容.

4.特殊字段需要注意 id ,uid 这类会识别有问题。不用“”包括会出问题。

注:导出数据表,用eclipse之类的快速转大写工具,将表结构转成大写(字段,以及相关主键关联:以navicat为例,表结构在各自数前。主键关联在最底部),再回导。

三、相关比对和注意事项(长期处理的,多了解点总是好的。)

http://www.cnblogs.com/yan5lang/archive/2010/03/08/1680649.html

 

转发请注明出处http://blog.martoo.cn
如有漏缺,请联系我 QQ 243008827

 

yii 跨mysql & oracle 实现同表数据同步解决方案

只限数据,不涉及其它。

oracle 数据库ar使用

参考:http://blog.martoo.cn/?p=459

oracle 编码注意事项

编码需要在connectionString 后指定 .charset

直接配置charset 无效..

		'odb'=>array(
			'class'=>'CDbConnection',
            'connectionString'=>'oci:dbname=//xxxxxxx/xxx;charset=utf8;',
            'username'=>'xxxx',
            'password'=>'xxxx',
         	'charset'=>'utf8',
            'tablePrefix'=>'xxx_'
		),

 

需要明白一个点。任何业务流程操作后,最终只在数据这块同步。

所以yii 原ar的修改只需要在save 动作之后,同步数据。

即afterSave 事件处理.

demo:

	
	public function afterSave(){
		if($this->hasEventHandler('onAfterSave'))
			$this->onAfterSave(new CEvent($this));
		$omodel= OUser::model()->findByPk($this->getPrimaryKey());
		if(!$omodel){
			$omodel=new OUser();
		}else{
		}
                //因为大小写问题。这里将key $item=array_change_key_case($this->getAttributes(false), CASE_UPPER); 进行该处理
		$omodel->setAttributes($this->getAttributes(false),false);
		$omodel->save();
	}

 

补充yii 相关版本插入异常问题:

QQ Photo20140318091839

 

转发请注明出处http://blog.martoo.cn
如有漏缺,请联系我 QQ 243008827

Navicat连接Oracle数据库失败,提示“unsupported server charset ZHS16GBK”的解决方法

参考:http://hi.baidu.com/nju520/item/da42f6dfce72e217e1f46f17

补充,需要将新版本目录完全覆盖。只替换相关dll文件还是会有问题。

当前版本为 navicat 11.2

转发请注明出处http://blog.martoo.cn
如有漏缺,请联系我 QQ 243008827

CURL 文件上传兼容 php5.4-5.5

	public function getCurlValue($filename, $contentType) {
		// PHP 5.5 introduced a CurlFile object that deprecates the old
		// @filename syntax
		// See: https://wiki.php.net/rfc/curl-file-upload
		if (function_exists ( 'curl_file_create' )) {
			$filename = preg_replace ( '/^@/', '', $filename );
			return new CurlFile ( $filename, $contentType, basename($filename) );
			// curl_file_create ( $filename, $contentType, basename($filename));
		}
		// Use the old style if using an older version of PHP
		if (! preg_match ( '/^@/', $filename ))
			$value = "@" . $filename;
		else
			$value = $filename;
		return $value;
	}

 

curl_setopt ( $ch, CURLOPT_POSTFIELDS, $data ); // POST提交的数据包

 

if ($data) {
			foreach ( $data as $key => $file ) {
				$data [$key] = $this->getCurlValue ( $file, $this->get_mime ( $file ) );
			}
		}

 

	function get_mime($file) {
		$ext = pathinfo ( $file, PATHINFO_EXTENSION );
		if ($ext == '')
			return '';
		$mime_types = include 'mime.class.php';
		return isset ( $mime_types [$ext] ) ? $mime_types [$ext] : '';
	}

 

<?php
/**
 * MIME types.
 *
 * This file contains most commonly used MIME types
 * according to file extension names.
 *
 * @author Qiang Xue <qiang.xue@gmail.com>
 * @link http://www.yiiframework.com/
 * @copyright Copyright &copy; 2008-2011 Yii Software LLC
 * @license http://www.yiiframework.com/license/
 * @version $Id: mimeTypes.php 3181 2011-04-15 01:26:52Z alexander.makarow $
 */

return array(
	'ai'=>'application/postscript',
	'aif'=>'audio/x-aiff',
	'aifc'=>'audio/x-aiff',
	'aiff'=>'audio/x-aiff',
	'asc'=>'text/plain',
	'au'=>'audio/basic',
	'avi'=>'video/x-msvideo',
	'bcpio'=>'application/x-bcpio',
	'bin'=>'application/octet-stream',
	'bmp'=>'image/bmp',
	'c'=>'text/plain',
	'cc'=>'text/plain',
	'ccad'=>'application/clariscad',
	'cdf'=>'application/x-netcdf',
	'class'=>'application/octet-stream',
	'cpio'=>'application/x-cpio',
	'cpt'=>'application/mac-compactpro',
	'csh'=>'application/x-csh',
	'css'=>'text/css',
	'dcr'=>'application/x-director',
	'dir'=>'application/x-director',
	'dms'=>'application/octet-stream',
	'doc'=>'application/msword',
	'docx'=>'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
	'xlsx'=>'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
	'pptx'=>'application/vnd.openxmlformats-officedocument.presentationml.presentation',
	'dotx'=>'application/vnd.openxmlformats-officedocument.wordprocessingml.template',
	'drw'=>'application/drafting',
	'dvi'=>'application/x-dvi',
	'dwg'=>'application/acad',
	'dxf'=>'application/dxf',
	'dxr'=>'application/x-director',
	'eps'=>'application/postscript',
	'etx'=>'text/x-setext',
	'exe'=>'application/octet-stream',
	'ez'=>'application/andrew-inset',
	'f'=>'text/plain',
	'f90'=>'text/plain',
	'fli'=>'video/x-fli',
	'flv'=>'video/x-flv',
	'gif'=>'image/gif',
	'gtar'=>'application/x-gtar',
	'gz'=>'application/x-gzip',
	'h'=>'text/plain',
	'hdf'=>'application/x-hdf',
	'hh'=>'text/plain',
	'hqx'=>'application/mac-binhex40',
	'htm'=>'text/html',
	'html'=>'text/html',
	'ice'=>'x-conference/x-cooltalk',
	'ief'=>'image/ief',
	'iges'=>'model/iges',
	'igs'=>'model/iges',
	'ips'=>'application/x-ipscript',
	'ipx'=>'application/x-ipix',
	'jpe'=>'image/jpeg',
	'jpeg'=>'image/jpeg',
	'jpg'=>'image/jpeg',
	'js'=>'application/x-javascript',
	'kar'=>'audio/midi',
	'latex'=>'application/x-latex',
	'lha'=>'application/octet-stream',
	'lsp'=>'application/x-lisp',
	'lzh'=>'application/octet-stream',
	'm'=>'text/plain',
	'man'=>'application/x-troff-man',
	'me'=>'application/x-troff-me',
	'mesh'=>'model/mesh',
	'mid'=>'audio/midi',
	'midi'=>'audio/midi',
	'mif'=>'application/vnd.mif',
	'mime'=>'www/mime',
	'mov'=>'video/quicktime',
	'movie'=>'video/x-sgi-movie',
	'mp2'=>'audio/mpeg',
	'mp3'=>'audio/mpeg',
	'mpe'=>'video/mpeg',
	'mpeg'=>'video/mpeg',
	'mpg'=>'video/mpeg',
	'mpga'=>'audio/mpeg',
	'ms'=>'application/x-troff-ms',
	'msh'=>'model/mesh',
	'nc'=>'application/x-netcdf',
	'oda'=>'application/oda',
	'pbm'=>'image/x-portable-bitmap',
	'pdb'=>'chemical/x-pdb',
	'pdf'=>'application/pdf',
	'pgm'=>'image/x-portable-graymap',
	'pgn'=>'application/x-chess-pgn',
	'png'=>'image/png',
	'pnm'=>'image/x-portable-anymap',
	'pot'=>'application/mspowerpoint',
	'ppm'=>'image/x-portable-pixmap',
	'pps'=>'application/mspowerpoint',
	'ppt'=>'application/mspowerpoint',
	'ppz'=>'application/mspowerpoint',
	'pre'=>'application/x-freelance',
	'prt'=>'application/pro_eng',
	'ps'=>'application/postscript',
	'qt'=>'video/quicktime',
	'ra'=>'audio/x-realaudio',
	'ram'=>'audio/x-pn-realaudio',
	'ras'=>'image/cmu-raster',
	'rgb'=>'image/x-rgb',
	'rm'=>'audio/x-pn-realaudio',
	'roff'=>'application/x-troff',
	'rpm'=>'audio/x-pn-realaudio-plugin',
	'rtf'=>'text/rtf',
	'rtx'=>'text/richtext',
	'scm'=>'application/x-lotusscreencam',
	'set'=>'application/set',
	'sgm'=>'text/sgml',
	'sgml'=>'text/sgml',
	'sh'=>'application/x-sh',
	'shar'=>'application/x-shar',
	'silo'=>'model/mesh',
	'sit'=>'application/x-stuffit',
	'skd'=>'application/x-koan',
	'skm'=>'application/x-koan',
	'skp'=>'application/x-koan',
	'skt'=>'application/x-koan',
	'smi'=>'application/smil',
	'smil'=>'application/smil',
	'snd'=>'audio/basic',
	'sol'=>'application/solids',
	'spl'=>'application/x-futuresplash',
	'src'=>'application/x-wais-source',
	'step'=>'application/STEP',
	'stl'=>'application/SLA',
	'stp'=>'application/STEP',
	'sv4cpio'=>'application/x-sv4cpio',
	'sv4crc'=>'application/x-sv4crc',
	'swf'=>'application/x-shockwave-flash',
	't'=>'application/x-troff',
	'tar'=>'application/x-tar',
	'tcl'=>'application/x-tcl',
	'tex'=>'application/x-tex',
	'texi'=>'application/x-texinfo',
	'texinfo'=>'application/x-texinfo',
	'tif'=>'image/tiff',
	'tiff'=>'image/tiff',
	'tr'=>'application/x-troff',
	'tsi'=>'audio/TSP-audio',
	'tsp'=>'application/dsptype',
	'tsv'=>'text/tab-separated-values',
	'txt'=>'text/plain',
	'unv'=>'application/i-deas',
	'ustar'=>'application/x-ustar',
	'vcd'=>'application/x-cdlink',
	'vda'=>'application/vda',
	'viv'=>'video/vnd.vivo',
	'vivo'=>'video/vnd.vivo',
	'vrml'=>'model/vrml',
	'wav'=>'audio/x-wav',
	'wrl'=>'model/vrml',
	'xbm'=>'image/x-xbitmap',
	'xlc'=>'application/vnd.ms-excel',
	'xll'=>'application/vnd.ms-excel',
	'xlm'=>'application/vnd.ms-excel',
	'xls'=>'application/vnd.ms-excel',
	'xlw'=>'application/vnd.ms-excel',
	'xml'=>'application/xml',
	'xpm'=>'image/x-xpixmap',
	'xwd'=>'image/x-xwindowdump',
	'xyz'=>'chemical/x-pdb',
	'zip'=>'application/zip',
);

转发请注明出处http://blog.martoo.cn
如有漏缺,请联系我 QQ 243008827

phpexcel 生成Excel5 不标准问题处理方法

支付宝批量付款的excel5 文件格式不支持兼容模式文件。

需要标准excel 5 文件。

phpexcel 生成文件不规范,无法识别。

尝试过的解决方式:

html,xml,class.writeexcel ,phpexcel 老版本 等均无法识别。

通过打印属性。做相关修改和调整,还是失败 biff之类的调整。涉及的文件编码和处理方式太细,不了解的人无法做完全调整。

解决方式。

使用phpexcel生成 xlsx文档。使用 openoffice进行文档转换,转成xls格式。测试成功。

转发请注明出处http://blog.martoo.cn
如有漏缺,请联系我 QQ 243008827