2013年7月28日星期日

【转】PHP二维码生成的方法(google APi,PHP类库,libqrencode等)

===============================================PHP使用方法==================================================

1、用google 开放API 完成

  1. $urlToEncode="name:刘昕明,phone:18792448443";  
  2. generateQRfromGoogle($urlToEncode);  
  3. /** 
  4.  * google api 二维码生成【QRcode可以存储最多4296个字母数字类型的任意文本,具体可以查看二维码数据格式】 
  5.  * @param string $chl 二维码包含的信息,可以是数字、字符、二进制信息、汉字。不能混合数据类型,数据必须经过UTF-8 URL-encoded.如果需要传递的信息超过2K个字节,请使用POST方式 
  6.  * @param int $widhtHeight 生成二维码的尺寸设置 
  7.  * @param string $EC_level 可选纠错级别,QR码支持四个等级纠错,用来恢复丢失的、读错的、模糊的、数据。 
  8.  *                         L-默认:可以识别已损失的7%的数据 
  9.  *                         M-可以识别已损失15%的数据 
  10.  *                         Q-可以识别已损失25%的数据 
  11.  *                         H-可以识别已损失30%的数据 
  12.  * @param int $margin 生成的二维码离图片边框的距离 
  13.  */  
  14. function generateQRfromGoogle($chl,$widhtHeight ='150',$EC_level='L',$margin='0')  
  15. {  
  16.     $chl = urlencode($chl);  
  17.     echo '<img src="http://chart.apis.google.com/chart?chs='.$widhtHeight.'x'.$widhtHeight.'&cht=qr&chld='.$EC_level.'|'.$margin.'&chl='.$chl.'" alt="QR code" widhtHeight="'.$widhtHeight.'" widhtHeight="'.$widhtHeight.'"/>';  
  18. }  


更详细的可参看百度文库:http://wenku.baidu.com/view/b2a6ffc60c22590102029dae.html


2、php类库PHP QR Code

PHP QR Code is open source (LGPL) library for generating QR Code,
2-dimensional barcode. Based on libqrencode C library,
provides API for creating QR Code barcode images (PNG, JPEG thanks to GD2).
Implemented purely in PHP, with no external dependencies (except GD2 if needed).

地址:http://phpqrcode.sourceforge.net/
下载:http://sourceforge.net/projects/phpqrcode/


3.libqrencode

地址:http://fukuchi.org/works/qrencode/index.en.html
php支持请参考:http://hirokawa.netflowers.jp/entry/4900/


4.QRcode Perl CGI & PHP scripts
地址:http://www.swetake.com/qr/qr_cgi.html

PS:由于时间关系,本人只测试了 google 开放API 正常。其他的可以自己测试。

===============================================了解下二维码的原理==================================================

      二维码(2-dimensional bar code),是用某种特定的几何图形按照一定规律在平面分布的黑白相间的图形记录数据符合信息的。

     常用到的码制有:Data Matrix , Maxi Code , Aztec , QR Code , Vericode , PDF417 , Ultracode , Code 49 , Code 16K等

     ①:堆叠式/行排式二维条码,如,Code 16K、Code 49、PDF417(如下图)等

    ②:矩阵式二维码,最流行莫过于QR CODE

             二维码存储的数据量更大;可以包含数字、字符,及中文文本等混合内容;有一定的容错性(在部分损坏以后可以正常读取);空间利用率高等。

     ③:QR CODE 介绍
     

如上图时一个qrcode的基本结构,其中:
位置探测图形、位置探测图形分隔符、定位图形:用于对二维码的定位,对每个QR码来说,位置都是固定存在的,只是大小规格会有所差异;
校正图形:规格确定,校正图形的数量和位置也就确定了;
格式信息:表示改二维码的纠错级别,分为L、M、Q、H;

版本信息:即二维码的规格,QR码符号共有40种规格的矩阵(一般为黑白色),从21x21(版本1),到177x177(版本40),每一版本符号比前一版本 每边增加4个模块。
数据和纠错码字:实际保存的二维码信息,和纠错码字(用于修正二维码损坏带来的错误)。

简要的编码过程:
    1. 数据分析:确定编码的字符类型,按相应的字符集转换成符号字符; 选择纠错等级,在规格一定的条件下,纠错等级越高其真实数据的容量越小。

    2. 数据编码:将数据字符转换为位流,每8位一个码字,整体构成一个数据的码字序列。其实知道这个数据码字序列就知道了二维码的数据内容。


 

 
 
            数据可以按照一种模式进行编码,以便进行更高效的解码,例如:对数据:01234567编码(版本1-H),
            1)分组:012 345 67
             2)转成二进制:012→0000001100
                                                   345→0101011001
                                                    67 →1000011
              3)转成序列:0000001100 0101011001 1000011
              4)字符数 转成二进制:8→0000001000
              5)加入模式指示符(上图数字)0001:0001 0000001000 0000001100 0101011001 1000011
           对于字母、中文、日文等只是分组的方式、模式等内容有所区别。基本方法是一致的

    3. 纠错编码:按需要将上面的码字序列分块,并根据纠错等级和分块的码字,产生纠错码字,并把纠错码字加入到数据码字序列后面,成为一个新的序列。
             

 
        在二维码规格和纠错等级确定的情况下,其实它所能容纳的码字总数和纠错码字数也就确定了,比如:版本10,纠错等级时H时,总共能容纳346个码字,其中224个纠错码字。
        就是说二维码区域中大约1/3的码字时冗余的。对于这224个纠错码字,它能够纠正112个替代错误(如黑白颠倒)或者224个据读错误(无法读到或者无法译码),
        这样纠错容量为:112/346=32.4%
       
    4. 构造最终数据信息:在规格确定的条件下,将上面产生的序列按次序放如分块中
        按规定把数据分块,然后对每一块进行计算,得出相应的纠错码字区块,把纠错码字区块 按顺序构成一个序列,添加到原先的数据码字序列后面。
        如:D1, D12, D23, D35, D2, D13, D24, D36, ... D11, D22, D33, D45, D34, D46, E1, E23,E45, E67, E2, E24, E46, E68,...

构造矩阵:将探测图形、分隔符、定位图形、校正图形和码字模块放入矩阵中。
         

 
        
         把上面的完整序列填充到相应规格的二维码矩阵的区域中


    6. 掩摸:将掩摸图形用于符号的编码区域,使得二维码图形中的深色和浅色(黑色和白色)区域能够比率最优的分布。
             一个算法,不研究了,有兴趣的同学可以继续。
    7. 格式和版本信息:生成格式和版本信息放入相应区域内。
        版本7-40都包含了版本信息,没有版本信息的全为0。二维码上两个位置包含了版本信息,它们是冗余的。
        版本信息共18位,6X3的矩阵,其中6位时数据为,如版本号8,数据位的信息时 001000,后面的12位是纠错位。

摘自:http://blog.csdn.net/grassroots2011/article/details/7910975

【转】php生成二维码的类库PHP QR Code的使用介绍

二维码就是用在平面上用特定的几何图形记录数据信息的,QR码是常见的一种二维码。QR原理理解起来比较复杂,自己处理的话,估计得花不少时间。这里推荐一个生成QR码的php类库PHP QR Code。这个我自己使用1年多了,没发现什么问题,分享给大家。

主页地址:http://phpqrcode.sourceforge.net/,站点里能直接下载源码,下载后解压到web目录,通过网页访问,就可以看到demo演示。

QR码

QR码

Data表示要记录的数据,如果是存储utf-8编码的中文,最多984个。
ECC表示纠错级别, 纠错级别越高,生成图片会越大。

L水平    7%的字码可被修正  M水平    15%的字码可被修正  Q水平    25%的字码可被修正  H水平    30%的字码可被修正

Size表示图片每个黑点的像素。

代码的调用范例:

include "qrlib.php";   QRcode::png($data, $filename, $errorCorrectionLevel, $matrixPointSize, $margin);   /*      $data 数据      $filename 保存的图片名称      $errorCorrectionLevel 错误处理级别      $matrixPointSize 每个黑点的像素      $margin 图片外围的白色边框像素  */

QR码详细原理可以参考QR维基百科,中文版介绍比较少,英文版介绍很全面,推荐看英文版的

摘自:http://www.2cto.com/kf/201212/178526.html

2013年7月21日星期日

【转】Bootstrap下拉菜单保持不触发

http://stackoverflow.com/questions/10480697/keep-bootstrap-dropdown-open-on-click

问题描述,在下拉菜单中,添加其他元素,例如,原文作者所述的<a>和我自己实际用到的<input>,如果不加处理的话,那么在点击需要操作的元素的时候,由于事件传播的原因将会出现下拉菜单也隐藏掉的情况。

解决方法

  $('.dropdown-menu a.removefromcart').click(function(e) {      e.stopPropagation();  });

指定要操作的元素的click事件停止传播

2

  $(function() {      $("ul.dropdown-menu").on("click", "[data-stopPropagation]", function(e) {          e.stopPropagation();      });  });
定义属性值data-stopPropagation的元素点击时停止传播事件

  <ul class="dropdown-menu">      <li>          <-- Do not close when clicking this link -->          <a href="#" data-stopPropagation="true">              ...          </a>      </li>      <li>          <-- Do not close when clicking this checkbox -->          <input type="checkbox" data-stopPropagation="true" ... >      </li>        <-- Do not close when clicking anything in this LI -->      <li data-stopPropagation="true">          ...      </li>  </ul>
之后需要时加上该属性即可。 

摘自:http://blog.csdn.net/mickey_miki/article/details/8276921

http://blog.sina.com.cn/s/blog_6eb3cfee01016a7m.html

2013年7月14日星期日

【转】windows 如何查看端口占用情况?

开始--运行--cmd 进入命令提示符 输入netstat -ano 即可看到所有连接的PID 之后在任务管理器中找到这个PID所对应的程序如果任务管理器中没有PID这一项,可以在任务管理器中选"查看"-"选择列" 

        经常,我们在启动应用的时候发现系统需要的端口被别的程序占用,如何知道谁占有了我们需要的端口,很多人都比较头疼,下面就介绍一种非常简单的方法,希望对大家有用 

假如我们需要确定谁占用了我们的9050端口 

1、Windows平台 
在windows命令行窗口下执行: 
1.查看所有的端口占用情况

C:\>netstat -ano

  协议    本地地址                     外部地址               状态                   PID

  TCP    127.0.0.1:1434         0.0.0.0:0              LISTENING       3236
  TCP    127.0.0.1:5679         0.0.0.0:0              LISTENING       4168
  TCP    127.0.0.1:7438         0.0.0.0:0              LISTENING       4168
  TCP    127.0.0.1:8015         0.0.0.0:0              LISTENING       1456
  TCP    192.168.3.230:139      0.0.0.0:0              LISTENING       4
  TCP    192.168.3.230:1957     220.181.31.225:443     ESTABLISHED     3068
  TCP    192.168.3.230:2020     183.62.96.189:1522     ESTABLISHED     1456
  TCP    192.168.3.230:2927     117.79.91.18:80        ESTABLISHED     4732
  TCP    192.168.3.230:2929     117.79.91.18:80        ESTABLISHED     4732
  TCP    192.168.3.230:2930     117.79.91.18:80        ESTABLISHED     4732
  TCP    192.168.3.230:2931     117.79.91.18:80        ESTABLISHED     4732

 

2.查看指定端口的占用情况
C:\>netstat -aon|findstr "9050"

  协议    本地地址                     外部地址               状态                   PID

  TCP    127.0.0.1:9050         0.0.0.0:0              LISTENING       2016

P: 看到了吗,端口被进程号为2016的进程占用,继续执行下面命令: (也可以去任务管理器中查看pid对应的进程)

3.查看PID对应的进程
C:\>tasklist|findstr "2016"

 映像名称                       PID 会话名              会话#       内存使用
 ========================= ======== ================
  tor.exe                     2016 Console                 0     16,064 K 

P:很清楚吧,tor占用了你的端口。

 

4.结束该进程

C:\>taskkill /f /t /im tor.exe

其他不懂的用 help吧~

摘自:http://my.oschina.net/zhk/blog/124075

【转】解决Xampp端口占用问题

今天同事突然说xampp启动不了!我检查发现是apache启动不了,而mysql是正常的!

1、启动xampp目录下的apache_start.bat

    然后从控制台返回的结果看到是443端口被占用了;

    (443端口即网页浏览端口,主要是用于HTTPS服务,是提供加密和通过安全端口传输的另一种HTTP。)

2、检查占用端口的程序

    运行 - CMD 输入命令 netstat -ano

    然后从local Address列找出占用端口程序的PID(端口ID)

3、在任务管理器中找出占用端口程序的PID

    (PS:查看PID的方法,查看-选择列PID(进程标识符))

    然后找出相对应PID的进程程序;

最后结果发现是因为新安装VM虚拟系统软件占用SSL的443端口,为了不改变它原来的配置,只好修改apache的SSL配置(httpd-ssl.conf),把 Listen 443 修改成4433 ,重启apache问题解决了!

摘自:http://my.oschina.net/Jacker/blog/99423