『壹』 php+Laravel框架RabbitMQ簡單使用(PTP)
一、簡介Point-to-Point,點對點通信模型。PTP是基於隊列(Queue)的,一個隊列可以有多個生產者,和多個消費者。消息伺服器按照收到消息的先後順序,將消息放到隊列中。隊列中的每一條消息,只能由一個消費者進行消費,消費之後就會從隊列中移除。
特點:
每個消息只用一個消費者;
發送者和接受者沒有時間依賴;
接受者確認消息接受和處理成功。
P 表示為生產者 、C 表示為消費者,紅色表示隊列。
在RabbitMQ中有生產者,消費者的概念,本篇主要是消息如何生產以及消費者這部分的實現。使用的laravel框架,php-amqplib拓展。
二、Laravel中添加依賴在項目根目錄下執行一下命令
composer require php-amqplib/php-amqplib
lishuo@李碩的MacBook?Pro:~/Code/php/www.zfw.com?(branch:?master!)$?composer?require?php-amqplib/php-amqplibUsing?version?^3.1?for?php-amqplib/php-amqplib./composer.json?has?been?updatedRunning?composer?update?php-amqplib/php-amqplibLoading?composer?repositories?with?package?informationUpdating?dependenciesNothing?to?modify?in?lock?fileInstalling?dependencies?from?lock?file?(including?require-dev)Nothing?to?install,?update?or?removePackage?caouecs/laravel-lang?is?abandoned,?you?should?avoid?using?it.?Use?https://github.com/Laravel-Lang/lang?instead.Package?swiftmailer/swiftmailer?is?abandoned,?you?should?avoid?using?it.?Use?symfony/mailer?instead.Generating?optimized?autoload?files>?::postAutoloadDump>?@php?artisan?package:discover?--ansiDiscovered?Package:?barryvdh/laravel-ide-helperDiscovered?Package:?facade/ignitionDiscovered?Package:?fruitcake/laravel-corsDiscovered?Package:?jenssegers/mongodbDiscovered?Package:?laravel/passportDiscovered?Package:?laravel/sailDiscovered?Package:?laravel/sanctumDiscovered?Package:?laravel/tinkerDiscovered?Package:?maatwebsite/excelDiscovered?Package:?nesbot/carbonDiscovered?Package:?nunomaro/collisionPackage?manifest?generated?successfully.100?packages?you?are?using?are?looking?for?funding.Use?the?`composer?fund`?command?to?find?out?more!>?@php?artisan?vendor:publish?--tag=laravel-assets?--ansiNo?publishable?resources?for?tag?[laravel-assets].Publishing?complete.三、使用Laravel的command來實現消息的生產和消費1.創建生產者執行以下命令快速創建生產者
php artisan make:command RabbitmqProcerCommand
lishuo@李碩的MacBook?Pro:~/Code/php/www.zfw.com?(branch:?master!)$?php?artisan?make:command?RabbitmqProcerCommandConsole?command?created?successfully.基本代碼(接下來就在command裡面寫生產消息的邏輯)<?phpnamespace?AppConsoleCommands;use?IlluminateConsoleCommand;//引入amqp擴展use?;use?PhpAmqpLibMessageAMQPMessage;class?RabbitmqProcerCommand?extends?Command{????/**?????*?The?name?and?signature?of?the?console?command.?????*?????*?@var?string?????*/????protected?$signature?=?'rabbitmq_procer'//給生產者起個command名稱????/**?????*?The?console?command?description.?????*?????*?@var?string?????*/????protected?$description?=?'Command?description'????/**?????*?Create?a?new?command?instance.?????*?????*?@return?void?????*/????public?function?__construct()????{????????parent::__construct();????}????/**?????*?Execute?the?console?command.?????*??生產者消息代碼?????*?@return?int?????*/????public?function?handle()????{????????//創建伺服器連接????????$connection?=?new?AMQPStreamConnection('localhost',?5672,?'guest',?'guest');????????//連接信道????????//信道是生產消費者與rabbit通信的渠道,生產者publish或者消費者消費一個隊列都是需要通過信道來通信的????????//信道是建立在TCP上面的虛擬鏈接,也就是rabbitMQ在一個TCP上面建立成百上千的信道來達到多個線程處理。????????//注意是一個TCP?被多個線程共享,每個線程對應一個信道,信道在rabbit都有唯一的ID,保證了信道的私有性,對應上唯一的線程使用。????????$channel?=?$connection->channel();????????//channel->queue_declare通過信道創建一個是否是持久化的消息隊列????????//queue第一個參數代表消息隊列名稱????????$channel->queue_declare('test',?false,?false,?false,?false);????????//往隊列里要發送內容,待發送的內容????????$msg?=?new?AMQPMessage('我是一個生產者消息');????????//通過信道來進行發送消息????????//而exchange是怎麼知道消息應該推到哪個queue呢,這就要通過綁定queue與exchange時的routingkey了,通過代碼進行綁定並且指定routingkey,下面有一張關系圖,p(發布者)?—>?x(exchange)?bindding(綁定關系也就是我們的routingkey)?紅色代表著queue????????$channel->basic_publish($msg,?'',?'test');????????echo?"?[x]?Sent?'我是一個生產者消息!' ";????????//關閉信道????????$channel->close();????????//關閉連接????????$connection->close();????}}2.創建消費者因為消費者是需要常駐內存的,所以需要在cli下運行,我們可以通過以下操作創建一個任務。
?php?artisan?make:command?RabbitmqConsumerCommand基本代碼(接下來就在command裡面寫消費消息的邏輯)<?phpnamespace?AppConsoleCommands;use?IlluminateConsoleCommand;use?;class?RabbitmqConsumerCommand?extends?Command{????/**?????*?The?name?and?signature?of?the?console?command.?????*?????*?@var?string?????*/????protected?$signature?=?'rabbitmq_consumer'//給消費者起個command名稱????/**?????*?The?console?command?description.?????*?????*?@var?string?????*/????protected?$description?=?'Command?description'????/**?????*?Create?a?new?command?instance.?????*?????*?@return?void?????*/????public?function?__construct()????{????????parent::__construct();????}????/**?????*?Execute?the?console?command.?????*?????*?@return?int?????*/????public?function?handle()????{????????//創建伺服器連接????????$connection?=?new?AMQPStreamConnection('localhost',?5672,?'guest',?'guest');????????//連接信道????????//信道是生產消費者與rabbit通信的渠道,生產者publish或者消費者消費一個隊列都是需要通過信道來通信的????????//信道是建立在TCP上面的虛擬鏈接,也就是rabbitMQ在一個TCP上面建立成百上千的信道來達到多個線程處理。????????//注意是一個TCP?被多個線程共享,每個線程對應一個信道,信道在rabbit都有唯一的ID,保證了信道的私有性,對應上唯一的線程使用。????????$channel?=?$connection->channel();????????//channel->queue_declare通過信道創建一個是否是持久化的消息隊列????????//queue第一個參數代表消息隊列名稱????????$channel->queue_declare('test',?false,?false,?false,?false);????????echo?"?[*]?Waiting?for?messages.?To?exit?press?CTRL+C ";????????//進行監聽消費者是否有消息,如果有進行輸出消息內容????????$callback?=?function?($msg)?{????????????echo?'?[x]?Received?',?$msg->body,?" ";????????};????????//通過信道進行消費消息????????$channel->basic_consume('test',?'',?false,?true,?false,?false,?$callback);????????//如果信道是打開狀態????????while?($channel->is_open())?{????????????//然後讓信道一直處於監聽等待狀態????????????$channel->wait();????????}????????//關閉信道????????$channel->close();????????//關閉連接????????$connection->close();????}}三、使用command進行測試生產消息和消費消息是否成功執行生產消息 php artisan rabbitmq_procer 執行消費消息 hp artisan rabbitmq_consumer
『貳』 mongodb的save和insert函數的區別
mongodb的save和insert函數都可以向collection里插入數據,但兩者是有兩個區別:
一、使用save函數里,如果原來的對象不存在,那他們都可以向collection里插入數據,如果已經存在,save會調用update更新裡面的記錄,而insert則會忽略操作
二、insert可以一次性插入一個列表,而不用遍歷,效率高, save則需要遍歷列表,一個個插入。對於遠程調用來說,是一性次將整個列表post過來讓mongodb去自己處理,效率會高些。
mongodb相關教程;PHP程序員,雷雪松的個人博客。
『叄』 哪位高手可以推薦幾款通用的資料庫管理工具
1、MySQL Workbench
MySQL Workbench是一款專為MySQL設計的ER/資料庫建模工具。它是著名的資料庫設計工具DBDesigner4的繼任者。你可以用MySQL Workbench設計和創建新的資料庫圖示,建立資料庫文檔,以及進行復雜的MySQL 遷移
MySQL Workbench是下一代的可視化資料庫設計、管理的工具,它同時有開源和商業化的兩個版本。該軟體支持Windows和Linux系統,下面是一些該軟體運行的界面截圖:
2、資料庫管理工具 Navicat Lite
NavicatTM是一套快速、可靠並價格相宜的資料庫管理工具,大可使用來簡化資料庫的管理及降低系統管理成本。它的設計符合資料庫管理員、開發人員及中小企業的需求。 Navicat是以直覺化的使用者圖形介面所而建的,讓你可以以安全且簡單的方式建立、組織、存取並共用資訊。
界面如下圖所示:
Navicat 提供商業版Navicat Premium 和免費的版本 Navicat Lite 。免費版本的功能已經足夠強大了。
Navicat 支持的資料庫包括MySQL、Oracle、SQLite、PostgreSQL和SQL Server 等。
3、開源ETL工具Kettle
Kettle是一款國外開源的etl工具,純java編寫,綠色無需安裝,數據抽取高效穩定(數據遷移工具)。Kettle中有兩種腳本文件,transformation和job,transformation完成針對數據的基礎轉換,job則完成整個工作流的控制。
·授權協議:LGPL
·開發語言: Java
·操作系統: 跨平台
4、Eclipse SQLExplorer
SQLExplorer是Eclipse集成開發環境的一種插件,它可以被用來從Eclipse連接到一個資料庫。
SQLExplorer插件提供了一個使用SQL語句訪問資料庫的圖形用戶介面(GUI)。通過使用SQLExplorer,你能夠顯示表格、表格結構和表格中的數據,以及提取、添加、更新或刪除表格數據。
SQLExplorer同樣能夠生成SQL腳本來創建和查詢表格。所以,與命令行客戶端相比,使用SQLExplorer可能是更優越的選擇,下圖是運行中的界面,很好很強大。
l授權協議: 未知
l開發語言: Java
l操作系統: 跨平台
5、MySQL管理工具phpMyAdmin
phpMyAdmin是一個非常受歡迎的基於web的MySQL資料庫管理工具。它能夠創建和刪除資料庫,創建/刪除/修改表格,刪除/編輯/新增欄位,執行SQL腳本等。
l授權協議:GPL
l開發語言:PHP
l操作系統:跨平台
6、Mongodb 管理工具Mongodb Studio
Mongodb是一款性能優良,功能豐富的文檔型非關系型資料庫。由於該資料庫是開源項目並且還在不斷更新中,目前為止在任何平台上都不能找到功能相對完整的客戶端資料庫管理工具。而越來越多的項目中使用了Mongodb,使得管理起來十分麻煩.如果點點滑鼠就搞定了.那該有多好。
基於如上背景,我們製作了此MongoDB管理工具,在DBA/開發/管理員三個維度提供一定層次的管理功能。
Mongodb Management Studio功能如下:
l伺服器管理功能
添加伺服器,刪除伺服器
l伺服器,資料庫,表,列,索引,樹形顯示和狀態信息查看
l查詢分析器功能.
支持select,insert,Delete,update
支持自定義分頁函 數 $rowid(1,5)查詢第一條到第五條,需放在select後面.
l索引管理功能
支持列名的顯示,索引的創建,查看,刪除.
l資料庫Profile管理.
可以設置Profile開關,查看Profile信息.自定義分頁大小.
lmaster/slave信息顯示
7、MySQL監控小工具mycheckpoint
mycheckpoint是一個開源的 MySQL監控工具,主要用來監控數據。通過視圖方式提供監控數據報表。mycheckpoint支持以獨立的Web伺服器來運行。
例如:SELECTinnodb_read_hit_percent, DML FROM sv_report_chart_sample;
查看詳細報表示例。
安裝手冊:http://code.openark.org/forge/mycheckpoint/documentation/installation
8、SQL SERVER 資料庫發布向導
Microsoft SQL Server DatabasePublishing Wizard (微軟SQLServer資料庫發布向導) 是微軟發布的一個開源工具,使用該工具可以幫你將SQLSERVER 資料庫導出成一個 SQL腳本,類似 MySQL 的 mysqlmp工具。
官方說明:SQLServer資料庫發布向導提供了一種將資料庫發布到 T-SQL 腳本或者直接發布到支持宿主服務提供程序的方法。
9、Eclipse 的Oracle插件jOra
jOra是一個為 Oracle開發者和管理員提供的 Eclipse 插件,可輕松的對Oracle進行開發和管理。
安裝地址:http://jora.luenasoft.de/updatesite
插件截圖
l授權協議:免費,非開源
l開發語言:Java
l操作系統:跨平台
10、免費PostgreSQL監控工具pgwatch
pgwatch 是一個簡單易用的PostgreSQL的監控工具,支持PostgreSQL 9.0 以及更新的版本。
主要特性:
- 配置簡單
- 大量的監控圖表
- 快速系統檢查面板
- 自動收集統計信息
- 互動式的 Flash 圖表
- 集成 SQL worksheet
l授權協議: Artistic
l開發語言:PHP
l操作系統: Linux
11、MySQL Browser
MySQL的客戶端工具MySQL Browser的優點是簡單,及其的簡單,安裝之後能夠立刻上手,馬上就能使用的那種,布局也很簡陋,功能也很簡陋,簡單使用沒有問題,尤其是剛開始學習mysql的同學,可以嘗試一下。
·授權協議:未知
·操作系統: Windows
12、MySQL客戶端軟體HeidiSQL
HeidiSQL是一個功能非常強大的 MySQL 客戶端軟體,採用Delphi 開發,支持 Windows 操作系統。
l授權協議:GPL
l開發語言:Delphi/Pascal
l操作系統: Windows
13、SQLite管理工具SQLiteStudio
SQLiteStudio 是一個跨平台的 SQLite資料庫的管理工具,採用 Tcl語言開發。
l授權協議:未知
l操作系統:跨平台
14、SQL客戶端工具SQLyog
SQLyog 是一個易於使用的、快速而簡潔的圖形化管理MYSQL資料庫的工具,它能夠在任何地點有效地管理你的資料庫。
功能:
l快速備份和恢復數據;
l以GRID/ TEXT格式顯示結果;
l支持客戶端挑選、過濾數據;
l批量執行很大的SQL腳本文件;
l快速執行多重查詢並能夠返回每頁超過1000條的記錄集,而這種操作是直接生成在內存中的;
l程序本身非常短小精悍!壓縮後只有348 KB ;
l完全使用MySQLC APIs程序介面;
l以直觀的表格界面建立或編輯數據表;
l以直觀的表格界面編輯數據;
l進行索引管理;
l創建或刪除資料庫;
l操縱資料庫的各種許可權:庫、表、欄位;
l編輯BLOB類型的欄位,支持Bitmap/GIF/JPEG格式;
l輸出數據表結構/數據為SQL腳本;
l支持輸入/輸出數據為CSV文件;
l可以輸出資料庫清單為HTML文件;
l為所有操作建立日誌;
l個人收藏管理操作語句;
l支持語法加亮顯示;
l可以保存記錄集為CSV、HTML、XML格式的文件;
l21、99% 的操作都可以通過快捷鍵完成;
l支持對數據表的各種高級屬性修改;
l查看數據伺服器的各種狀態、參數等;
l支持更改數據表類型為ISAM, MYISAM, MERGE, HEAP, InnoDB, BDB;
l刷新數據伺服器、日誌、許可權、表格等;
l診斷數據表:檢查、壓縮、修補、分析。
l授權協議:GPLv2
l開發語言:C/C++
l操作系統: Windows
15、數據挖掘工具RapidMiner
RapidMiner是世界領先的數據挖掘解決方案,在一個非常大的程度上有著先進技術。它數據挖掘任務涉及范圍廣泛,包括各種數據藝術,能簡化數據挖掘過程的設計和評價。
功能和特點
l免費提供數據挖掘技術和庫;
l100%用Java代碼(可運行在操作系統);
l數據挖掘過程簡單,強大和直觀;
l內部XML保證了標准化的格式來表示交換數據挖掘過程;
l可以用簡單腳本語言自動進行大規模進程;
l多層次的數據視圖,確保有效和透明的數據;
l圖形用戶界面的互動原型;
l命令行(批處理模式)自動大規模應用;
lJava API(應用編程介面);
l簡單的插件和推廣機制;
l強大的可視化引擎,許多尖端的高維數據的可視化建模;
l400多個數據挖掘運營商支持;
l耶魯大學已成功地應用在許多不同的應用領域,包括文本挖掘,多媒體挖掘,功能設計,數據流挖掘,集成開發的方法和分布式數據挖掘。
l授權協議:未知
l開發語言:Java
l操作系統:跨平台
16、Oracle 資料庫開發工具Oracle SQL Developer
Oracle SQL Developer 是一個免費非開源的用以開發資料庫應用程序的圖形化工具,使用SQLDeveloper 可以瀏覽資料庫對象、運行 SQL 語句和腳本、編輯和調試 PL/SQL語句。另外還可以創建執行和保存報表。該工具可以連接任何 Oracle 9.2.0.1 或者以上版本的 Oracle 資料庫,支持Windows、Linux 和 Mac OS X 系統。
·授權協議:免費,非開源
·開發語言:Java
·操作系統:Windows Linux MacOS
17、EMS SQL Manager for MySQL
EMS SQL Manager for MySQL是一款高性能MySQL資料庫伺服器系統的管理和開發工具。它支持從MySQL 3.23到6.0的任一版本,並支持最新版本的MySQL的特點,包括:查看、存儲規程和函數、InnoDB外部鍵字和其他特點。它提供了大量工具以滿足富有經驗的用戶的所有要求。添加了精心設計的操作向導系統,以及SQL Manager for MySQL那富有藝術感的圖形用戶界面,即使新手也可以不會為如何使用而感到困擾。
l授權協議:商業軟體
l開發語言:C/C++
l操作系統: Windows
18、資料庫管理工具CoolSQL
CoolSQL是一個資料庫客戶端管理工具。
·支持大部分資料庫包括:DB2、oracle、mysql、MS SQL Server、Derby、HSQL、Informix、Sybase、PostgresSQL等。
·為用戶提供友好和漂亮UI,其整體框架由視圖組成類似於Eclipse。支持直接修改SQL查詢結果。
·支持將表格數據導出成文本文件,EXCEL和HTML。
·擁有一個支持SQL語法著色顯示,智能提示,文本編輯和查找的SQL編輯器。
·能夠展示資料庫大部分元數據包括:版本,數據類型、函數,連接信息等。
·支持導出數據對象信息包括對象數據(INSERT SQL語句),生成創建/刪除腳本(create script/drop script)。
·所有SQL腳本都可以以批量的模式執行。
·能夠搜索所有數據包括資料庫列,表/視圖和其他表格型。
·支持i18n,當前提供兩種語言(中文和英文)。
·提供收藏功能,管理由用戶收集的文本信息。
·支持通過插件擴展其功能。
ll 授權協議:未知
l開發語言:Java
l操作系統:跨平台
19、SQLite Manager
這是一款方便firefox對任何SQLite資料庫操作的擴展。使用這款擴展,可以在firefox下很容易的創建表格、建立索引、瀏覽搜索等操作。此外它還具有一個語法檢查功能的下拉式菜單,從而保證用戶的操作不會出錯。
20、MySQL GUI Tools
這是MySQL官方專業的資料庫管理工具,同時支持多種操作系統。該工具包括下面三個產品:
·MySQL Administrator 1.2
·MySQL Query Browser 1.2
·MySQL MigrationToolkit 1.1
21、SQL客戶端管理工具SQuirreL SQL Client
SQuirreL SQL Client是一個SQL客戶端管理工具。它允許你查看一個兼容JDBC的資料庫的結構,瀏覽表格中的數據,運行SQL命令, 可連接的資料庫有ORCAL,MS SQLSERVER, DB2 等, 它還允許用戶安裝和創建用於補充應用程序基本功能的插件。
功能和特點:
l柱狀圖顯示對像;
l自動完成;
l語句提示;
l標記;
l自動糾正;
l編輯查詢結果;
l關系圖;
l分頁列印。
l授權協議:未知
l語言:Java
l操作系統:跨平台
22、Tomcat管理工具EasyTomcat
EasyTomcat是一個用來幫助簡化 Tomcat和 MySQL管理的系統,你可以啟動、停止和配置Tomcat和MySQL伺服器,同時也提供了監控的功能。
l授權協議:未知
l開發語言:Java
l操作系統:跨平台
23、SQL Server管理工具sqlBuddy
SqlBuddy是C#編寫的一款用於Microsoft SQLServer和MSDE的開源工具,使用它可以很容易的編寫SQL腳本。SqlBuddy提供的功能和查詢分析器的目的有些微不同,它傾向於幫助使用者編寫SQL。
l授權協議:未知
l開發語言:C#
l操作系統: Windows
24、資料庫開發工具GSQL
GSQL 是 Gnome 下的一個集成資料庫開發工具。資料庫結構顯示在下圖左邊的樹狀結構中,支持SQL的語法著色。
l授權協議:未知
l操作系統:Linux
25、SQLite資料庫管理SQLiteSpy
sqlitespy是一個快速和緊湊的資料庫SQLite的GUI管理軟體 。它的圖形用戶界面使得它很容易探討,分析和操縱sqlite3資料庫。
l授權協議:未知
l開發語言:Delphi/Pascal
l操作系統:Windows
26、資料庫開發工具Aqua Data Studio
Aqua DataStudio 是一個為資料庫開發人員准備的集成開發環境,可以對資料庫做查詢、管理,提供大量的資料庫工具,例如資料庫比較、源碼控制等,目前支持的資料庫包括:Oracle, DB2iSeries, DB2 LUW, MS SQL Server, Sybase ASE, Sybase Anywhere, Sybase IQ, Informix,PostgreSQL, MySQL, Apache Derby, JDBC, and ODBC.
l授權協議:未知
l開發語言:C/C++
l操作系統:跨平台
27、MySQL 架構管理工具MySQL MMM
MySQL Master-Master 架構常被用在 SQLquery 相依性低的情況,像是 counter常使用的INSERT INTO ... ON DUPLICATEKEY UPDATE a = a + 1不會因為out-of-order而造成問題。而 MySQL MMM算是其中一套寫得比較好的 MySQLMaster-Master架構管理工具。
l授權協議:未知
l開發語言:Python
l操作系統: Linux
28、MySQL Client
MySQL的客戶端工具,主界面如下:
l授權協議:未知
l操作系統:Windows
『肆』 ThinkPHP 3.2 版本升級了哪些內容
3.2.3更新日誌
[新增] 增加index連貫操作方法,用於數據集的強制索引操作
[新增] Model類增加using連貫操作用於多表操作
[新增] 增加strict連貫操作,用於設置數據寫入和查詢是否嚴格檢查是否存在欄位 默認情況下 不合法數據欄位自動刪除,如果設置了嚴格檢查則會拋出異常。 例如: $model->strict(true)->add($data);
[新增] 增加fetchSql連貫操作
[新增] 添加yaml_parse_file()函數,解析yaml文件返回一個數組
[新增] 增加memcache Session驅動
[新增] 增加聚合模型,方便一對一的關聯數據表操作
[新增] 新增TMPL_PATH常量支持 可以全局改版模板目錄到模塊目錄之外
[新增] 增加Lite模式Db類,僅支持原生SQL操作
[新增] 資料庫調試增加單獨的配置參數 DB_DEBUG(如未設置依然取調試模式常量 APP_DEBUG)
[新增] 新增框架核心葡萄牙語言包
[新增] 增加COOKIE_SECURE和COOKIE_HTTPONLY配置參數
[新增] MySQL驅動增加ON DUPLICATE KEY UPDATE功能
[改進] Db類和資料庫驅動類完全基於PDO重寫
[改進] 添加全局過濾機制(默認關閉)
[改進] I函數增加修飾符功能和正則檢測支持
[改進] 採用主從分布式資料庫時,從資料庫連接失敗自動連接主伺服器
[改進] 增加Model類對復合主鍵的支持
[改進] 改進Mongo模型和驅動類,使用更加方便
[改進] 改進session函數刪除操作支持數組
[改進] 改進session函數對多維賦值的支持
[改進] 改進資料庫欄位緩存的文件標識 加上數據表前綴,避免不同前綴的表產生混淆
[改進] 針對資料庫視圖無主鍵的問題,使用默認id作為主鍵,與未開啟DB_FIELDS_CACHE時行為一致
[改進] SAE模式慣例配置增加上傳驅動設置
[改進] 改進參數綁定機制
[改進] 確保使用參數綁定後日誌中生成sql語句的准確性
[改進] 模型類的setInc和setDec方法支持延遲寫入,同時取消高級模型的相關方法
[改進] 日誌寫入的時候自動創建目錄
[改進] 改進SQL緩存
[改進] 優化緩存隊列功能
[改進] 路由的請求類型定義不區分大小寫
[改進] 資料庫驅動增加通用insertAll方法支持
[改進] 完善 url的驗證正則
[改進] 單字母函數返回值類型修正以及一些拼寫錯誤修正
[改進] 自動創建模型模塊的父目錄 直接調用\Think\Build::buildController和buildModel的情況下創建目錄
[改進] 日誌驅動增加自動目錄創建支持
[改進] 自動生成的目錄結構增加模塊的緩存目錄
[改進] mysql存儲過程支持完善
[改進] Db類改進對多表更新和刪除的支持,多表刪除支持USING和JOIN操作
[改進] 改進parseLock的位置
[改進] Db類的update和delete方法增加多表操作的支持
[改進] 改進CURD操作 可以直接返回sql語句而不真正執行。
[改進] 插件控制器的命名空間可定義 不再局限於模塊下面 增加 ADDON_PATH 用於定義插件目錄 默認位於 應用目錄下面的Addon
[改進] 改進靜態緩存讀取的有效判斷對sae的支持
[改進] 日誌目錄分模塊
[改進] 模型類的getField方法改進 支持在欄位名中使用函數
[改進] 改進Db類的parseWhere方法
[改進] 改進模型的page和limit方法 改進分頁類
[改進] 改進配置文件自動生成
[改進] 完善ShowPageTraceBehavior一處函數調用大小寫規范
[改進] U函數支持多級控制器
[改進] send_http_status函數增加狀態
[改進] 允許在項目中定義 APP 常量
[改進] 改進定義TMPL_PATH後的模板路徑定義
[改進] Image類的imagick驅動save方法增加quality參數 用於圖片質量設置,默認值為80
[改進] 改進Image類的JPEG圖片生成質量
[改進] Gd庫驅動類改進
[改進] 改進T函數對TMPL_PATH常量定義的支持
[改進] 改進I函數對path.0的支持
[改進] 改進關聯模型
[改進] 改進dispatch_jump模板
[改進] 更新api模式支持配置文件的後綴定義
[改進] 改進Model類的getModelName方法對多層模型的支持
[改進] 改進cookie函數對secure和httponly的支持
[改進] 改進模板標簽對命名空間的支持,寫法 {$var|Org\Util\String::rand}
[改進] 改進數據表自動識別規則正則規則 可以正確識別帶有數字的數據表
[改進] Model類的cache方法使用改進 cache(10) 等同於 cache(true, 10)
[修正] 修正ShowRuntime行為擴展
[修正] 修正Model類的add和addall方法中的_facade和_parseOptions的調用順序問題
[修正] 修正使用數組方式動態指定表名後的BUG
[修正] 修正ChromShowPage行為擴展
[修正] 修正自定義公共模塊路徑時,載入公共模塊類庫失敗
[修正] 修正參數綁定的一處判斷
[修正] 解決PDO參數綁定後的獲取最終SQL語句問題
[修正] 修正開啟布局後show方法的問題
[修正] 解決調用trace()無法返回trace日誌問題
[修正] 修復mongo出現錯誤輸出的問題
[修正] 修正頁面Trace的日誌保存
[修正] 修正Model類的save方法
[修正] 修正令牌驗證沒有設置TOKEN_NAME的問題
[修正] 修復RestController中請求資源類型總是為html的bug
[修正] 修正Model類的getField方法的一處變數沖突問題
[修正] 修正Mongo驅動的page處理
[修正] 修正 extract方法 在分解變數的時候 可能導致變數被覆蓋的問題
[修正] 修正Imagick類庫
[修正] 修正頁面trace插件開啟PAGE_TRACE_SAVE後出錯的問題
[修正] 修正controller方法 對不使用命名空間的支持
[修正] 修正Image類的save方法支持圖片質量
[修正] 修正高級模型的樂觀鎖功能
[修正] 修正I函數通過FILTER_VALIDATE_EMAIL方式傳入常量過濾的一處錯誤 並且過濾參數支持數組
[修正] 修正GIF類的架構函數
[修正] Cache類一處常量錯誤修正
[修正] 修改自動生成的配置文件支持CONF_EXT定義
[刪除] 去掉多餘的URL_404_REDIRECT配置參數
3.2.2 更新日誌
[增加]配置文件增加yaml/json/xml/ini/自定義格式支持
[增加]增加load_config函數用於載入配置文件
[增加]增加CONF_EXT和CONF_PARSE常量,用於定義配置文件後綴及解析方法
[增加]模塊增加狀態配置文件
[增加]cookie函數增加httponly參數支持
[增加]增加COOKIE_HTTPONLY配置參數
[增加]增加插件的控制器訪問支持
[增加]增加CONTROLLER_PATH常量用於定義控制器的命名空間路徑
[增加]添加VAR_ADDON配置參數 用於設置默認的插件控制器命名空間變數
[增加]dispatcher類增加getSpace方法用於獲取控制器的命名空間路徑
[增加]I函數增加path和data類型變數的用法
[增加]引入composer支持(還需要完善)
[增加]xcahe和wincache驅動增加clear方法
[增加]自動生成機制支持多個模塊的控制器和模型類的批量生成
[修正]修正上傳類不能動態改變rootPath的BUG
[修正]修正RestController類的執行順序
[修正]修正Model類的參數綁定的一處BUG
[修正]修正CronRun行為擴展一處錯誤
[修正]修正GIF類
[修正]修正rest控制器的encodeData方法
[修正]修正ViewModel可能因空格導致Order方法錯誤的bug
[修正]修正MongoModel類的寫入數據的自增獲取
[修正]修正第三方模板引擎驅動類
[修正]修正自動載入可能的一處導致重復載入的問題
[修正]修正__CONTROLLER__ 在URL不區分大小寫情況下的獲取
[修正]修正Route類中請求類型判斷錯誤的bug
[修正]修正mysqli驅動的free方法
[改進]改進CronRun行為擴展
[改進]TOKEN_NAME 未設置時使用默認值__hash__
[改進]模類的_after_insert回調返回false後直接返回
[改進]Model類的save方法 如果data為空則不執行
[改進]Model類的delete方法 如果條件為空 則不執行刪除操作
[改進]改進獲取模塊方法,支持駝峰法模塊命名
[改進]改進模型的查詢方法對表前綴的支持,使用當前模型設置的表前綴
[改進]視圖模型的視圖定義中的_table屬性和關聯模型中的relation_table 支持 __TABLE_NAME__定義方式
[改進]Model類的query和execute方法支持 __TABLE_NAME__定義方式
[改進]改進PDO驅動對pgsql字元轉義的支持
[改進]改進Cookie函數對名稱中包含「.」的支持
[改進]改進Sae上傳驅動 增加file['url']信息存儲
[改進]Page類添加默認的listRows值
[改進]改進IS_CGI常量的判斷,支持fcgi
[改進]改進Db類的multiConnect方法 避免切換資料庫的時候 配置數據被緩存
[改進]改進Db類對傳入的參數 如果未設置數據編碼,設置默認的編碼為utf8
[改進]改進B方法支持對行為和擴展類的調用,需要傳入完整的類名
[改進]改進驗證碼類 添加驗證成功後是否重置session的參數 reset 默認為true
[改進]改進session和cookie函數,支持獲取全部
[改進]調試模式下,錯誤的查詢條件和非法數據寫入會拋異常
[改進]改進Model類的getField方法
[調整]設置VIEW_PATH後參數後無需再定義模塊子目錄
[調整]為了避免和函數規則沖突,規則路由排除分隔符改為「-」
3.2.1 更新日誌
[增加] 增加Rpc控制器支持
[增加] 添加原來的部分擴展類庫
[增加] 增加RestController
[增加] 添加Boris行為擴展
[增加] 增加Boris第三方類庫
[增加] 增加BIND_MODULE BIND_CONTROLLER BIND_ACTION 常量定義 用於在入口文件中綁定
[增加] 增加 mole_check 標簽位
[增加] 增加buildLite行為 用於根據當前環境生成運行時lite文件 可以替換框架入口文件運行,提高效率
[增加] Think類增加getMap方法
[增加] C函數增加默認值功能 可以是獲取配置參數的時候,當沒有定義的時候獲取傳入的默認值
[增加] 增加Yar擴展支持
[增加] 添加jsonRPC擴展
[增加] 增加Api應用模式擴展和Mode擴展目錄
[增加] 添加第三方模板引擎
[增加] 支持操作方法綁定到類
[增加] 增加Think\Auth類
[增加] 增加Hprose控制器和第三方類庫包
[增加] 增加CONF_PATH常量定義
[增加] 應用和模塊增加自動讀取當前應用模式配置文件的功能
[修正] 修正正則路由的一個函數處理的bug
[修正] 修正模板引擎類的一處bug
[修正] 修正L函數的一處錯誤
[修正] 修正驅動類一處錯誤
[修正] 修正MongoModel一處錯誤
[修正] 修正Verify類對多個驗證碼同一個頁面顯示的bug
[修正] 修正找不到Log類的錯誤
[修正] 修正模型類的一處bug
[修正] 修正session函數一處警告錯誤
[修正] 修正U函數的一處警告錯誤
[修正] 修正compile函數的一處bug
[修正] 修正驗證碼的背景圖片功能
[修正] Think\Image類常量修正
[修正] 修正Image類的架構方法錯誤
[修正] 修正Mongodb資料庫驅動
[修正] 修正trace方法在CLI下面中文輸出亂碼
[修正] 修正控制器類當調用不存在的方法的報錯
[改進] 改進操作方法的名稱識別
[改進] 改進資料庫驅動 支持不同的鏈接指定不同的charset參數
[改進] 改進get_client_ip函數
[改進] 改進L函數支持傳入變數
[改進] 改進PDO驅動 當版本低於PHP5.3.6的時候禁用模擬預處理語句
[改進] 調整dispatcher類的模塊、控制器和操作名獲取方法
[改進] 頁面trace擴展CLI下面不執行
[改進] 優化trace方法
[改進] 解決因配置文件載入順序錯誤導致在SAE環境中運行出錯的問題
[改進] 改進Storage類
[改進] 優化load_ext_file函數
[改進] Behavior類簡化(下一版本可能會廢棄)
[改進] 核心行為類簡化取消對Behavior的繼承
[改進] C函數並入系統函數庫文件
[改進] union連貫操作方法 字元串用法支持 TABLE_NAME 方式替換
[改進] 改進Jion和table連貫操作方法,當使用TABLE_NAME解析的時候支持動態指定的表前綴
[改進] 優化U函數
[改進] 路由類改進
[改進] 改進路由的閉包支持 閉包函數如果返回布爾值 則繼續執行後續 否則中止執行
[改進] 應用模式定義文件移動到MODE_PATH目錄下面 便於管理
[改進] 默認URL不區分大小寫
[改進] 改進路由閉包定義
[改進] 改進路由的額外參數傳入
[改進] 重寫查詢緩存功能
[改進] 關聯模型修改
[改進] Image類水印生成支持透明度參數
[改進] 改進Image驅動
[改進] 驗證碼類改進
[改進] 改進上傳類及驅動
[改進] session驅動類介面改進 無需定義execute方法
[改進] 靜態緩存僅在get請求下生效
[改進] 改進靜態緩存行為
[改進] 語言文件更新
[改進] Storage類的SAE驅動更新
[改進] 英文語言包修正
[改進] 改進PDO驅動
[改進] 默認生成的測試控制器規范改進
[刪除] 廢除APP_FILE_CASE參數配置 改為Windows下調試模式自動開啟區分大小寫
『伍』 php新手學習路線是怎樣的
第一階段:基礎階段(基礎PHP程序員)
重點:把LNMP搞熟練(核心是安裝配置基本操作) 目標:能夠完成基本的LNMP系統安裝,簡單配置維護;能夠做基本的簡單系統的PHP開發;能夠在PHP中型系統中支持某個PHP功能模塊的開發。
時間:完成本階段的時間因人而異,有的成長快半年一年就過了,成長慢的兩三年也有。
Linux
基本命令、操作、啟動、基本服務配置(包括rpm安裝文件,各種服務配置等);會寫簡單的shell腳本和awk/sed 腳本命令等。
Nginx
做到能夠安裝配置nginx+php,知道基本的nginx核心配置選項,知道 server/fastcgi_pass/access_log 等基礎配置,目標是能夠讓nginx+php_fpm順利工作。
MySQL
會自己搭建mysql,知道基本的mysql配置選項;知道innodb和myisam的區別,知道針對InnoDB和MyISAM兩個引擎的不同配置選項;知道基本的兩個引擎的差異和選擇上面的區別;能夠純手工編譯搭建一個MySQL資料庫並且配置好編碼等正常穩定運行;核心主旨是能夠搭建一個可運行的MySQL資料庫。
PHP
基本語法數組、字元串、資料庫、XML、Socket、GD/ImageMgk圖片處理等等;熟悉各種跟MySQL操作鏈接的api(mysql/mysqli/PDO),知道各種編碼問題的解決;知道常規熟練使用的PHP框架(ThinkPHP、Zendframework、Yii、Yaf等);了解基本MVC的運行機制和為什麼這么做,稍微知道不同的PHP框架之間的區別;能夠快速學習一個MVC框架。能夠知道開發工程中的文件目錄組織,有基本的良好的代碼結構和風格,能夠完成小系統的開發和中型系統中某個模塊的開發工作。
前端
如果條件時間允許,可以適當學習下 HTML/CSS/JS 等相關知識,知道什麼web標准,div+css的web/wap頁面模式,知道HTML5和HTML4的區別;了解一些基本的前端只是和JS框架(jQuery之類的);了解一些基本的JavaScript編程知識;(本項不是必須項,如果有時間,稍微了解一下是可以的,不過不建議作為重點,除非個人有強烈興趣)。
系統設計
能夠完成小型系統的基本設計,包括簡單的資料庫設計,能夠完成基本的:瀏覽器 -> Nginx+PHP -> 資料庫 架構的設計開發工作;能夠支撐每天幾十萬到數百萬流量網站的開發維護工作;
第二階段:提高階段 (中級PHP程序員)
重點:提高針對LNMP的技能,能夠更全面的對LNMP有熟練的應用。 目標:能夠隨時隨地搭建好LNMP環境,快速完成常規配置;能夠追查解決大部分遇到的開發和線上環境的問題;能夠獨立承擔中型系統的構架和開發工作;能夠在大型系統中承擔某個中型模塊的開發工作。
1. Linux
在第一階段的基礎上面,能夠流暢的使用Shell腳本來完成很多自動化的工作;awk/sed/perl 也操作的不錯,能夠完成很多文本處理和數據統計等工作;基本能夠安裝大部分非特殊的Linux程序(包括各種庫、包、第三方依賴等等,比如MongoDB/Redis/Sphinx/Luncene/SVN之類的);了解基本的Linux服務,知道如何查看Linux的性能指標數據,知道基本的Linux下面的問題跟蹤等。
2. Nginx
在第一階段的基礎上面,了解復雜一些的Nginx配置;包括 多核配置、events、proxy_pass,sendfile/tcp_*配置,知道超時等相關配置和性能影響;知道nginx除了web server,還能夠承擔代理伺服器、反向靜態伺服器等配置;知道基本的nginx配置調優;知道如何配置許可權、編譯一個nginx擴展到nginx;知道基本的nginx運行原理(master/worker機制,epoll),知道為什麼nginx性能比apache性能好等知識。
3. MySQL/MongoDB
在第一階段的基礎上面,在MySQL開發方面,掌握很多小技巧,包括常規SQL優化(group by/order by/rand優化等);除了能夠搭建MySQL,還能夠冷熱備份MySQL數據,還知道影響innodb/myisam性能的配置選項(比如key_buffer/query_cache/sort_buffer/innodb_buffer_pool_size/innodb_flush_log_at_trx_commit等),也知道這些選項配置成為多少值合適;另外也了解一些特殊的配置選項,比如 知道如何搭建mysql主從同步的環境,知道各個binlog_format的區別;知道MySQL的性能追查,包括slow_log/explain等,還能夠知道基本的索引建立處理等知識;原理方面了解基本的MySQL的架構(Server+存儲引擎),知道基本的InnoDB/MyISAM索引存儲結構和不同(聚簇索引,B樹);知道基本的InnoDB事務處理機制;了解大部分MySQL異常情況的處理方案(或者知道哪兒找到處理方案)。條件允許的情況,建議了解一下NoSQL的代表MongoDB資料庫,順便對比跟MySQL的差別,同事能夠在合適的應用場景安全謹慎的使用MongoDB,知道基本的PHP與MongoDB的結合開發。
4. Redis/Memcached
在大部分中型系統裡面一定會涉及到緩存處理,所以一定要了解基本的緩存;知道Memcached和Redis的異同和應用場景,能夠獨立安裝 Redis/Memcached,了解Memcahed的一些基本特性和限制,比如最大的value值,知道PHP跟他們的使用結合;Redis了解基本工作原理和使用,了解常規的數據類型,知道什麼場景應用什麼類型,了解Redis的事務等等。原理部分,能夠大概了解Memcached的內存結構(slab機制),redis就了解常用數據類型底層實現存儲結構(SDS/鏈表/SkipList/HashTable)等等,順便了解一下Redis的事務、RDB、AOF等機制更好。
5. PHP
除了第一階段的能力,安裝配置方面能夠隨意安裝PHP和各種第三方擴展的編譯安裝配置;了解php-fpm的大部分配置選項和含義(如max_requests/max_children/request_terminate_timeout之類的影響性能的配置),知道mod_php/fastcgi的區別;在PHP方面已經能夠熟練各種基礎技術,還包括各種深入些的PHP,包括對PHP面向對象的深入理解/SPL/語法層面的特殊特性比如反射之類的;在框架方面已經閱讀過最少一個以上常規PHP MVC框架的代碼了,知道基本PHP框架內部實現機制和設計思想;在PHP開發中已經能夠熟練使用常規的設計模式來應用開發(抽象工廠/單例/觀察者/命令鏈/策略/適配器 等模式);建議開發自己的PHP MVC框架來充分讓開發自由化,讓自己深入理解MVC模式,也讓自己能夠在業務項目開發里快速升級;熟悉PHP的各種代碼優化方法,熟悉大部分PHP安全方面問題的解決處理;熟悉基本的PHP執行的機制原理(Zend引擎/擴展基本工作機制)。
6. C/C++
開始涉獵一定的C/C++語言,能夠寫基本的C/C++代碼,對基本的C/C++語法熟悉(指針、數組操作、字元串、常規標准API)和數據結構(鏈表、樹、哈希、隊列)有一定的熟悉下;對Linux下面的C語言開發有基本的了解概念,會簡單的makefile文件編寫,能夠使用簡單的GCC/GDB的程序編譯簡單調試工作;對基本的網路編程有大概了解。(本項是為了向更高層次打下基礎)。
7. 前端
在第一階段的基礎上面,熟悉基本的HTTP協議(協議代碼200/300/400/500,基本的HTTP交互頭);條件允許,可以在深入寫出稍微優雅的HTML+CSS+JavaScript,或者能夠大致簡單使用某些前端框架(jQuery/YUI/ExtJS/RequireJS/BootStrap之類);如果條件允許,可以深入學習JavaScript編程,比如閉包機制、DOM處理;再深入些可以讀讀jQuery源碼做深入學習。(本項不做重點學習,除非對前端有興趣)。
8. 系統設計
能夠設計大部分中型系統的網站架構、資料庫、基本PHP框架選型;性能測試排查處理等;能夠完成類似:瀏覽器 -> CDN(Squid) -> Nginx+PHP -> 緩存 -> 資料庫 結構網站的基本設計開發維護;能夠支撐每天數百萬到千萬流量基本網站的開發維護工作;
第三階段:高級階段 (高級PHP程序員)
重點:除了基本的LNMP程序,還能夠在某個方向或領域有深入學習。(縱深維度發展) 目標:除了能夠完成基本的PHP業務開發,還能夠解決大部分深入復雜的技術問題,並且可以獨立設計完成中大型的系統設計和開發工作;自己能夠獨立hold深入某個技術方向,在這塊比較專業。(比如在MySQL、Nginx、PHP、Redis等等任一方向深入研究)
1. Linux
除了第二階段的能力,在Linux下面除了常規的操作和性能監控跟蹤,還能夠使用很多高級復雜的命令完成工作(watch/tcpmp/starce/ldd/ar等);在shell腳本方面,已經能夠編寫比較復雜的shell腳本(超過500行)來協助完成很多包括備份、自動化處理、監控等工作的shell;對awk/sed/perl 等應用已經如火純青,能夠隨意操作控制處理文本統計分析各種復雜格式的數據;對Linux內部機制有一些了解,對內核模塊載入,啟動錯誤處理等等有個基本的處理;同時對一些其他相關的東西也了解,比如NFS、磁碟管理等等;
2. Nginx
在第二階段的基礎上面,已經能夠把Nginx操作的很熟練,能夠對Nginx進行更深入的運維工作,比如監控、性能優化,復雜問題處理等等;看個人興趣,更多方面可以考慮側重在關於Nginx工作原理部分的深入學習,主要表現在閱讀源碼開始,比如具體的master/worker工作機制,Nginx內部的事件處理,內存管理等等;同時可以學習Nginx擴展的開發,可以定製一些自己私有的擴展;同時可以對Nginx+Lua有一定程度的了解,看看是否可以結合應用出更好模式;這個階段的要求是對Nginx原理的深入理解,可以考慮成為Nginx方向的深入專業者。
3. MySQL/MongoDB
在第二階段的基礎上面,在MySQL應用方面,除了之前的基本SQL優化,還能夠在完成一些復雜操作,比如大批量數據的導入導出,線上大批量數據的更改表結構或者增刪索引欄位等等高危操作;除了安裝配置,已經能夠處理更多復雜的MySQL的問題,比如各種問題的追查,主從同步延遲問題的解決、跨機房同步數據方案、MySQL高可用架構等都有涉及了解;對MySQL應用層面,對MySQL的核心關鍵技術比較熟悉,比如事務機制(隔離級別、鎖等)、對觸發器、分區等技術有一定了解和應用;對MySQL性能方面,有包括磁碟優化(SAS遷移到SSD)、伺服器優化(內存、伺服器本身配置)、除了二階段的其他核心性能優化選項(innodb_log_buffer_size/back_log/table_open_cache/thread_cache_size/innodb_lock_wait_timeout等)、連接池軟體選擇應用,對show *(show status/show profile)類的操作語句有深入了解,能夠完成大部分的性能問題追查;MySQL備份技術的深入熟悉,包括災備還原、對Binlog的深入理解,冷熱備份,多IDC備份等;在MySQL原理方面,有更多了解,比如對MySQL的工作機制開始閱讀部分源碼,比如對主從同步(復制)技術的源碼學習,或者對某個存儲引擎(MyISAM/Innodb/TokuDB)等等的源碼學習理解,如果條件允許,可以參考CSV引擎開發自己簡單的存儲引擎來保存一些數據,增強對MySQL的理解;在這個過程,如果自己有興趣,也可以考慮往DBA方向發展。MongoDB層面,可以考慮比如說在寫少讀多的情況開始在線上應用MongoDB,或者是做一些線上的數據分析處理的操作,具體場景可以按照工作來,不過核心是要更好的深入理解RMDBS和NoSQL的不同場景下面的應用,如果條件或者興趣允許,可以開始深入學習一下MongoDB的工作機制。
4. Redis/Memcached
在第二階段的基礎上面,能夠更深入的應用和學習。因為Memcached不是特別復雜,建議可以把源碼進行閱讀,特別是內存管理部分,方便深入理解;Redis部分,可以多做一些復雜的數據結構的應用(zset來做排行榜排序操作/事務處理用來保證原子性在秒殺類場景應用之類的使用操作);多涉及aof等同步機制的學習應用,設計一個高可用的Redis應用架構和集群;建議可以深入的學習一下Redis的源碼,把在第二階段積累的知識都可以應用上,特別可以閱讀一下包括核心事件管理、內存管理、內部核心數據結構等充分學習了解一下。如果興趣允許,可以成為一個Redis方面非常專業的使用者。
5. PHP
作為基礎核心技能,我們在第二階段的基礎上面,需要有更深入的學習和應用。從基本代碼應用上面來說,能夠解決在PHP開發中遇到95%的問題,了解大部分PHP的技巧;對大部分的PHP框架能夠迅速在一天內上手使用,並且了解各個主流PHP框架的優缺點,能夠迅速方便項目開發中做技術選型;在配置方面,除了常規第二階段會的知識,會了解一些比較偏門的配置選項(php auto_prepend_file/auto_append_file),包括擴展中的一些復雜高級配置和原理(比如memcached擴展配置中的memcache.hash_strategy、apc擴展配置中的apc.mmap_file_mask/apc.slam_defense/apc.file_update_protection之類的);對php的工作機制比較了解,包括php-fpm工作機制(比如php-fpm在不同配置機器下面開啟進程數量計算以及原理),對zend引擎有基本熟悉(vm/gc/stream處理),閱讀過基本的PHP內核源碼(或者閱讀過相關文章),對PHP內部機制的大部分核心數據結構(基礎類型/Array/Object)實現有了解,對於核心基礎結構(zval/hashtable/gc)有深入學習了解;能夠進行基本的PHP擴展開發,了解一些擴展開發的中高級知識(minit/rinit等),熟悉php跟apache/nginx不同的通信交互方式細節(mod_php/fastcgi);除了開發PHP擴展,可以考慮學習開發Zend擴展,從更底層去了解PHP。
6. C/C++
在第二階段基礎上面,能夠在C/C++語言方面有更深入的學習了解,能夠完成中小型C/C++系統的開發工作;除了基本第二階段的基礎C/C++語法和數據結構,也能夠學習一些特殊數據結構(b-tree/rb-tree/skiplist/lsm-tree/trie-tree等)方便在特殊工作中需求;在系統編程方面,熟悉多進程、多線程編程;多進程情況下面了解大部分多進程之間的通信方式,能夠靈活選擇通信方式(共享內存/信號量/管道等);多線程編程能夠良好的解決鎖沖突問題,並且能夠進行多線程程序的開發調試工作;同時對網路編程比較熟悉,了解多進程模型/多線程模型/非同步網路IO模型的差別和選型,熟悉不同非同步網路IO模型的原理和差異(select/poll/epoll/iocp等),並且熟悉常見的非同步框架(ACE/ICE/libev/libevent/libuv/Boost.ASIO等)和使用,如果閑暇也可以看看一些國產自己開發的庫(比如muo);同時能夠設計好的高並發程序架構(leader-follow/master-worker等);了解大部分C/C++後端Server開發中的問題(內存管理、日誌列印、高並發、前後端通信協議、服務監控),知道各個後端服務RPC通信問題(struct/http/thirft/protobuf等);能夠更熟絡的使用GCC和GDB來開發編譯調試程序,在線上程序core掉後能夠迅速追查跟蹤解決問題;通用模塊開發方面,可以積累或者開發一些通用的工具或庫(比如非同步網路框架、日誌庫、內存池、線程池等),不過開發後是否應用要謹慎,省的埋坑去追bug。
7. 前端
深入了解HTTP協議(包括各個細致協議特殊協議代碼和背後原因,比如302靜態文件緩存了,502是nginx後面php掛了之類的);除了之前的前端方面的各種框架應用整合能力,前端方面的學習如果有興趣可以更深入,表現形式是,可以自己開發一些類似jQuery的前端框架,或者開發一個富文本編輯器之類的比較瑣碎考驗JavaScript功力。
8. 其他領域語言學習
在基礎的PHP/C/C++語言方面有基本積累,建議在當前階段可以嘗試學習不同的編程語言,看個人興趣愛好,腳本類語言可以學學 Python/Ruby 之類的,函數式編程語言可以試試 Lisp/Haskell/Scala/Erlang 之類的,靜態語言可以試試 Java/Golang,數據統計分析可以了解了解R語言,如果想換個視角做後端業務,可以試試 Node.js還有前面提到的跟Nginx結合的Nginx_Lua等。學習不同的語言主要是提升自己的視野和解決問題手段的差異,比如會了解除了進程/線程,還有輕量級協程;比如在跨機器通信場景下面,Erlang的解決方案簡單的驚人;比如在不想選擇C/C++的情況下,還有類似高效的Erlang/Golang可用等等;主要是提升視野。
9. 其他專業方向學習
在本階段裡面,會除了基本的LNMP技能之外,會考慮一些其他領域知識的學習,這些都是可以的,看個人興趣和長期的目標方向。目前情況能夠選擇的領域比較多,比如、雲計算(分布式存儲、分布式計算、虛擬機等),機器學習(數據挖掘、模式識別等,應用到統計、個性化推薦),自然語言處理(中文分詞等),搜索引擎技術、圖形圖像、語音識別等等。除了這些高大上的,也有很多偏工程方面可以學習的地方,比如高性能系統、移動開發(Android/IOS)、計算機安全、嵌入式系統、硬體等方向。
10. 系統設計
系統設計在第二階段的基礎之上,能夠應用掌握的經驗技能,設計出比較復雜的中大型系統,能夠解決大部分線上的各種復雜系統的問題,完成類似 瀏覽器 -> CDN -> 負載均衡 ->接入層 -> Nginx+PHP -> 業務緩存 -> 資料庫 -> 各路復雜後端RPC交互(存儲後端、邏輯後端、反作弊後端、外部服務) -> 更多後端 醬紫的復雜業務;能夠支撐每天數千萬到數億流量網站的正常開發維護工作。
『陸』 ThinkPHP 3.2 版本升級了哪些內容
ThinkPHP 更新了很多從3.1-3.2這之間的我都給你看看!!!
[新增] 增加index連貫操作方法,用於數據集的強制索引操作
[新增] Model類增加using連貫操作用於多表操作
[新增] 增加strict連貫操作,用於設置數據寫入和查詢是否嚴格檢查是否存在欄位 默認情況下 不合法數據欄位自動刪除,如果設置了嚴格檢查則會拋出異常。 例如: $model->strict(true)->add($data);
[新增] 增加fetchSql連貫操作
[新增] 添加yaml_parse_file()函數,解析yaml文件返回一個數組
[新增] 增加memcache Session驅動
[新增] 增加聚合模型,方便一對一的關聯數據表操作
[新增] 新增TMPL_PATH常量支持 可以全局改版模板目錄到模塊目錄之外
[新增] 增加Lite模式Db類,僅支持原生SQL操作
[新增] 資料庫調試增加單獨的配置參數 DB_DEBUG(如未設置依然取調試模式常量 APP_DEBUG)
[新增] 新增框架核心葡萄牙語言包
[新增] 增加COOKIE_SECURE和COOKIE_HTTPONLY配置參數
[新增] MySQL驅動增加ON DUPLICATE KEY UPDATE功能
[改進] Db類和資料庫驅動類完全基於PDO重寫
[改進] 添加全局過濾機制(默認關閉)
[改進] I函數增加修飾符功能和正則檢測支持
[改進] 採用主從分布式資料庫時,從資料庫連接失敗自動連接主伺服器
[改進] 增加Model類對復合主鍵的支持
[改進] 改進Mongo模型和驅動類,使用更加方便
[改進] 改進session函數刪除操作支持數組
[改進] 改進session函數對多維賦值的支持
[改進] 改進資料庫欄位緩存的文件標識 加上數據表前綴,避免不同前綴的表產生混淆
[改進] 針對資料庫視圖無主鍵的問題,使用默認id作為主鍵,與未開啟DB_FIELDS_CACHE時行為一致
[改進] SAE模式慣例配置增加上傳驅動設置
[改進] 改進參數綁定機制
[改進] 確保使用參數綁定後日誌中生成sql語句的准確性
[改進] 模型類的setInc和setDec方法支持延遲寫入,同時取消高級模型的相關方法
[改進] 日誌寫入的時候自動創建目錄
[改進] 改進SQL緩存
[改進] 優化緩存隊列功能
[改進] 路由的請求類型定義不區分大小寫
[改進] 資料庫驅動增加通用insertAll方法支持
[改進] 完善 url的驗證正則
[改進] 單字母函數返回值類型修正以及一些拼寫錯誤修正
[改進] 自動創建模型模塊的父目錄 直接調用\Think\Build::buildController和buildModel的情況下創建目錄
[改進] 日誌驅動增加自動目錄創建支持
[改進] 自動生成的目錄結構增加模塊的緩存目錄
[改進] mysql存儲過程支持完善
[改進] Db類改進對多表更新和刪除的支持,多表刪除支持USING和JOIN操作
[改進] 改進parseLock的位置
[改進] Db類的update和delete方法增加多表操作的支持
[改進] 改進CURD操作 可以直接返回sql語句而不真正執行。
[改進] 插件控制器的命名空間可定義 不再局限於模塊下面 增加 ADDON_PATH 用於定義插件目錄 默認位於 應用目錄下面的Addon
[改進] 改進靜態緩存讀取的有效判斷對sae的支持
[改進] 日誌目錄分模塊
[改進] 模型類的getField方法改進 支持在欄位名中使用函數
[改進] 改進Db類的parseWhere方法
[改進] 改進模型的page和limit方法 改進分頁類
[改進] 改進配置文件自動生成
[改進] 完善ShowPageTraceBehavior一處函數調用大小寫規范
[改進] U函數支持多級控制器
[改進] send_http_status函數增加狀態
[改進] 允許在項目中定義 APP 常量
[改進] 改進定義TMPL_PATH後的模板路徑定義
[改進] Image類的imagick驅動save方法增加quality參數 用於圖片質量設置,默認值為80
[改進] 改進Image類的JPEG圖片生成質量
[改進] Gd庫驅動類改進
[改進] 改進T函數對TMPL_PATH常量定義的支持
[改進] 改進I函數對path.0的支持
[改進] 改進關聯模型
[改進] 改進dispatch_jump模板
[改進] 更新api模式支持配置文件的後綴定義
[改進] 改進Model類的getModelName方法對多層模型的支持
[改進] 改進cookie函數對secure和httponly的支持
[改進] 改進模板標簽對命名空間的支持,寫法 {$var|Org\Util\String::rand}
[改進] 改進數據表自動識別規則正則規則 可以正確識別帶有數字的數據表
[改進] Model類的cache方法使用改進 cache(10) 等同於 cache(true, 10)
[修正] 修正ShowRuntime行為擴展
[修正] 修正Model類的add和addall方法中的_facade和_parseOptions的調用順序問題
[修正] 修正使用數組方式動態指定表名後的BUG
[修正] 修正ChromShowPage行為擴展
[修正] 修正自定義公共模塊路徑時,載入公共模塊類庫失敗
[修正] 修正參數綁定的一處判斷
[修正] 解決PDO參數綁定後的獲取最終SQL語句問題
[修正] 修正開啟布局後show方法的問題
[修正] 解決調用trace()無法返回trace日誌問題
[修正] 修復mongo出現錯誤輸出的問題
[修正] 修正頁面Trace的日誌保存
[修正] 修正Model類的save方法
[修正] 修正令牌驗證沒有設置TOKEN_NAME的問題
[修正] 修復RestController中請求資源類型總是為html的bug
[修正] 修正Model類的getField方法的一處變數沖突問題
[修正] 修正Mongo驅動的page處理
[修正] 修正 extract方法 在分解變數的時候 可能導致變數被覆蓋的問題
[修正] 修正Imagick類庫
[修正] 修正頁面trace插件開啟PAGE_TRACE_SAVE後出錯的問題
[修正] 修正controller方法 對不使用命名空間的支持
[修正] 修正Image類的save方法支持圖片質量
[修正] 修正高級模型的樂觀鎖功能
[修正] 修正I函數通過FILTER_VALIDATE_EMAIL方式傳入常量過濾的一處錯誤 並且過濾參數支持數組
[修正] 修正GIF類的架構函數
[修正] Cache類一處常量錯誤修正
[修正] 修改自動生成的配置文件支持CONF_EXT定義
[刪除] 去掉多餘的URL_404_REDIRECT配置參數
3.2.2 更新日誌
[增加]配置文件增加yaml/json/xml/ini/自定義格式支持
[增加]增加load_config函數用於載入配置文件
[增加]增加CONF_EXT和CONF_PARSE常量,用於定義配置文件後綴及解析方法
[增加]模塊增加狀態配置文件
[增加]cookie函數增加httponly參數支持
[增加]增加COOKIE_HTTPONLY配置參數
[增加]增加插件的控制器訪問支持
[增加]增加CONTROLLER_PATH常量用於定義控制器的命名空間路徑
[增加]添加VAR_ADDON配置參數 用於設置默認的插件控制器命名空間變數
[增加]dispatcher類增加getSpace方法用於獲取控制器的命名空間路徑
[增加]I函數增加path和data類型變數的用法
[增加]引入composer支持(還需要完善)
[增加]xcahe和wincache驅動增加clear方法
[增加]自動生成機制支持多個模塊的控制器和模型類的批量生成
[修正]修正上傳類不能動態改變rootPath的BUG
[修正]修正RestController類的執行順序
[修正]修正Model類的參數綁定的一處BUG
[修正]修正CronRun行為擴展一處錯誤
[修正]修正GIF類
[修正]修正rest控制器的encodeData方法
[修正]修正ViewModel可能因空格導致Order方法錯誤的bug
[修正]修正MongoModel類的寫入數據的自增獲取
[修正]修正第三方模板引擎驅動類
[修正]修正自動載入可能的一處導致重復載入的問題
[修正]修正__CONTROLLER__ 在URL不區分大小寫情況下的獲取
[修正]修正Route類中請求類型判斷錯誤的bug
[修正]修正mysqli驅動的free方法
[改進]改進CronRun行為擴展
[改進]TOKEN_NAME 未設置時使用默認值__hash__
[改進]模類的_after_insert回調返回false後直接返回
[改進]Model類的save方法 如果data為空則不執行
[改進]Model類的delete方法 如果條件為空 則不執行刪除操作
[改進]改進獲取模塊方法,支持駝峰法模塊命名
[改進]改進模型的查詢方法對表前綴的支持,使用當前模型設置的表前綴
[改進]視圖模型的視圖定義中的_table屬性和關聯模型中的relation_table 支持 __TABLE_NAME__定義方式
[改進]Model類的query和execute方法支持 __TABLE_NAME__定義方式
[改進]改進PDO驅動對pgsql字元轉義的支持
[改進]改進Cookie函數對名稱中包含「.」的支持
[改進]改進Sae上傳驅動 增加file['url']信息存儲
[改進]Page類添加默認的listRows值
[改進]改進IS_CGI常量的判斷,支持fcgi
[改進]改進Db類的multiConnect方法 避免切換資料庫的時候 配置數據被緩存
[改進]改進Db類對傳入的參數 如果未設置數據編碼,設置默認的編碼為utf8
[改進]改進B方法支持對行為和擴展類的調用,需要傳入完整的類名
[改進]改進驗證碼類 添加驗證成功後是否重置session的參數 reset 默認為true
[改進]改進session和cookie函數,支持獲取全部
[改進]調試模式下,錯誤的查詢條件和非法數據寫入會拋異常
[改進]改進Model類的getField方法
[調整]設置VIEW_PATH後參數後無需再定義模塊子目錄
[調整]為了避免和函數規則沖突,規則路由排除分隔符改為「-」
3.2.1 更新日誌
[增加] 增加Rpc控制器支持
[增加] 添加原來的部分擴展類庫
[增加] 增加RestController
[增加] 添加Boris行為擴展
[增加] 增加Boris第三方類庫
[增加] 增加BIND_MODULE BIND_CONTROLLER BIND_ACTION 常量定義 用於在入口文件中綁定
[增加] 增加 mole_check 標簽位
[增加] 增加buildLite行為 用於根據當前環境生成運行時lite文件 可以替換框架入口文件運行,提高效率
[增加] Think類增加getMap方法
[增加] C函數增加默認值功能 可以是獲取配置參數的時候,當沒有定義的時候獲取傳入的默認值
[增加] 增加Yar擴展支持
[增加] 添加jsonRPC擴展
[增加] 增加Api應用模式擴展和Mode擴展目錄
[增加] 添加第三方模板引擎
[增加] 支持操作方法綁定到類
[增加] 增加Think\Auth類
[增加] 增加Hprose控制器和第三方類庫包
[增加] 增加CONF_PATH常量定義
[增加] 應用和模塊增加自動讀取當前應用模式配置文件的功能
[修正] 修正正則路由的一個函數處理的bug
[修正] 修正模板引擎類的一處bug
[修正] 修正L函數的一處錯誤
[修正] 修正驅動類一處錯誤
[修正] 修正MongoModel一處錯誤
[修正] 修正Verify類對多個驗證碼同一個頁面顯示的bug
[修正] 修正找不到Log類的錯誤
[修正] 修正模型類的一處bug
[修正] 修正session函數一處警告錯誤
[修正] 修正U函數的一處警告錯誤
[修正] 修正compile函數的一處bug
[修正] 修正驗證碼的背景圖片功能
[修正] Think\Image類常量修正
[修正] 修正Image類的架構方法錯誤
[修正] 修正Mongodb資料庫驅動
[修正] 修正trace方法在CLI下面中文輸出亂碼
[修正] 修正控制器類當調用不存在的方法的報錯
[改進] 改進操作方法的名稱識別
[改進] 改進資料庫驅動 支持不同的鏈接指定不同的charset參數
[改進] 改進get_client_ip函數
[改進] 改進L函數支持傳入變數
[改進] 改進PDO驅動 當版本低於PHP5.3.6的時候禁用模擬預處理語句
[改進] 調整dispatcher類的模塊、控制器和操作名獲取方法
[改進] 頁面trace擴展CLI下面不執行
[改進] 優化trace方法
[改進] 解決因配置文件載入順序錯誤導致在SAE環境中運行出錯的問題
[改進] 改進Storage類
[改進] 優化load_ext_file函數
[改進] Behavior類簡化(下一版本可能會廢棄)
[改進] 核心行為類簡化取消對Behavior的繼承
[改進] C函數並入系統函數庫文件
[改進] union連貫操作方法 字元串用法支持 TABLE_NAME 方式替換
[改進] 改進Jion和table連貫操作方法,當使用TABLE_NAME解析的時候支持動態指定的表前綴
[改進] 優化U函數
[改進] 路由類改進
[改進] 改進路由的閉包支持 閉包函數如果返回布爾值 則繼續執行後續 否則中止執行
[改進] 應用模式定義文件移動到MODE_PATH目錄下面 便於管理
[改進] 默認URL不區分大小寫
[改進] 改進路由閉包定義
[改進] 改進路由的額外參數傳入
[改進] 重寫查詢緩存功能
[改進] 關聯模型修改
[改進] Image類水印生成支持透明度參數
[改進] 改進Image驅動
[改進] 驗證碼類改進
[改進] 改進上傳類及驅動
[改進] session驅動類介面改進 無需定義execute方法
[改進] 靜態緩存僅在get請求下生效
[改進] 改進靜態緩存行為
[改進] 語言文件更新
[改進] Storage類的SAE驅動更新
[改進] 英文語言包修正
[改進] 改進PDO驅動
[改進] 默認生成的測試控制器規范改進
[刪除] 廢除APP_FILE_CASE參數配置 改為Windows下調試模式自動開啟區分大小寫