kk Blog —— 通用基础


date [-d @int|str] [+%s|"+%F %T"]
netstat -ltunp
sar -n DEV 1

PHPQRCode 二维码

https://www.thinkphp.cn/topic/57984.html

https://www.thinkphp.cn/code/7925.html

https://zhuanlan.zhihu.com/p/49489306?utm_id=0

https://sourceforge.net/projects/phpqrcode/files/

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
require_once "tools/phpqrcode/phpqrcode.php";

class Phpqrcode_Model extends CI_Model {

	function __construct()
	{
		parent::__construct();
	}

	public $upload_dir = "/var/www/html/downloads/";

	public function phpqrcode($data, $logo = "")
	{
		$data = "http://abc.xyz/iadsfnasfjasudsdfdmsfjajfwsfasfsafsafsdfsfsfasafsdfsdfsfsfsfsf";
		$logo = "/var/www/html/rs/images/login/logo192.png";

		$dt = date('Ymd_His_');
		$username = isset($_SESSION['username']) ? $_SESSION['username'] : '';
		$path = $this->upload_dir . $dt . $username . "/";
		if (!is_dir($path))
			mkdir($path);

		$fullpath = $path . $dt . 'qrcode.png';
		
		$object = new \QRcode();
		$errorCorrectionLevel = 'Q';      // 容错级别 L 7%, M 15%, Q 25%, H 30%
		$matrixPointSize = 10;            // 生成图片大小(这个值可以通过参数传进来判断)
		$margin = 2;              // 二维码图片的margin值,就是二维码图边距值
		$object->png($data, $fullpath, $errorCorrectionLevel, $matrixPointSize, $margin);
		
		// 判断是否生成带logo的二维码
		if (file_exists($logo))
		{
			$QR = imagecreatefromstring(file_get_contents($fullpath));    // 目标图象连接资源。
			$logo = imagecreatefromstring(file_get_contents($logo));  // 源图象连接资源。
			
			$QR_width = imagesx($QR);         // 二维码图片宽度
			$QR_height = imagesy($QR);            // 二维码图片高度
			$logo_width = imagesx($logo);         // logo图片宽度
			$logo_height = imagesy($logo);            // logo图片高度
			$logo_qr_width = $QR_width / 4;           // 组合之后logo的宽度(占二维码的1/5)
			$scale = $logo_width / $logo_qr_width;        // logo的宽度缩放比(本身宽度/组合后的宽度)
			$logo_qr_height = $logo_height / $scale;  // 组合之后logo的高度
			$from_width = ($QR_width - $logo_qr_width) / 2;   // 组合之后logo左上角所在坐标点
			
			// 重新组合图片并调整大小
			// imagecopyresampled() 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中
			imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width, $logo_qr_height, $logo_width, $logo_height);
			
			// 输出图片
			imagepng($QR, $fullpath);
			imagedestroy($QR);
			imagedestroy($logo);
		}

		$QR = imagecreatefromstring(file_get_contents($fullpath));    // 目标图象连接资源。
		header('Content-Type: image/png');
		imagepng($QR);
		die();

		$filename = $fullpath;

		$pos = strpos($filename, "/" . FSNAME . "/downloads/");
		$fullname = substr($filename, $pos);

		$tmp = explode('/', $filename);
		$filename = $tmp[count($tmp)-1];

		var_dump($filename);
		var_dump($fullname);
		echo "<br>";

		echo "<a target=_blank href='{$fullname}'>{$filename}</a><br>";

		die();


		$result['errcode'] = 0;
		$result['errmsg'] = 'ok';
		$result['data'] = $fullpath;

		return $result;
	}
}

下面来看看电子名片二维码的生成实例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
  require_once 'phpqrcode/qrlib.php';

  $content = 'BEGIN:VCARD'."\n";   //开始标记
  $content .= 'N:李'."\n";       //姓
  $content .= 'FN:四'."\n";      //名
  $content .= 'TEL;WORK;VOICE:020-1234567'."\n";   //工作电话
  $content .= 'TEL;HOME;VOICE:020-4321123'."\n";   //家庭电话
  $content .= 'TEL;TYPE=cell:13300001234'."\n";    //移动电话
  $content .= 'EMAIL:1234567@qq.com'."\n";       //邮箱
  $content .= 'ADR;TYPE=work;LABEL="Our Office":GUANGDONGGUANGZHOU'."\n";       //工作地址
  $content .= 'ADR;TYPE=home;LABEL="My Home":HUNANCHENZHOU'."\n";       //家庭地址
  $content .= 'ORG:XX有限公司'."\n";                 //工作单位
  $content .= 'END:VCARD';    //结束标记

  QRcode::png($content);

【注意事项】

1、生成电子名片二维码时开始标记和结束标记不能少;

2、除了具体的个人信息可以修改,其他的内容和格式都不能改,否者就不能生成二维码。

3、每一项后面的‘"\n"’不能少,且必须用双引号。

4、虽然这里的地址我用的是大写拼音,但其实可以用中文的,因为 QR Code 是支持中文的。

PHPGD 验证码

https://m.php.cn/faq/544577.html

https://www.php.cn/faq/383496.html

1
2
3
4
5
6
7
8
1、产生一张png的图片
2、为图片设置背景色
3、设置字体颜色和样式
4、产生4位数的随机的验证码
5、把产生的每个字符调整旋转角度和位置画到png图片上
6、加入噪点和干扰线防止注册机器分析原图片来恶意注册
7、输出图片
8、释放图片所占内存
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
function phpgd()
{
	$code = "";
	$charset = "ABCDEFGHJKMNPQRSTUWXY3456789"; // 去掉 I O Z 0 1 2
	$charset_length = strlen($charset);

	for ($i = 0; $i < 4; $i++) {
		$rand_index = rand(0, $charset_length - 1);
		$rand_char = substr($charset, $rand_index, 1);
		$code .= $rand_char;
	}

	$_SESSION["captcha"] = $code;

	// 展示验证码图片
	$image_width = 120;
	$image_height = 40;
	$image = imagecreatetruecolor($image_width, $image_height);
	$bg_color = imagecolorallocate($image, 255, 255, 255);
	imagefill($image, 0, 0, $bg_color);

	$font_size = 20;
	$font_color = imagecolorallocate($image, 0, 0, 0);

	$x = 10;
	$y = ($image_height - $font_size) / 2 + $font_size;
	for ($i = 0; $i < 4; $i++) {
		$char = substr($code, $i, 1);
		imagettftext($image, $font_size, rand(-10, 10), $x, $y, $font_color, "/usr/share/fonts/open-sans/OpenSans-Bold.ttf", $char);
		$x += $font_size + rand(5, 10);
	}

	$x = $image_width;
	$y = $image_height;
	// 干扰线
	for ($i = 0; $i < 8; $i ++) {
		$lineColor = imagecolorallocate($image, rand(0, 255), rand(0, 255), rand(0, 255));
		imageline($image, rand(0, $x), 0, rand(0, $x), $y, $lineColor);
	}
	// 干扰点
	for ($i = 0; $i < 200; $i ++) {
		$fontColor = imagecolorallocate($image, rand(0, 255), rand(0, 255), rand(0, 255));
		imagesetpixel($image, rand(0, $x), rand(0, $y), $fontColor);
	}

	header('Content-Type: image/png');
	imagepng($image);
	imagedestroy($image);
}

https://blog.csdn.net/bzjoko/article/details/128786504

字体

1
/usr/share/fonts/

https://blog.csdn.net/allway2/article/details/126685336

imagettftext() 函数 是 PHP 中的一个内置函数,用于使用 TrueType 字体将文本写入图像。

句法:

参数:此函数接受上述八个参数,如下所述:

1
2
3
4
5
6
7
8
$image:它指定要处理的图像。
$size:它指定要使用的字体大小,以磅为单位。
$angle:它以度为单位指定角度。
$x:指定 x 坐标。
$y:它指定 y 坐标。
$color:它指定文本所需颜色的索引。
$fontfile:它指定要使用的字体。
$text:它指定要写入的文本。

返回值:此函数在成功时返回一个数组。