日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

拓展学习

發(fā)布時(shí)間:2023/12/24 46 生活家
生活随笔 收集整理的這篇文章主要介紹了 拓展学习 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目錄

1、SeasLog日志系統(tǒng)

1.0.seasLog日志系統(tǒng)
1.1.安裝方法
1.2.配置方法
1.3.常用方法
1.4.tp集成seaslog

2、PHPExcel拓展

2.1 PHPExcel簡(jiǎn)介
2.2 PHPExcel導(dǎo)出文件步驟介
2.3 PHPExcel輸出到瀏覽器
2.4 PHPExcel樣式設(shè)置介
2.5 PHPExcel導(dǎo)入excel

3、cURL

3.1.cURL概念
3.2.cURL使用場(chǎng)景
3.3.cURL操作步驟解析
3.4.cURL實(shí)戰(zhàn)

4、消息隊(duì)列

4.1 解耦案例: 訂單系統(tǒng)和配送系統(tǒng)
4.2 流量削峰案例: Redis的List(雙向列表)類型實(shí)現(xiàn)秒殺
4.3 RabbitMQ 專業(yè)的隊(duì)列消息系統(tǒng)

5、Linux crontab定時(shí)任務(wù)

5.0 linux crontab定時(shí)任務(wù)的使用
5.1 crontab介紹
5.2 crontab實(shí)踐

1.0.seasLog日志系統(tǒng)

網(wǎng)址: pecl.php.net

1.1.安裝方法
1
2
3
4
5
6
7
8
運(yùn)行: 
phpize
// php安裝的路徑
./configure --with-php-config=/usr/local/php/bin/php-config
make && make install
將文件配置到php.ini配置文件當(dāng)中
添加:
extension = "seaslog.so"
1.2.配置方法 可以參考github seaslog

將配置拷貝到 php.ini文件中

1.3.常用方法

1.3.1 配置方法

1
setBasePath, getBasePath, setLogger, getLastLogger

1.3.2 寫日志的方法

1
log, info notice, debug, warning, error

1.3.3 讀日志的方法

1
analyzerCount, analyzerDetail('級(jí)別') 級(jí)別:info、notice...

使用:

1
2
3
4
5
6
7
8
SeasLog::setBasePath('/home/wwwroot/default/seaslog/log');
echo SeasLog::getBasePath();

// 分模塊
SeasLog::setLogger('Web');
SeasLog::setLogger('Api');
SeasLog::debug('It is debug info');
SeasLog::info('It is info');
1.4.tp集成seaslog

tp中Log.class.php日志管理類

2.1 PHPExcel簡(jiǎn)介

準(zhǔn)備工具:
php版本 5.3以上
去官網(wǎng)下載PHPExcel,把classes導(dǎo)入工程中

2.2 PHPExcel導(dǎo)出文件步驟

新建excel表格 - 初始化PHPExcel類
創(chuàng)建sheet(內(nèi)置表) - createSheet() setActiveSheetIndex() getActiveSheet()
填充數(shù)據(jù) - setCellValue()
保存文件 - PHPExcel_IOFactory::createWrite() save()

demo.php

1
2
3
4
5
6
7
8
9
10
11
12
13
<? php

// 引入
$dir = dirname(__FILE__); // 找到當(dāng)前腳本所在路徑
require $dir."/PHPExcel/PHPExcel.php";
$objPHPExcel = new PHPExcel();
$objSheet = $objPHPExcel -> getActiveSheet();
$objSheet -> setTitle("demo");
$objSheet -> setCellValue("A1","姓名") -> setCellValue("B1","分?jǐn)?shù)");
$objSheet -> setCellValue("A2","張三") -> setCellValue("B2","50") ;
$objWriter = PHPExcel_IOFactory::createWrite($objPHPExcel,"Excel2007");
$objWriter -> save($dir."/demo.xlsx");
?>
1
2
3
4
5
6
7
8
// 數(shù)據(jù)填充的第二種方式 直接加載數(shù)據(jù)塊填充數(shù)據(jù)(不建議使用)
$array = array(
array(),
array("", "姓名", "分?jǐn)?shù)"),
array("", "李四", "60"),
array("", "王五", "70"),
);
$objSheet -> fromArray($array);
2.3 從數(shù)據(jù)庫(kù)(Mysql)讀出數(shù)據(jù),用PHPExcel導(dǎo)出文件步驟

將Excel輸出到瀏覽器,主要通過header頭的方式

2.4 PHPExcel樣式設(shè)置

2.4.1 合并單元格 $objSheet -> mergeCells("A2:F2")
2.4.1 文字居中 $objSheet -> getDefaultStyle() -> setVertical(參數(shù))

2.5 PHPExcel導(dǎo)入excel

方式:選擇加載

全部讀取
部分讀取(只加載指定的sheet)
read.php

3.1.cURL概念

使用URL語法傳輸數(shù)據(jù)的命令行工具。
文檔: http://www.php.net/manual/zh/book.curl.php

3.2.cURL使用場(chǎng)景

網(wǎng)頁資源 (編寫網(wǎng)頁爬蟲)
WebService數(shù)據(jù)接口資源 (獲取接口數(shù)據(jù))
FTP服務(wù)器里面的文件資源 (下載/上傳FTP服務(wù)器里面的資源)
其他資源 (所有網(wǎng)絡(luò)資源)

windows 打印所有設(shè)置:php -i
查找cURL,找到則支持

linux: php -i | grep cURL

3.3.cURL操作步驟解析

1.初始化cURL
2.向服務(wù)器發(fā)送請(qǐng)求
3.接收服務(wù)器數(shù)據(jù)

4.關(guān)閉cURL

1
2
3
curl_init(); // 1
curl_exec(); // 2-3
curl_close(); // 4
3.4.cURL實(shí)戰(zhàn)

執(zhí)行:php -f php文件名 > baidu.html
3.4.1 編寫網(wǎng)頁爬蟲

1
2
3
4
5
6
// 抓取百度網(wǎng)頁
<? php
$curl = curl_init('http://www.baidu.com');
curl_exec($curl);
curl_close($curl);
?>
1
2
3
4
5
6
7
8
9
10
// 抓取百度網(wǎng)頁,替換部分內(nèi)容
<? php
$curlobj = curl_init();
curl_setopt($curlobj, CURLOPT_URL, "http://www.baidu.com");
// 執(zhí)行之后不直接打印出來 true 只是下載
curl_setopt($curlobj, CURLOPT_RETURNTRANSFER, true);
$output = curl_exec($curlobj);
curl_close($curlobj);
echo str_replace("百度", "測(cè)試", $output);
?>

3.4.2 獲取Webservice上的天氣信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<? php
$data = 'theCityName=北京';
$curlobj = curl_init();
curl_setopt($curlobj, CURLOPT_URL, "服務(wù)器地址");
curl_setopt($curlobj, CURLOPT_HEADER, 0);
curl_setopt($curlobj, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curlobj, CURLOPT_POST, 1);
curl_setopt($curlobj, CURLOPT_POSTFILELES, $data);
curl_setopt($curlobj, CURLOPT_HTTPHEADER, array("application/x-www-form-urlencoded;charset=utf-8", "Content-length:".strlen($data)));
$rtn = curl_exec($curlobj);
if (!curl_errno($curlobj)) {
// $info = curl_getinfo($curlobj);
echo $rtn;
} else { // 有錯(cuò)誤
echo curl_error($curlobj);
}
curl_close($curlobj);
?>

3.4.3 登錄慕課網(wǎng),并下載個(gè)人空間頁面

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
 <? php
$data = 'username=demo_peter@126.com&password=123qwe&remember=1';
$curlobj = curl_init();
curl_setopt($curlobj, CURLOPT_URL,"http://www.imooc.com/user/login");
curl_setopt($curlobj, CURLOPT_RETURNTRANSFER, true);

// Cookie相關(guān)設(shè)置,這部分設(shè)置要在所有會(huì)話開始前設(shè)置
data_default_timezone_set('RPC'); // 設(shè)置時(shí)區(qū)
curl_setopt($curlobj, CURLOPT_COOKIESESSION, TRUE);
curl_setopt($curlobj, CURLOPT_COOKIEFILE, 'cookiefile);
curl_setopt($curlobj, CURLOPT_COOKIEJAR, 'cookiefile');
curl_setopt($curlobj, CURLOPT_COOKIE, session_name(). '='. session_id() );
curl_setopt($curlobj, CURLOPT_HEADER, 0);
curl_setopt($curlobj, CURLOPT_FOLLOWLCATION, 1); // 讓cURL支持頁面鏈接跳轉(zhuǎn)

curl_setopt($curlobj, CURLOPT_POST, 1);
curl_setopt($curlobj, CURLOPT_POSTFILELES, $data);
curl_setopt($curlobj, CURLOPT_HTTPHEADER, array("application/x-www-form-urlencoded;charset=utf-8", "Content-length:".strlen($data)));
curl_exec($curlobj);
curl_setopt($curlobj, CURLOPT_URL, "http://www.imooc.com/space/index");
curl_setopt($curlobj, CURLOPT_POST, 0);
curl_setopt($curlobj, CURLOPT_HTTPHEADER, array("Content-type: text/xml"));
$output = curl_exec($curlobj);
curl_close($curlobj);
echo $output

?>

3.4.4 從FTP服務(wù)器中下載一個(gè)文件

1
2
3
4
5
6
< 大專欄 拓展學(xué)習(xí)span class="line">7
8
9
10
11
12
13
14
15
16
17
18
19
20
 <? php
$curlobj = curl_init();
curl_setopt($curlobj, CURLOPT_URL, "ftp://192.168.1.100/downloaddemo.txt");
curl_setopt($curlobj, CURLOPT_HEADER, 0);
curl_setopt($curlobj, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curlobj, CURLOPT_TIMEOUT, 300);
curl_setopt($curlobj, CURLOPT_USERPWD, "peter.zhou:123456"); // FTP用戶名和密碼
$outfile = fopen('dest.txt', 'wb'); // 保存到本地的文件名
curl_setopt($curlobj, CURLOPT_FILE, $outfile);

$rtn = curl_exec($curlobj);
fclose($outfile);
if (!curl_errno($curlobj)) {
// $info = curl_getinfo($curlobj);
echo $rtn;
} else { // 有錯(cuò)誤
echo curl_error($curlobj);
}
curl_close($curlobj);
?>

3.4.5 從本地上傳一個(gè)文件到FTP服務(wù)器中

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
<? php
$curlobj = curl_init();
$localfile = 'ftp01.php';
$fp = fopen($localfile, 'r');

curl_setopt($curlobj, CURLOPT_URL, "ftp://192.168.1.100/downloaddemo.txt");
curl_setopt($curlobj, CURLOPT_HEADER, 0);
curl_setopt($curlobj, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curlobj, CURLOPT_TIMEOUT, 300);
curl_setopt($curlobj, CURLOPT_USERPWD, "peter.zhou:123456"); // FTP用戶名和密碼

curl_setopt($curlobj, CURLOPT_UPLOAD, 1);
curl_setopt($curlobj, CURLOPT_INFILE, $fp);
curl_setopt($curlobj, CURLOPT_INFILESIZE, filesize($localfile));


$rtn = curl_exec($curlobj);
fclose($fp);
if (!curl_errno($curlobj)) {
// $info = curl_getinfo($curlobj);
echo $rtn;
} else { // 有錯(cuò)誤
echo curl_error($curlobj);
}
curl_close($curlobj);
?>

3.4.6 下載HTTPS資源

1
2
3
4
5
6
7
8
$curlobj = curl_init();
curl_setopt($curlobj, CURLOPT_URL, "ftp://192.168.1.100/downloaddemo.txt");
curl_setopt($curlobj, CURLOPT_RETURNTRANSFER, 1);
data_default_timezone_set('RPC'); // 設(shè)置時(shí)區(qū)
curl_setopt($curlobj, CURLOPT_SSL_VERIFYPEER, 0);
$output = curl_exec($curlobj);
curl_close($curlobj);
echo $output;

4.1 解耦案例: 訂單系統(tǒng)和配送系統(tǒng)

mysql訂單隊(duì)列

// 訂單系統(tǒng)

1
2
3
4
5
6
7
8
// 把訂單信息,存儲(chǔ)到隊(duì)列表中
$insert_data = array(
'order_id' => ,
'mobie' => ,
'create_at' => date('Y-m-d',timer()),
'status' => 0, // 訂單狀態(tài)
);
// 存儲(chǔ)到隊(duì)列表中

配送系統(tǒng)

1
2
3
4
5
6
7
8
9
10
11
// 1: 先把要處理的記錄更新為等待處理  加鎖 防止其他系統(tǒng)操作
$waiting = array('status' => 0);
$lock = array('status' => 2); // 更新為等待處理
數(shù)據(jù)庫(kù)刷選出訂單
// 2: 處理剛鎖定的訂單

// 3: 把這些處理過的更新為已完成
$success = array(
'status' => 1,
'update_at' => 時(shí)間,
);
1
2
3
4
5
6
7
8
// 定時(shí)腳本 good.sh
#!/bin/bash

date "+%G-%m-%d %H:%M:S"

cd 目錄

php goods.php

4.2 流量削峰案例: Redis的List(雙向列表)類型實(shí)現(xiàn)秒殺

代碼級(jí)設(shè)計(jì)

秒殺程序把請(qǐng)求寫入Redis.(Uid,time_stamp)
檢查Redis已存放數(shù)據(jù)的長(zhǎng)度,超出上限直接丟棄
死循環(huán)處理存入Redis的數(shù)據(jù)庫(kù)

// 數(shù)據(jù)表 (time_stamp 微秒)

1
2
3
4
5
6
create table `redis_queue`(
id int(11) unsigned not null auto_increment,
uid int(11) not null default '0',
time_stamp varchar(24) not null,
primary key(id)
)engine=InnoDB default charset=utf8;

接收用戶請(qǐng)求: user.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// 1.加載redis組件
$redis = new Redis();
$redis -> connect('127.0.0.1',6379);
$redis_name = "miaosha";

// 接受用戶的uid
$uid = $_GET('uid');
// 獲取redis里面已有的數(shù)量
$num = 10;
// 當(dāng)人數(shù)少于10
if ($redis -> ILen($redis_name) < 10) {
$redis -> rPush($redis_name, $uid.'%'.microtime());
echo $uid.'秒殺成功!';

} else { // 如果人數(shù)達(dá)到十個(gè)人,則返回秒殺已完成
echo $uid.'秒殺已結(jié)束!';
}
$redis -> close();

// 處理程序 savetodb.php

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
// 1.加載redis組件
$redis = new Redis();
$redis -> connect('127.0.0.1',6379);
$redis_name = "miaosha";

// 死循環(huán)
while(1) {
// 從隊(duì)列最左側(cè)取出一個(gè)值
$user = $redis -> lPush($redis_name);
// 然后判斷這個(gè)值是否存在
if ($user || $user == 'nil') {
sleep(2);
continue;
}

// 切割時(shí)間,uid
$user_arr = explpde('%', $user);
$insert_data = array(
'uid' => $user_arr[0],
'time_stamp' => $user_arr[0],
);
// 保存到數(shù)據(jù)庫(kù)中
$result = $db -> insert('redis_queue', $insert_data);
// 插入失敗,回滾
if (!$result) {
$redis -> rPush($redis_name, $user);
}

}

$redis -> close();

4.3 RabbitMQ 專業(yè)的隊(duì)列消息系統(tǒng)

5.0 linux crontab定時(shí)任務(wù)的使用

工作中遇到的困難

每分鐘需要執(zhí)行一個(gè)程序檢查系統(tǒng)的運(yùn)行狀態(tài) (例如nodejs服務(wù)器檢查)
每天凌晨需要對(duì)過去一天的業(yè)務(wù)數(shù)據(jù)進(jìn)行統(tǒng)計(jì)
每個(gè)星期需要把日志文件備份
每個(gè)月需要把數(shù)據(jù)庫(kù)進(jìn)行備份

5.1 crontab介紹

crontab是什么:是一個(gè)用于設(shè)置周期性被執(zhí)行任務(wù)的工具。

5.2 crontab實(shí)踐

5.1.0 相關(guān)工具

Putty: 一個(gè)免費(fèi)的易用的SSH連接工具
http://www.putty.org/

5.1.1 安裝并檢查Crontab服務(wù)

檢查crontab工具是否安裝: crontab -l
檢查crontab服務(wù)是否啟動(dòng): service crontab status
安裝cron yum install vixie-cron yum install crontabs

5.1.2 簡(jiǎn)單應(yīng)用

每分鐘把當(dāng)前時(shí)間打印到一個(gè)日志文件中 crontab -e (打開文件寫數(shù)據(jù))

tail -f /tmp/log.txt 查看文件最后幾行

1
*/1 * * * * date >> /tmp/log.txt

5.1.3 crontab基本組成

配置文件
CTOND
crontab工具

5.1.4 crontab配置文件的格式

* * * * * COMMAND
* 分鐘:
* * 小時(shí)
* * * 日期 1~31
* * * * 月份 1 ~ 12
* * * * * 星期 0 ~ 7

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 1. 每晚21:30 重啟Apache
30 21 * * * service httpd restart

# 2.每月1、10、22日的4: 45重啟Apache
45 4 1,10,22 * * service httpd restart

# 3.每月1-10日的4:45重啟apache
45 4 1-10 * * service httpd restart

# 4.每隔2分鐘重啟apache
*/2 * * * service httpd restart # 偶數(shù)分鐘
1-59/2 * * * service httpd restart # 奇數(shù)分鐘

# 5.晚上11點(diǎn)-7點(diǎn)之間,每隔1小時(shí)重啟apache
0 23-7/1 * * * service httpd restart

# 6.每天18點(diǎn)-23點(diǎn)之間,每隔30分鐘重啟apache
0,30 18-23 * * * service httpd restart
0-59/30 18-23 * * * service httpd restart

# 7.每分鐘執(zhí)行兩次
*/1 * * * * date >> /temp/log.txt
*/1 * * * * sleep 30s; date >> /temp/log.txt

總結(jié)

以上是生活随笔為你收集整理的拓展学习的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。