要求:
將知識點整理到部落格園 每個知識點要配上代碼測試,並且代碼是自己獨自敲出來的。 對於安裝配置操作整理成文檔,對代碼進行整理。
韓順平推薦
研究linux核心
研究演算法
研究網路技術(網管,網路安全)
研究資料庫
PHP筆記 .php目前由zend公司管理,mysql(mysql->sun->oracle) (LAMP) 跨平台,同時支援多種資料庫;效率比較高,具有良好的安全性。免費使用;開放原始碼(學習別人的代碼); Php4,php5開始支援物件導向 弱資料類型 Web網站:WEB網站是多個web資源的集合。簡單點說,可以把web應用理解為硬碟上的一個目錄,這個目錄用於管理多個web資源。Web網站通常稱之為web網站或web項目/工程。
PHP的基本概念 php是personla homepage 目前由zend公司管理 php嵌入到html代碼,php指令碼運行在服務端 1994(php1.0),1995(php2.0),1997(php3.0),2000(php4.0),2008(php5.0) Php6.0增加:更好的支援web2.0,支援更加好的Unicode支援,物件導向編程支援力度增加,對XMl編程支援,soap(簡單對象協議)
l 軟體開發中有個非常重要的原則:編譯環境和運行環境要一致。
l 資料先在官網上找,多上英文網站
B/S和C/S的比較 開發成本低,管理維護簡單,產品升級便利,對使用者的培訓費用低,使用者使用方便,出現故障的機率小;安全性不足;用戶端不能隨心變化,受到瀏覽器的限制。 瞭解發送和接受到的內容。工具:httpwatch Lighttpd伺服器,nginx伺服器 Apache手冊 管理apache,通過命令列來管理:httpd ?k start[shutdown|restart] Httpd.conf Apache目錄結構 Apache伺服器
bin:該目錄用於存放apache常用的命令,比如httpd,apachemonitor
cgi-bin:該目錄存放Linux下的常用命令.sh
conf:存放設定檔httpd.conf
error:錯誤記錄
htdocs:存放我們的網站的檔案夾(預設情況下),如果有多個網站,可以通過檔案夾來分類
icons:存放表徵圖
logs:記錄apache的相關日誌
manual:手冊
modules:apahche模組
Apache啟動時會對讀httpd.conf,載入相關模組
運行機製圖
Mpm:mutil processing module 多重處理模組
Apr:可移植運行庫
Apache的生命週期 配置虛擬目錄
我們把web應用放在apache預設的hdocs目錄下,apache就會自動的管理。
l 添加虛擬目錄節點
#歡迎頁面
DirectoryIndex index.html index.htm,index.php
#網站別名
Alias /myblog “D:/myblog”
#存取權限設定
Order allow,deny
Allow from all
l 注釋DocumentRoot "D:/phpenv/apache/htdocs"
10. 存取權限設定
#表示對d盤下面的myblog檔案設定使用權限設定
#表示先許可所有的ip訪問,deny表示拒絕所有ip訪問,先看allow後看deny
Order allow,deny
#先看看allow
Allow from all
案例
#先看deny再看allow,allow中的設定會覆蓋deny
Order deny,allow
Allow from 218.20.253.2
#218.20開頭的ip被拒絕
Deny from 218.20
11. 虛擬機器主機的設定
l 啟用httpd-vhosts.conf:在httpd.conf檔案中添加
Include
l 在\extra\httpd-vhosts.conf配置虛擬機器主機
#這裡配置歡迎首頁面
DirectoryIndex index.html index.htm index.php
options FollowSymLinks
#不許可別人修改我們的頁面
AllowOverride None
#設定存取權限
Order allow,deny
Allow from all
l 修改hosts檔案,講www.sohu.com重新導向到本地的頁面
練習:
在Httpd.conf檔案中配置一台www.sohu.cn的虛擬機器主機(一個網站,網站),然後在window系統中註冊www.sohu.cn這台主機
在httpd.conf檔案中啟用httpd-vhosts.conf,即把#登出掉,
Include conf/extra/httpd-vhosts.conf
假設我們的虛擬機器主機在c:\myweb(即一個網站)
設定http-vhosts.conf檔案
在hosts檔案中添加我們的ip和主機映射關係:c:/windows/system32/drivers/etc/hosts
(想想hosts的網域名稱配置公網Ip和內網ip)
在虛擬機器主機的根目錄中建立一個名稱為itcast網站,並在該應用下建立一個index.html頁面,然後把web應用映射到預設web應用,index.html版面設定為web應用的首頁
l 訪問網頁的流程
例如:訪問http://www.sohu.com/news.html
1) 解析主機www.sohu.com
2) 查詢本地hosts檔案:windows/sys32/drivers/../hosts(ip127.0.0.1對應網域名稱)
3) 如果本地Hosts檔案沒找到ip,到dns(網域名稱伺服器)ip 網域名稱
4) 找到ip
5) 發送http請求包
6) Apache解析http請求包:解析主機,解析網站名稱,解析資源名稱
7) 取得資源
12. 配置Apache支援php(apache在預設情況下是不會處理php)
套件軟體:appserver或者wmap。該軟體把我們需要環境打包安裝
Php和apache的整合(即讓apache可以處理php):
#讓apache載入php處理模組
LoadModule php5_module ~php安裝路徑/php5apache2_2.dll
#phpinidir這個用於指定php的ini檔案,
PHPIniDir ”~php模組安裝路徑”
#這個配置表示,當有一個資源是*.php的時候就由php來處理
AddType application/x-httpd-php .php .phtml
將php.ini-devlopment檔案改成php.ini。因為我們的php的設定有需要在php.ini修改。啟動開發模式。
在php.ini中指定擴充模組路徑extension_dir=~php安裝路徑/ext(裡面有很多功能庫,形庫,資料庫庫等),指定php的擴充庫路徑
讓php支援mysql功能:在php.ini中啟用php_mysql
如果沒有啟動,會報錯找不到相關函數。
安裝mysql
安裝phpmyadmin(phpmyadmin是一個網站,所以直接解壓到網站根目錄下面)
安裝並配置discuz論壇
1) 準備一個discuz論壇代碼
2) 將其解壓到 網站根目錄下
3) 把discuz的upload檔案拷貝到discuz檔案夾下
4) 修改config.inc.php.資料庫配置,以及一個管理員$forumfounders=’admin
5) 訪問http://localhost/discuz’
完成配置:一台伺服器上有多個網站,讓每個網站配置一個網域名稱
解決方案1:
1) 通過連接埠來區分不同的網站:按照綁定一個網站的方法做好準備
修改httpd.conf啟用虛擬機器主機配置Virtual hosts;配置httpd-vhosts.conf檔案;在hosts檔案中添加ip和網域名稱的對應關係;
同樣添加一個新的網域名稱與該ip綁定
在httpd-vhosts.conf中添加虛擬機器主機127.0.0.1:81
讓apache監聽81連接埠:加一個Listen 81
在hosts檔案中再添加新的網域名稱127.0.0.1 www.***.com
瀏覽器訪問www.***.com:81
解決方案2:
通過ServerName連接埠區分不同的網域名稱
在httpd-vhosts.conf檔案中添加配置:
ServerName www.***.com
DirectoryIndex news.html
PHP變數(注意資料和變數概念的不一樣) php變數是以$打頭定義的,php變數的資料類型是變化的,php變數的資料類型是由運行時的上下文來決定的。 php是弱資料類型程式設計語言(資料類型不要轉來轉去) php基礎資料型別 (Elementary Data Type):整形integer,小數(浮點型)float/double(php不區分單精確度和雙精確度),布爾類型boolean,字串型
php複合類型:數組array,對象(object)
php特殊資料類型:null,資源類型(resource):$conn=mysql_connect(“localhost”,”root”,”root”);
|
$a=890;
Var_dump($a);
$a=1.1;
Var_dump($a);
?> |
整型的細節討論
a) 八進位:$a=0123;,十六進位$a=0xAH;
b) Php不支援不帶正負號的整數,即php的整數都是有符號數。一般佔4個位元組。可以通過PHP_INT_SIZE可以顯示我們自己的機器,一個整數用幾個位元組表示。Echo PHP_INT_SIZE;最大整數echo PHP_INT_MAX,如果超過了,整形會自動轉換為float;(需要整理最大最小值)
c) 如果給定一個數超出了integer的範圍,將會被解釋為float
思考實踐題:
|
$a;
//如果唯寫了$a,但是沒有賦值
Var_dump($a);//NULL,表示沒有分配記憶體空間
Echo $a;
?> |
代碼考量:健壯性,擴充性,安全性,代碼的效率(並發,效率) 布爾類型的細節討論
a) True,false都不區分大小寫
b) 下面的值會被當做false對待:
布爾值FALSE自身
整型值0
浮點型值0.0
Null 字元串,以及字串“0”
不包括任何元素的數組
不包括任何成員變數的對象
特殊類型NULL(包括尚未設定的變數)
浮點型細節
a) 浮點數(也叫雙精確度或實數),浮點數的精度是14(從左邊開始就是,第一個非0數就是精度開始;$a=0.23456789022222988;$b=0.00002222233334444;
b) 浮點數的字長和平台相關,通常最大值是1.8e308並具有14位十進位數位精度(這個限制很重要)
字串細節
a) 一個字元佔用一個位元組;$a=”hello”;佔5個位元組
b) 理論上,我們對字串大小沒有限制,即只有不超過記憶體就可
c) 我們定義字串的時候,可以用單引號,也可以使用雙引號,區別如下:雙引號會解釋變數的值。如果字串包含在單引號中,除了來處理\”時,會輸出\”外,其它規則都一樣。
當一個變數包含在“”號中時,會輸出它的值,而包含在’’號中是輸出其字元本身。
Php字元類型的自動轉換
變數的類型不由程式員設定的,確切地說,是由PHP根據該變數使用的上下文在運行時決定的,可以通過var_dump($變數1,$變數2…)方式來顯示其類型。(PHP是不需要編譯就能啟動並執行)
10. php常量
a) 常量前面沒有貨幣符號$
b) 常量用define()函數定義或者const,而不能通過指派陳述式,在定義的時候就需要賦初值;常量的名稱,一般全部大寫,然後用底線間隔;
define(“TAX_RATE”,0.08);在程式中我們不希望某個值變化,則考慮使用常量,比如圓周率,稅率….
const TAX_RATE=0.08;
c) 常量可以不用理會變數的範圍而在任何地方定義和訪問;
d) 常量一旦定義就不能被重新定義或者取消定義;
e) 常量的值是標量【基礎資料型別 (Elementary Data Type):】
11. 運算式
運算式是PHP最重要的基石。在PHP中,幾乎所寫的任何東西都是一個運算式。
所謂運算式,就是任何有值的東西。$a=7/3;如何將小數位元儲存到2位(函數處理)
比較子:$a===$b全等$a!==$b非全等(值相等,並且類型也相同)
$a!=$b只有值不相等,則為true
$a!==$b只要值不相等,或者類型不相等,則為true
字串運算子(.):當兩個基礎資料型別 (Elementary Data Type)用.串連的時候,就表示把他們的內容當做字串拼接起來。
類型運算子:instanceof用於確定一個PHP變數是否屬於某一類class的執行個體。不能去判斷是否屬於基礎資料型別 (Elementary Data Type)。
12. Switch可以使用的資料類型可以是:整形,小數,字串,布爾型,null。從我們學習if和switch分支來看,if往往是對某一個範圍的判讀,而switch是對一個點的判斷。
PHP函數 基本概念:為完成一功能的程式指令(語句)的集合。在php中,函數分為:自訂函數,系統函數(php語句本身提供,可以直接使用的函數,php設計者認為,在項目開發的過程,很多人都會用的一些功能)。函數的基本結構:
Function 函數名(參數…){
//函數體
return 傳回值;(可以沒有)
}
函數的參數可以是多個,並且資料類型是php語言支援的任意類型;函數的命名跟自訂變數一樣,首字母只能是_,A-Z,a-z開頭,不要用數字或者特殊字元開頭。
Php中頁面相互調用
a) require()和require_once()
一般放在php頁面的最前面,php執行前,就先讀入require所包含的頁面,一旦出現錯誤,則退出程式(報錯)。
這兩個區別為,前面遇到即包含檔案,後者會判斷是否已經包含過了,如果包含過了,則不再包含檔案。一可以節省資源,而可以避免重新定義的錯誤。
b) include()和include_once()
可以放在php頁面的調用函數前,當php執行到時,才會讀入include所引入的php頁面,如果出現錯誤,程式不會退出,會繼續執行。
區別:前者Include遇到即包含檔案,後者include_once()
c) include和require區別(同時include_once和require_once區別)
相同的地方:都是可以引入別的頁面
區別:include如果出現錯誤,程式繼續運行;require出現錯誤,則會終止程式。
d) 使用哪個:做項目的時候,基本上使用的是require_once()
php執行時,一旦遇到函數的調用,就會開闢一個新棧 函數只是一個定義,函數執行的規則是只要一看到函數,則php就會開闢一個新棧 各個棧間的變數是相互獨立的。(搞懂全域變數,局部變數)
PHP中有三種提示:
Notice:注意 waring:警告 error:錯誤
如果在函數中,我們不希望使用某個變數,或者是希望徹底的不再使用某個變數,則可以使用unset(變數名)來銷毀變數。 在php函數中,我們可以給某個參數,賦一個預設的值。 Php預設是值傳遞,如果需要引用(地址)傳遞,使用&變數名。 $a=1>>2;
$b=-1>>2;
$c=1<<2;
$d=-1<<2;
Echo “a=”.a;
?>
二進位:逢二進一。使用二進位只有0,1兩個數,簡單易於電子方式實現。同時,通過0,1的組合可以表示任意一個數。
原碼,反碼,補碼:
1--> 原碼 00000000 00000000 00000000 00000001
a) 二進位的最高位是符號位:0表示整數,1表示負數
b) 整數的原碼,反碼,補碼都一樣
c) 負數的反碼=它的原碼的符號位不變,其他位取反
-1 -->原碼:10000000 00000000 00000000 00000001
反碼:11111111 11111111 11111111 11111110
補碼:11111111 11111111 11111111 11111111
d) 負數的補碼=它的反碼+1
e) 0的反碼,補碼都是0
f) Php沒有無符號數之說,即:php中的輸都是有符號的
g) 在電腦運算的時候,都是以補碼的方式來運算的。意思就是不管一個數是正數還是負數,都要轉成補碼,然後進行運算。
Php中有4個位元運算,分別是“按位與&”,“按位或|”,“按位異或^”,”按位取反~”,運算規則如下:
按位與&:兩位全為1,結果為1
按位或|:兩位有一個為1,結果為1
按位異或^:兩位一個為0,一個為1,結果為1
按位取反~:0->1,1->0
步驟:求出補碼(因為所有的運算都是以補碼的方式進行的)
~2=? -3
補碼:00000000 00000000 00000000 00000010
11111111 11111111 11111111 11111101(結果是補碼)->原碼
反碼:11111111 11111111 11111111 11111100(先減1)
原碼:10000000 0000000 0000000 000000011(-3)
2&3:首先找到2和3的補碼 =2
2的補碼:00000000 00000000 00000000 00000010
3的補碼:00000000 00000000 00000000 00000011
2&3 :00000000 00000000 00000000 00000010
位移運算:對位元進行左右移動,運算規則是:
>>算數右移:低位溢出,符號位不變,並用符號位補溢出的高位
<<算數左移:符號位不變,低位補0
$a=1>>2; $a=0
1的補碼:00000000 00000000 00000000 00000001
1>>2 : 0000000 000000000 00000000 00000000 (0)
$b=-1>>2; -1
-1的原碼:10000000 00000000 00000000 00000001
-1的反碼: 11111111 1111111 1111111 11111110
-1的補碼: 1111111 11111111 11111111 11111111
-1<<2 : 1111111 11111111 11111111 11111100
-1>>2 : 1111111 11111111 11111111 11111111 (結果為反碼)
反碼: 1111111 11111111 11111111 11111110
原碼: 1000000 0000000 000000000 00000001(-1)
數組 排序 尋找 為什麼要數組:可以用於存放多個資料的資料類型,我們稱為數組。 概念
$array[0]=123;
[0]--> 下標,關鍵字
$array[0]-->數組的一個元素
123 -->元素對應的值
$array--->數組名
在php數組中,元素存放的值可以是任意資料類型的。
$arr[true]=”hello”; ==>$arr[1]
$arr[false]=”world”;==>$arr[0];
$arr[null]=”北京”;==>$arr[null]或者$arr[“”];
如果用小數做索引值,會自動截斷小數部分。
我們可以使用print_r來顯示數組的情況。
PHP的數組是可以動態增長的。
$a = array(2,3);
$a[2]=56;
Echo $a[2];
一維數組引用陷阱:$arr[bar]=”hello,world”;
Echo$arr[bar];(會把bar當做常量)
$a[0]=1;$a[1]=2;$a[2]=5;
Count($a); =3
$a[0]=1;$a[5]=2;$a[10]=5;
Count($a); =3
$arr=array();
Echo count($arr); =0
Unset()函數允許銷毀數組中的某個元素,也可以刪除某個變數,但要注意數組的關鍵字不會重新索引。
?>
數組預設傳遞的是值,不是地址。對象預設傳遞的是地址。
排序,選擇排序法,插入排序法 排序是將一組資料,依指定的順序進行排列的過程。排序是一個程式員基本功。 分類:a. 內部排序法:將需要處理的所有資料都載入到內部儲存空間中進行排序。包括交換式排序法(冒泡法,快速排序法),選擇式排序法和插入式排序法
b.外部排序法:資料量過大,無法全部載入到記憶體中,需要藉助外部儲存空間 進行排序。包括合并排序和直接合并排序法。