jquery 实现复制(ps:兼容各种端)

2019-03-30 14:49:05 阅读:2225

版权唯一所有人-->赵伟 复制按钮 我是一段优美的文字 复制按钮 复制按钮 $(document).ready(function(){ varclipboard=newClipboard('#copy_btn'); clipboard.on('success',function(e){ alert("复制成功",1500); e.clearSelection(); console.log(e.clearSelection); }); }); js插件clipboard.js/*! *clipboard.jsv1.5.12 *https://zenorocha.github.io/clipboard.js * *LicensedMIT©ZenoRocha */ ! function(t){ if("object"==typeofexports&&"undefined"!=typeofmodule)module.exports=t(); elseif("function"==typeofdefine&&define.amd)define([],t); else{ vare; e="undefined"!=typeofwindow?window:"undefined"!=typeofglobal?global:"undefined"!=typeofself?self:this, e.Clipboard=t() } }(function(){ vart,e,n; returnfunctiont(e,n,o){ functioni(a,c){ if(!n[a]){ if(!e[a]){ vars="function"==typeofrequire&&require; if(!c&&s)returns(a,!0); if(r)returnr(a,!0); varl=newError("Cannotfindmodule'"+a+"'"); throwl.code="MODULE_NOT_FOUND", l } varu=n[a]={ exports:{} }; e[a][0].call(u.exports,function(t){ varn=e[a][1][t]; returni(n?n:t) },u,u.exports,t,e,n,o) } returnn[a].exports } for(varr="function"==typeofrequire&&require,a=0;ar;r++)o[r].fn!==e&&o[r].fn._!==e&&i.push(o[r]); returni.length?n[t]=i:deleten[t], this } }, e.exports=o }, {}], 8:[function(e,n,o){ ! function(i,r){ if("function"==typeoft&&t.amd)t(["module","select"],r); elseif("undefined"!=typeofo)r(n,e("select")); else{ vara={ exports:{} }; r(a,i.select), i.clipboardAction=a.exports } }(this,function(t,e){ "usestrict"; functionn(t){ returnt&&t.__esModule?t:{ "default":t } } functiono(t,e){ if(!(tinstanceofe))thrownewTypeError("Cannotcallaclassasafunction") } vari=n(e), r="function"==typeofSymbol&&"symbol"==typeofSymbol.iterator? function(t){ returntypeoft }:function(t){ returnt&&"function"==typeofSymbol&&t.constructor===Symbol?"symbol":typeoft }, a=function(){ functiont(t,e){ for(varn=0;n

Linux文件保护禁止修改、删除、移动文件等,使用

2019-03-29 09:34:45 阅读:3703

chattr+i/etc/passwd给passwd加锁。chattr-i/etc/passwd给passwd解锁。lsattr/etc/passwd查看passwd文件状态具体的其他命令详解看下面:不让用户修改、删除文件等,使用chattr保护chattr命令的用法:chattr[-RV][-vversion][mode]files…最关键的是在[mode]部分,[mode]部分是由+-=和[ASacDdIijsTtu]这些字符组合的,这部分是用来控制文件的属性。+:在原有参数设定基础上,追加参数。-:在原有参数设定基础上,移除参数。=:更新为指定参数设定。A:文件或目录的atime(accesstime)不可被修改(modified),可以有效预防例如手提电脑磁盘I/O错误的发生。S:硬盘I/O同步选项,功能类似sync。a:即append,设定该参数后,只能向文件中添加数据,而不能删除,多用于服务器日志文件安全,只有root才能设定这个属性。c:即compresse,设定文件是否经压缩后再存储。读取时需要经过自动解压操作。d:即nodump,设定文件不能成为dump程序的备份目标。i:设定文件不能被删除、改名、设定链接关系,同时不能写入或新增内容。i参数对于文件系统的安全设置有很大帮助。j:即journal,设定此参数使得当通过mount参数:data=ordered或者data=writeback挂载的文件系统,文件在写入时会先被记录(在journal中)。如果filesystem被设定参数为data=journal,则该参数自动失效。s:保密性地删除文件或目录,即硬盘空间被全部收回。u:与s相反,当设定为u时,数据内容其实还存在磁盘中,可以用于undeletion.各参数选项中常用到的是a和i。a选项强制只可添加不可删除,多用于日志系统的安全设定。而i是更为严格的安全设定,只有superuser(root)或具有CAP_LINUX_IMMUTABLE处理能力(标识)的进程能够施加该选项。[root@80uncle/]#chattr+i/etc/passwd[root@80uncle/]#chattr+i/etc/shadow[root@80uncle/]#chattr+i/etc/group[root@80uncle/]#chattr+i/etc/gshadow[root@80uncle~]#lsattr/etc/group/etc/passwd/etc/shadow/etc/gshadow—-i——–e-/etc/group—-i——–e-/etc/passwd—-i——–e-/etc/shadow—-i——–e-/etc/gshadow如果需要修改密码,执行chattr-i消除权限[root@80uncle/]#chattr-i/etc/passwd[root@80uncle/]#chattr-i/etc/shadow[root@80uncle/]#chattr-i/etc/group[root@80uncle/]#chattr-i/etc/gshadow[root@80uncle~]#lsattr/etc/group/etc/passwd/etc/shadow/etc/gshadow————-e-/etc/group————-e-/etc/passwd————-e-/etc/shadow————-e-/etc/gshadow改完权限和再修改文件就可以,修改完之后,再执行.[root@80uncle/]#chattr+i/etc/passwd[root@80uncle/]#chattr+i/etc/shadow[root@80uncle/]#chattr+i/etc/group[root@80uncle/]#chattr+i/etc/gshadow

CURL使用SSL证书访问HTTPS(错误码60)

2019-03-25 09:07:18 阅读:3085

在支付的交互过程中,安全绝对是需要考虑的重要因素之一。体现在对服务器交互数据的签名等环节,但有的时候为了能达到更高的安全级别,还需要用ssl证书,即web服务器有证书,浏览器客户端/请求端也需要安装证书来达到双向验证。比如请求下面的财付通支付网关,用户向商户账户支付金额,仅仅是需要检查签名就行了https://gw.tenpay.com/gateway/pay.htm但是在退款这一步要请求财付通退款接口时,不仅要验证签名,还要双向验证SSL证书,一旦让自己出钱的时候就变得抠门谨慎了https://mch.tenpay.com/refundapi/gateway/refund.xml这个接口就需要安装在开通服务之后第三方给我们发送的安全证书了。作为文件形式存在的证书一般有这几种格式:1.带有私钥的证书由PublicKeyCryptographyStandards#12,PKCS#12标准定义,包含了公钥和私钥的二进制格式的证书形式,以pfx作为证书文件后缀名。2.二进制编码的证书证书中没有私钥,DER编码二进制格式的证书文件,以cer作为证书文件后缀名。3.Base64编码的证书证书中没有私钥,BASE64编码格式的证书文件,也是以cer作为证书文件后缀名。由定义可以看出,只有pfx格式的数字证书是包含有私钥的,cer格式的数字证书里面只有公钥没有私钥。在pfx证书的导入过程中有一项是“标志此密钥是可导出的。这将您在稍候备份或传输密钥”。一般是不选中的,如果选中,别人就有机会备份你的密钥了。如果是不选中,其实密钥也导入了,只是不能再次被导出。这就保证了密钥的安全。如果导入过程中没有选中这一项,做证书备份时“导出私钥”这一项是灰色的,不能选。只能导出cer格式的公钥。如果导入时选中该项,则在导出时“导出私钥”这一项就是可选的。上图,如果要导出私钥(pfx),是需要输入密码的,这个密码就是对私钥再次加密,这样就保证了私钥的安全,别人即使拿到了你的证书备份(pfx),不知道加密私钥的密码,也是无法导入证书的。相反,如果只是导入导出cer格式的证书,是不会提示你输入密码的。因为公钥一般来说是对外公开的,不用加密由于php的curl只支持pem格式、der、eng格式,而之前生成的是p12的格式,所以需要转换一下PKCS#12到PEM的转换opensslpkcs12-nocerts-nodes-incert.p12-outprivate.pem验证opensslpkcs12-clcerts-nokeys-incert.p12-outcert.pemcurl请求部分代码/** *使用证书访问退款接口 * */ privatestaticfunction_postCert($url) { $ch=curl_init($url); curl_setopt($ch,CURLOPT_HEADER,0); curl_setopt($ch,CURLOPT_CUSTOMREQUEST,"GET"); curl_setopt($ch,CURLOPT_RETURNTRANSFER,true); curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,'2'); curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,'1'); curl_setopt($ch,CURLOPT_SSLCERT,WECHAT_CERT); curl_setopt($ch,CURLOPT_SSLCERTTYPE,'PEM'); curl_setopt($ch,CURLOPT_USERAGENT,$_SERVER['HTTP_USER_AGENT']); $response=curl_exec($ch); return$response; }参数释义:CURLOPT_TIMEOUT:超时时间CURLOPT_RETURNTRANSFER:是否要求返回数据CURLOPT_SSL_VERIFYPEER:是否检测服务器的证书是否由正规浏览器认证过的授权CA颁发的CURLOPT_SSL_VERIFYHOST:是否检测服务器的域名与证书上的是否一致CURLOPT_SSLCERTTYPE:证书类型,"PEM"(default),"DER",and"ENG".CURLOPT_SSLCERT:证书存放路径CURLOPT_SSLCERTPASSWD:证书密码CURLOPT_SSLKEYTYPE:私钥类型,"PEM"(default),"DER",and"ENG".CURLOPT_SSLKEY:私钥存放路径继续返回false让输出错误显示:PeercertificatecannotbeauthenticatedwithknownCAcertificates说对方的证书不能用已知的CA证书验证其实和使用curl访问一个意思➜Certificatecurl-vhttps://mch.tenpay.com *RebuiltURLto:https://mch.tenpay.com/ *HostnamewasNOTfoundinDNScache *Trying183.62.126.37... *Connectedtomch.tenpay.com(183.62.126.37)port443(#0) *successfullysetcertificateverifylocations: *CAfile:none CApath:/etc/ssl/certs *SSLv3,TLShandshake,Clienthello(1): *SSLv3,TLShandshake,Serverhello(2): *SSLv3,TLShandshake,CERT(11): *SSLv3,TLSalert,Serverhello(2): *SSLcertificateproblem:selfsignedcertificateincertificatechain *Closingconnection0 curl:(60)SSLcertificateproblem:selfsignedcertificateincertificatechain Moredetailshere:http://curl.haxx.se/docs/sslcerts.html curlperformsSSLcertificateverificationbydefault,usinga"bundle" ofCertificateAuthority(CA)publickeys(CAcerts).Ifthedefault bundlefileisn'tadequate,youcanspecifyanalternatefile usingthe--cacertoption. IfthisHTTPSserverusesacertificatesignedbyaCArepresentedin thebundle,thecertificateverificationprobablyfailedduetoa problemwiththecertificate(itmightbeexpired,orthenamemight notmatchthedomainnameintheURL). Ifyou'dliketoturnoffcurl'sverificationofthecertificate,use the-k(or--insecure)option.最后的一个解决方案curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);返回 UTF-8 1226251301 -1 88222013 [20921191]退款总金额超出交易金额[20150313174732-183] 010651C7B3906F2863B3B1D2FB63A571 1 MD5

PHP各种正则匹配

2019-03-12 15:13:20 阅读:2759

1.匹配手机号码$rule="/^((13[0-9])|147|(15[0-35-9])|180|182|(18[5-9]))[0-9]{8}$/A";2.匹配邮箱$zhengze='/^[a-zA-Z0-9][a-zA-Z0-9._-]*\@[a-zA-Z0-9]+\.[a-zA-Z0-9\.]+$/A';3.电话号码匹配$rule='/^(\(((010)|(021)|(0\d{3,4}))\)(?)([0-9]{7,8}))|((010|021|0\d{3,4}))([-]{1,2})([0-9]{7,8})$/A';4.匹配url$rule='/^(([a-zA-Z]+)(:\/\/))?([a-zA-Z]+)\.(\w+)\.([\w.]+)(\/([\w]+)\/?)*(\/[a-zA-Z0-9]+\.(\w+))*(\/([\w]+)\/?)*(\?(\w+=?[\w]*))*((&?\w+=?[\w]*))*$/';5.匹配身份证号$rule='/^(([0-9]{15})|([0-9]{18})|([0-9]{17}x))$/';6.匹配邮编$rule='/^[1-9]\d{5}$/';7.匹配ip$rule='/^((([1-9])|((0[1-9])|([1-9][0-9]))|((00[1-9])|(0[1-9][0-9])|((1[0-9]{2})|(2[0-4][0-9])|(25[0-5]))))\.)((([0-9]{1,2})|(([0-1][0-9]{2})|(2[0-4][0-9])|(25[0-5])))\.){2}(([1-9])|((0[1-9])|([1-9][0-9]))|(00[1-9])|(0[1-9][0-9])|((1[0-9]{2})|(2[0-4][0-9])|(25[0-5])))$/';8.匹配时间$rule='/^(([1-2][0-9]{3}-)((([1-9])|(0[1-9])|(1[0-2]))-)((([1-9])|(0[1-9])|([1-2][0-9])|(3[0-1]))))(((([0-9])|(([0-1][0-9])|(2[0-3]))):(([0-9])|([0-5][0-9]))(:(([0-9])|([0-5][0-9])))?))?$/';9.utf8下匹配中文$rule='/([\x{4e00}-\x{9fa5}]){1}/u';匹配中文字符的正则表达式:[\u4e00-\u9fa5]评注:匹配中文还真是个头疼的事,有了这个表达式就好办了匹配双字节字符(包括汉字在内):[^\x00-\xff]评注:可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)匹配空白行的正则表达式:\n\s*\r评注:可以用来删除空白行匹配HTML标记的正则表达式:]*>.*?|评注:网上流传的版本太糟糕,上面这个也仅仅能匹配部分,对于复杂的嵌套标记依旧无能为力匹配首尾空白字符的正则表达式:^\s*|\s*$评注:可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*评注:表单验证时很实用匹配网址URL的正则表达式:[a-zA-z]+://[^\s]*评注:网上流传的版本功能很有限,上面这个基本可以满足需求匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$评注:表单验证时很实用匹配国内电话号码:\d{3}-\d{8}|\d{4}-\d{7}评注:匹配形式如0511-4405222或021-87888822匹配腾讯QQ号:[1-9][0-9]{4,}评注:腾讯QQ号从10000开始匹配中国邮政编码:[1-9]\d{5}(?!\d)评注:中国邮政编码为6位数字匹配身份证:\d{15}|\d{18}评注:中国的身份证为15位或18位匹配ip地址:\d+\.\d+\.\d+\.\d+评注:提取ip地址时有用匹配特定数字:^[1-9]\d*$  //匹配正整数^-[1-9]\d*$ //匹配负整数^-?[1-9]\d*$  //匹配整数^[1-9]\d*|0$ //匹配非负整数(正整数+0)^-[1-9]\d*|0$  //匹配非正整数(负整数+0)^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$  //匹配正浮点数^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$ //匹配负浮点数^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$ //匹配浮点数^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$  //匹配非负浮点数(正浮点数+0)^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$  //匹配非正浮点数(负浮点数+0)评注:处理大量数据时有用,具体应用时注意修正匹配特定字符串:^[A-Za-z]+$  //匹配由26个英文字母组成的字符串^[A-Z]+$  //匹配由26个英文字母的大写组成的字符串^[a-z]+$  //匹配由26个英文字母的小写组成的字符串^[A-Za-z0-9]+$  //匹配由数字和26个英文字母组成的字符串^\w+$  //匹配由数字、26个英文字母或者下划线组成的字符串

上报错误