日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

拓展学习

發布時間:2023/12/24 综合教程 34 生活家
生活随笔 收集整理的這篇文章主要介紹了 拓展学习 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

1、SeasLog日志系統

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

2、PHPExcel拓展

2.1 PHPExcel簡介
2.2 PHPExcel導出文件步驟介
2.3 PHPExcel輸出到瀏覽器
2.4 PHPExcel樣式設置介
2.5 PHPExcel導入excel

3、cURL

3.1.cURL概念
3.2.cURL使用場景
3.3.cURL操作步驟解析
3.4.cURL實戰

4、消息隊列

4.1 解耦案例: 訂單系統和配送系統
4.2 流量削峰案例: Redis的List(雙向列表)類型實現秒殺
4.3 RabbitMQ 專業的隊列消息系統

5、Linux crontab定時任務

5.0 linux crontab定時任務的使用
5.1 crontab介紹
5.2 crontab實踐

1.0.seasLog日志系統

網址: pecl.php.net

1.1.安裝方法
1
2
3
4
5
6
7
8
運行: 
phpize
// php安裝的路徑
./configure --with-php-config=/usr/local/php/bin/php-config
make && make install
將文件配置到php.ini配置文件當中
添加:
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('級別') 級別: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簡介

準備工具:
php版本 5.3以上
去官網下載PHPExcel,把classes導入工程中

2.2 PHPExcel導出文件步驟

新建excel表格 - 初始化PHPExcel類
創建sheet(內置表) - createSheet() setActiveSheetIndex() getActiveSheet()
填充數據 - setCellValue()
保存文件 - PHPExcel_IOFactory::createWrite() save()

demo.php

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

// 引入
$dir = dirname(__FILE__); // 找到當前腳本所在路徑
require $dir."/PHPExcel/PHPExcel.php";
$objPHPExcel = new PHPExcel();
$objSheet = $objPHPExcel -> getActiveSheet();
$objSheet -> setTitle("demo");
$objSheet -> setCellValue("A1","姓名") -> setCellValue("B1","分數");
$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
// 數據填充的第二種方式 直接加載數據塊填充數據(不建議使用)
$array = array(
array(),
array("", "姓名", "分數"),
array("", "李四", "60"),
array("", "王五", "70"),
);
$objSheet -> fromArray($array);
2.3 從數據庫(Mysql)讀出數據,用PHPExcel導出文件步驟

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

2.4 PHPExcel樣式設置

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

2.5 PHPExcel導入excel

方式:選擇加載

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

3.1.cURL概念

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

3.2.cURL使用場景

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

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

linux: php -i | grep cURL

3.3.cURL操作步驟解析

1.初始化cURL
2.向服務器發送請求
3.接收服務器數據

4.關閉cURL

1
2
3
curl_init(); // 1
curl_exec(); // 2-3
curl_close(); // 4
3.4.cURL實戰

執行:php -f php文件名 > baidu.html
3.4.1 編寫網頁爬蟲

1
2
3
4
5
6
// 抓取百度網頁
<? php
$curl = curl_init('http://www.baidu.com');
curl_exec($curl);
curl_close($curl);
?>
1
2
3
4
5
6
7
8
9
10
// 抓取百度網頁,替換部分內容
<? php
$curlobj = curl_init();
curl_setopt($curlobj, CURLOPT_URL, "http://www.baidu.com");
// 執行之后不直接打印出來 true 只是下載
curl_setopt($curlobj, CURLOPT_RETURNTRANSFER, true);
$output = curl_exec($curlobj);
curl_close($curlobj);
echo str_replace("百度", "測試", $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, "服務器地址");
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 { // 有錯誤
echo curl_error($curlobj);
}
curl_close($curlobj);
?>

3.4.3 登錄慕課網,并下載個人空間頁面

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相關設置,這部分設置要在所有會話開始前設置
data_default_timezone_set('RPC'); // 設置時區
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支持頁面鏈接跳轉

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服務器中下載一個文件

1
2
3
4
5
6
< 大專欄 拓展學習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 { // 有錯誤
echo curl_error($curlobj);
}
curl_close($curlobj);
?>

3.4.5 從本地上傳一個文件到FTP服務器中

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 { // 有錯誤
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'); // 設置時區
curl_setopt($curlobj, CURLOPT_SSL_VERIFYPEER, 0);
$output = curl_exec($curlobj);
curl_close($curlobj);
echo $output;

4.1 解耦案例: 訂單系統和配送系統

mysql訂單隊列

// 訂單系統

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

配送系統

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

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

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

cd 目錄

php goods.php

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

代碼級設計

秒殺程序把請求寫入Redis.(Uid,time_stamp)
檢查Redis已存放數據的長度,超出上限直接丟棄
死循環處理存入Redis的數據庫

// 數據表 (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;

接收用戶請求: 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里面已有的數量
$num = 10;
// 當人數少于10
if ($redis -> ILen($redis_name) < 10) {
$redis -> rPush($redis_name, $uid.'%'.microtime());
echo $uid.'秒殺成功!';

} else { // 如果人數達到十個人,則返回秒殺已完成
echo $uid.'秒殺已結束!';
}
$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";

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

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

}

$redis -> close();

4.3 RabbitMQ 專業的隊列消息系統

5.0 linux crontab定時任務的使用

工作中遇到的困難

每分鐘需要執行一個程序檢查系統的運行狀態 (例如nodejs服務器檢查)
每天凌晨需要對過去一天的業務數據進行統計
每個星期需要把日志文件備份
每個月需要把數據庫進行備份

5.1 crontab介紹

crontab是什么:是一個用于設置周期性被執行任務的工具。

5.2 crontab實踐

5.1.0 相關工具

Putty: 一個免費的易用的SSH連接工具
http://www.putty.org/

5.1.1 安裝并檢查Crontab服務

檢查crontab工具是否安裝: crontab -l
檢查crontab服務是否啟動: service crontab status
安裝cron yum install vixie-cron yum install crontabs

5.1.2 簡單應用

每分鐘把當前時間打印到一個日志文件中 crontab -e (打開文件寫數據)

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

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

5.1.3 crontab基本組成

配置文件
CTOND
crontab工具

5.1.4 crontab配置文件的格式

* * * * * COMMAND
* 分鐘:
* * 小時
* * * 日期 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 # 偶數分鐘
1-59/2 * * * service httpd restart # 奇數分鐘

# 5.晚上11點-7點之間,每隔1小時重啟apache
0 23-7/1 * * * service httpd restart

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

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

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。