今天做项目时要用到生成二维码这个功能,就研究了一下二维码。二维码的原理可以先看看,理解理解>>环境支持:gd库、文件夹可写权限
1、原版的phpqrcode下载地址>>
下载后,我测试了一下,发现只需要其中一个文件就可以完成本功能了,如下图所示文件:
将phpqrcode.php重命名为符合thinkphp文件规则的文件名class.phpqrcode.php,放置到:thinkphp/library/vendor/phpqrcode/class.phpqrcode.php (注意大小写哦)
注意:现在放置的是thinkphp默认的第三方类库目录,如果在index.php定义了如define('vendor_path',app_path.'common/vendor/'); 那么文件放置的路径要与之相同,免得出现class 'qrcode' not found情况。
2、创建用户自定义函数文件application/home/common/function.php,放置如下函数:/**
* 功能:生成二维码
* @param string $qr_data 手机扫描后要跳转的网址
* @param string $qr_level 默认纠错比例 分为l、m、q、h四个等级,h代表最高纠错能力
* @param string $qr_size 二维码图大小,1-10可选,数字越大图片尺寸越大
* @param string $save_path 图片存储路径
* @param string $save_prefix 图片名称前缀
*/
function createqrcode($save_path,$qr_data='php qr code :)',$qr_level='l',$qr_size=4,$save_prefix='qrcode'){
if(!isset($save_path)) return '';
//设置生成png图片的路径
$png_temp_dir = & $save_path;
//导入二维码核心程序
vendor('phpqrcode.class#phpqrcode'); //注意这里的大小写哦,不然会出现找不到类,phpqrcode是文件夹名字,class#phpqrcode就代表class.phpqrcode.php文件名
//检测并创建生成文件夹
if (!file_exists($png_temp_dir)){
mkdir($png_temp_dir);
}
$filename = $png_temp_dir.'test.png';
$errorcorrectionlevel = 'l';
if (isset($qr_level) && in_array($qr_level, array('l','m','q','h'))){
$errorcorrectionlevel = & $qr_level;
}
$matrixpointsize = 4;
if (isset($qr_size)){
$matrixpointsize = & min(max((int)$qr_size, 1), 10);
}
if (isset($qr_data)) {
if (trim($qr_data) == ''){
die('data cannot be empty!');
}
//生成文件名 文件路径+图片名字前缀+md5(名称)+.png
$filename = $png_temp_dir.$save_prefix.md5($qr_data.'|'.$errorcorrectionlevel.'|'.$matrixpointsize).'.png';
//开始生成
qrcode::png($qr_data, $filename, $errorcorrectionlevel, $matrixpointsize, 2);
} else {
//默认生成
qrcode::png('php qr code :)', $filename, $errorcorrectionlevel, $matrixpointsize, 2);
}
if(file_exists($png_temp_dir.basename($filename)))
return basename($filename);
else
return false;
}3、开始调用,假设通过网址/?m=home&c=index&a=qrcode访问,那我们相应的在application/home/controller/indexcontroller.class.php文件里加入方法,如下:>
upload.zip ( 22.16 kb 下载:375 次 )
ad:真正免费,域名+虚机+企业邮箱=0元
