PHP基礎筆記

來源:互聯網
上載者:User
要求:

將知識點整理到部落格園 每個知識點要配上代碼測試,並且代碼是自己獨自敲出來的。 對於安裝配置操作整理成文檔,對代碼進行整理。

韓順平推薦

研究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.外部排序法:資料量過大,無法全部載入到記憶體中,需要藉助外部儲存空間 進行排序。包括合并排序和直接合并排序法。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.