一.Apache基礎(chǔ)
1.網(wǎng)站幾個的基本概念
- 靜態(tài)網(wǎng)站:
不支持數(shù)據(jù)交互的網(wǎng)站,單純的靜態(tài)文件(HTML,CSS,Js組合),后綴一般html,htm.
- 動態(tài)網(wǎng)站:
支持數(shù)據(jù)交互的網(wǎng)站,動態(tài)網(wǎng)站中是可以操作靜態(tài)網(wǎng)頁的.
-
實現(xiàn)動態(tài)網(wǎng)站的技術(shù)
實現(xiàn)技術(shù) 網(wǎng)站后綴 ASP asp PHP php .NET aspx JAVA jsp
- 網(wǎng)絡請求過程:
客戶端給服務器發(fā)送一個請求:(HTTP請求),服務器會把靜態(tài)資源(HTML代碼,圖片,js,css)發(fā)送到客戶端(HTTP response),客戶端通過瀏覽器解析返回的代碼,呈現(xiàn)頁面給用戶.
- 端口和端口號:
端口號范圍0-65535, 1024一下的端口號一般都留給系統(tǒng). 80端口一般留給web服務用, 21端口留給FTP, 25端口留給郵件服務器用.
- 查詢當前電腦打開的端口:
win: netstat -ano
mac: lsof -i
- BS和CS架構(gòu)
B: Browser 瀏覽器
S: Server 服務器
C: Client 客戶端
BS架構(gòu):通過瀏覽器去訪問服務器
CS架構(gòu):通過客戶端軟件去訪問服務器
- 前臺和后臺
前臺: 給瀏覽者看到的
后臺: 給管理者操作的,后臺是用來操作前臺的數(shù)據(jù)的.
站點:把和網(wǎng)站有關(guān)的素材都放到一個文件夾,此文件夾就叫站點.
- Apache
語言的運行需要環(huán)境,Apache為PHP運行提供環(huán)境,(IIS)
亦可以為PHP提供環(huán)境,IIS是微軟開發(fā)的為ASP和aspx提供環(huán)境的.
自定義安裝Apache需要設(shè)置安裝路徑.
還可以設(shè)置配置.
一般操作有:start,stop,restart.
目錄結(jié)構(gòu):
bin: apache的命令文件夾
conf: 配置文件
htdocs: 虛擬目錄
httpd.conf, apache 重要的配置文件
PHP:自定義安裝要配置apache配置文件的目錄
- 常見的數(shù)據(jù)庫
Access(MS,微軟),MySql(甲骨文),SQL Server(MS),Oracle(甲骨文)
- lamp/wamp 更改虛擬目錄(htdocs)
在Apache的配置文件中配置PHP虛擬目錄的位置.
在httpd.conf配置文件中查找DocumentRoot,進行修改.指定新目錄后還要設(shè)置目錄的訪問權(quán)限
.在Directory,找到對應的文件夾,將權(quán)限設(shè)置為allow from all.
- 虛擬目錄和站點的區(qū)別
站點:單純的一個文件夾
虛擬目錄:文件夾 + 權(quán)限
- 更改首頁
在Apache的配置文件查找DirectoryIndex,添加相應的文件為默認首頁
更改監(jiān)聽端口號:
Listen port
可以監(jiān)聽多個端口號
listen 80
listen 90
- DNS 解析
Domain Name System 域名解析系統(tǒng),將域名解析成 ip地址.互聯(lián)網(wǎng)上唯一標示一臺計算機的是ip地址.不方便記憶,所以用域名對應一個ip地址.
客戶端輸入域名,首先會請求最近的DNS服務器,將域名解析成ip地址.最近的DNS解析服務器是本機.在 /etc/hosts文件下,所以可以設(shè)置虛擬域名
- 虛擬主機
一個Apache支持多個網(wǎng)站,從瀏覽者角度看,每個網(wǎng)站都是一個獨立的主機,稱為虛擬主機.
開啟虛擬主機的配置:
1.在Apache配置文件夾下 conf/extra/httpd-vhosts.conf 開啟.
2.打開虛擬主機配置文件
<VirtualHost*:80>
DocumentRoot "/usr/php" //主機地址
ServerName www.hahaha.com //綁定的域名
<Directory "/usr/php">
Allow from all //設(shè)置權(quán)限
</Directory>
</VirtualHost>
- 虛擬主機 = 站點 + 站點的權(quán)限+域名+端口號
二.PHP基礎(chǔ)知識整理
PHP: Hypertext Preprocessor 超文本預處理器,是一種通用的開源腳本語言,PHP運行在服務器端.
- PHP4種定界符
1.標準風格
<?php
//statement
?>
2.短標記風格:默認不支持,要在PHP配置文件中php.ini開啟支持短標記,short_open_tag = On
<?
//statement
?>
3.asp風格,asp_taps = On
<%
//statement
%>
4.script風格
<script language="php">
//statement
</script>
PHP 語句以分號結(jié)尾;關(guān)鍵字不區(qū)分大小寫,變量名區(qū)分大小寫.
變量命名: 變量是計算機內(nèi)存中的一段空間.PHP的變量名必須以$開頭,$不是變量名的組成部分,僅表示PHP變量名從此處開始.除了$符號,字母,下劃線開頭,后面緊跟字母數(shù)字下劃線.
//賦值
$a = 10;
$b = $a;
$c = &$a; //傳地址
$a++;
echo $b; //10
echo $c; //11
- 銷毀變量
通過unset()來銷毀變量,銷毀的是變量名.值是由PHP垃圾回收機制銷毀的.
<?php
$a = 10;
$b = &$a;
unset($a);
echo $b; // 10
?>
- 常量
當一個值在腳本執(zhí)行周期內(nèi)不發(fā)生變化,可以將值聲明為常量.用關(guān)鍵字 define()定義,常量名不能有$開頭
<?php
define("name","xiaoQQ");
echo name;
?>
默認情況下常量名是區(qū)分大小寫的,可以設(shè)置define的第三個參數(shù)來設(shè)置是否區(qū)分大小寫的:TRUE不區(qū)分,FALSE區(qū)分大小寫.常量不能重復定義
//多人合作時要判斷
<?php
define("name","hahaha");
if(!define("name")){
define("name");
}
?>
考慮和const定義常量的區(qū)別.
使用const使得代碼簡單易讀,const本身就是一個語言結(jié)構(gòu)褥琐,而define是一個函數(shù)哑了。另外const在編譯時要比define快很多丈攒。
(1).const用于類成員變量的定義镣陕,一經(jīng)定義变抽,不可修改彤敛。define不可用于類成員變量的定義牌借,可用于全局常量碍庵。
(2).const可在類中使用映企,define不能。
(3).const不能在條件語句中定義常量静浴。
- PHP執(zhí)行的原理
客戶端向服務器發(fā)送一個請求,如果請求的是一個HTML頁面,服務器直接將HTML頁面發(fā)送到客戶端給瀏覽器解析.如果請求的是PHP頁面,服務器則會運行PHP頁面然后生成標準的HTML代碼發(fā)送到客戶端.
- PHP的數(shù)據(jù)類型
1.基本類型
整型integer: -231~231-1
浮點型float(double)
布爾類型boolean:TRUE,FALSE.
字符串類型string
2.復合類型
array數(shù)組:
object對象:
3.特殊類型
resource資源:PHP的外部數(shù)據(jù)
NULL無類型,空值
- 字符串
單引號字符串是真正的字符串,雙引號字符串要將變量給替換.單引號不需要運算,執(zhí)行效率相對高點.
變量如果在字符串的簽名或者中介,要用{}包含
否則會報錯:未定義變量
<?php
$name = "xiaoming";
echo "{$name} is my name";
//or
echo "${name} is my name";
?>
- 數(shù)組:計算機內(nèi)存中的一段連續(xù)空間,通過下標來區(qū)分數(shù)組.
數(shù)組分成:
索引數(shù)組:通過元素的位置做下標,默認從零開始,每次增長1,可以更改數(shù)組的起始下標
關(guān)聯(lián)數(shù)組: 字符串做下標
<?php
//索引數(shù)組
$names = array("tom","ted","color","rose");
echo $names[0],'<br>';
//關(guān)聯(lián)數(shù)組(字典)
$emp = array("name"=>"xiaoming","gender"=>"male","age"=>23);
echo $emp["name"],'<br>';
$arr1 = array(1=>'a','b','c'); //修改起始下標
//Array([1]=>a [2]=>b [3]=>c)
$arr2 = array('a',2=>'b','c',5=>'d');
//Array([0]=>a [2]=>b [3]=>c [5]=>d); //每次增長1
$arr3 = array(1=>'a',1=>'b',1=>'c','d');
//Array([1]=>c [2]=>d); //會替換
?>
- 輸出語句 echo和print,print_r,var_dump
echo :只能輸出數(shù)字,字符串,對于布爾類型,TRUE輸出1,FALSE輸出0,可以一次輸出多個參數(shù),沒有返回值
print :和echo很類似,一次只能輸出一個參數(shù),輸出成功返回1,失敗返回0
print_r :用來輸出數(shù)組,輸出的內(nèi)容包括 key 和value,不包括數(shù)據(jù)類型
var_dump :如果輸出普通變量,輸出的變量的值和變量的類型.如果輸出的是數(shù)組,包括值,鍵,值的數(shù)據(jù)和類型
PHP注釋 //單行注釋 ,/**/ 多行注釋
運算符
一元運算符: 負號, ++(遞增1),--(遞減1)
二元運算: + , - , * ,/
- 號在js,java中可以做數(shù)字的相加,也可以做字符串相連接,在PHP中,只能做數(shù)字運算
<?php
echo '10' + '20'; //30
echo '10aa' + '20bb'; //30
echo 'aa' + 'bb'; //0
?>
- 比較運算符
, >=, <, <=, ==, !=, ===, !==
== 只比較值, === 比較值和數(shù)據(jù)類型
<?php
$a = 10;
$b = 'b';
if($a == $b){
echo 'equal';
}else {
echo 'not equal';
}
//equal
echo "<br>";
if($a === $b){
echo "全等";
}else {
echo "不全等";
}
//不全等
echo "<br>";
$a = "abc";
$b = 0;
if($a == $b){
echo "equal";
}else {
echo "not equal";
}
//equal
?>
邏輯運算符: &&(與) ||(或者) !(非)
字符串拼接: .點號
賦值運算符: =, +=, *=, /=, %=, .=
三目運算符: 表達式?值1:值2
<?php
$sum = 20;
echo $um%2==0?'偶數(shù)':'奇數(shù)'; //偶數(shù)
?>
- 判斷語句
單分支: if(){}
雙分支:if(){} else {}
多分支: if(){} elseif(){} ... else{}
is_numeric()判斷是否是數(shù)字或者數(shù)字字符串;
is_int() 判斷是否是整型
把數(shù)字字符串轉(zhuǎn)換為數(shù)字 $num+=0;
- 循環(huán)語句
for(初始值;條件;增量){};
while(條件){};
do{}while(條件);
foreach :用來遍歷數(shù)組
<?php
$stu = array("tom","berry","haha","hi");
foreach($stu as $value){
echo $value;
}
foreach($stu as $key=>$value){
echo $value;
}
$names = array("name"=>"xiaoming","gender"=>"male","age"=>23);
foreach($names as $k=>$v){
echo "{$v}=>{$v}<br>"
}
?>
函數(shù)
預定義函數(shù): php已經(jīng)定義的函數(shù),如is_numeric(),var_dump(),is_int();
自定義函數(shù)
<?php
function functionName(parameters){
//function body
[return];
}
?>
- 解決頁面亂碼
1.加meta標簽 <meta charset="utf-8">
2.php設(shè)置header: header('Content-Type:text/html;charset=utf-8');
- 訪問全局變量
<?php
$num1 = 10;
function fun(){
$num2 = 20;
echo $GLOBALS["num1"]+$num2222222;
}
?>
三.數(shù)據(jù)庫
數(shù)據(jù)庫的發(fā)展: 文件系統(tǒng)(使用磁盤文件來存儲數(shù)據(jù))=>第一代數(shù)據(jù)庫(出現(xiàn)了網(wǎng)狀模型,層次模型的數(shù)據(jù)庫)=>第二代數(shù)據(jù)庫(關(guān)系型數(shù)據(jù)庫和結(jié)構(gòu)化查詢語言)=>新一代數(shù)據(jù)庫("關(guān)系-對象"型數(shù)據(jù)庫);
層次模型是一種導航結(jié)構(gòu)堰氓,
優(yōu)點:分類管理,如果查詢同一類的數(shù)據(jù)是很方便的苹享。
缺點:如果查詢很多不是同一類的數(shù)據(jù)双絮,效率就很低了
層次結(jié)構(gòu)可以造成數(shù)據(jù)無效,比如張經(jīng)理管理了一個員工叫張三得问,李經(jīng)理也管理了一個叫張三囤攀,我們無法區(qū)分張三是一個人還是兩個人。
網(wǎng)狀模型解決了層次模型數(shù)據(jù)無效的問題宫纬,但是沒有解決導航問題,深層率查詢,效率很低.
關(guān)系模型中焚挠,每個表都是獨立的,通過公共字段來建立關(guān)系漓骚。優(yōu)點:表是獨立的蝌衔,需要什么數(shù)據(jù)就到那個表中查詢。
缺點:多表查詢的時候效率低下蝌蹂。
關(guān)系:兩個表的公共字段叫關(guān)系
- SQL語句
Structured Query Language 結(jié)構(gòu)化查詢語言,是用來操作關(guān)系型數(shù)據(jù)庫的.常用的關(guān)系型數(shù)據(jù)有:
Access,MySQL,Sql Server,Oracls.
標準的SQL是所有關(guān)系型數(shù)據(jù)庫都支持的操作語句,標準的SQL也叫作SQL-92.但是每個數(shù)據(jù)庫在標準的基礎(chǔ)上又擴展了自己的東西.所有,一個數(shù)據(jù)庫的拓展語句在在其他數(shù)據(jù)庫不能運行.
- 連接數(shù)據(jù)庫
需要的參數(shù): Host (-h),username (-u), password (-p),port(默認3306) (-P)
mysql -u root -h localhost -p
退出數(shù)據(jù)庫:exit,quit,\q
數(shù)據(jù)庫操作:數(shù)據(jù)庫的本質(zhì)是一個文件.操作數(shù)據(jù)庫的軟件叫做數(shù)據(jù)庫管理系統(tǒng).
/**
* 創(chuàng)建數(shù)據(jù)庫
* 如果創(chuàng)建的數(shù)據(jù)庫已經(jīng)存在,會報錯.所以一般要進行判 斷.
* 同時,如果數(shù)據(jù)庫名是關(guān)鍵字或者純數(shù)字,需要加上反引 號,最好的辦法是任何時候都加反引號
*/
Create database db_name [charset=字符編碼]
Create database if not exists db_name [charset=字符編碼]
/**
*/
2. 查詢數(shù)據(jù)庫
show database;
3.顯示數(shù)據(jù)庫的創(chuàng)建語句
show create database create db_name;
4. 更改數(shù)據(jù)庫
alter database db_name [option];
//eg:alter database haha charset=gbk;
5. 刪除數(shù)據(jù)庫:如果數(shù)據(jù)庫不存在會報錯
drop database if exists db_name;
6. 選擇數(shù)據(jù)庫
use db_name;
- 數(shù)據(jù)庫表的操作
幾個概念:
行row:也叫記錄,一行就是一條記錄
列(column) : 一列就是一個字段,字段也叫屬性,一個表中包含多個字段
1.創(chuàng)建表:(primary key)主鍵不能重復,不能為空,一個表只能有一個主鍵,主鍵可以由多個字段組成.
create table table_name(
field1 data_type [null | not null][default][auto_increment][primary key],
field2 data_type,
...,
);
2. 查看所有表
show tables;
3.顯示創(chuàng)建表的SQL語句
show create table table_name [\G];
4.顯示表結(jié)構(gòu)
describe [desc] table_name;
5.刪除表
drop tabel table_name1,table_name2,...;
數(shù)據(jù)類型:
int,decimal(總位數(shù),小數(shù)位數(shù)) 存小數(shù) decimal(10,3), char(1):定長, varchar(10):可變長度, text:大段文字
- 數(shù)據(jù)操作
1.插入數(shù)據(jù):插入字段可以和數(shù)據(jù)庫中字段順序不一致,但是值和插入的字段順序必須一致. 如果插入字段省略掉,插入的值和數(shù)據(jù)庫表的字段的順序和個數(shù)都要一致.
insert into table_name (field1,field2) values (value1,value2);
//自動增長的插入
insert into student values (null,"name","female","shenzhen",22);
//默認值的插入
insert into student values (null,"name","female",default,33);
2.數(shù)據(jù)的修改
update table_name set field1=value1,field2=value2 [where 條件];
//eg:
update student set gender="male" where name="xiaoming";
update student set gender = "female";
3.刪除數(shù)據(jù)
delete from table_name [whre 條件];
delete from student where name = "haha";
delete from student; //所有的數(shù)據(jù)都刪除了
4 .查詢數(shù)據(jù)
select 列名 from 表 [where 條件] [order by 排序字段 asc|desc] [limit [起始位置默認0],或者的記錄數(shù)量];
升序:asc
降序:desc
默認升序
select name,gender from student;
select * from; //獲取所有
select * from student order by score desc;
select * from student limit 3;
select * from student limit 2,10;
select * from student order by score desc limit 3;
//取出第一位
select * from stu order by score desc limit 0,1
- 運算符
比較運算符: > , >=, <, <=, = , <>(不等于)
邏輯運算符: and, or, not
聚合運算:
Sum(), Avg(), Min(), Count(), Max().
select max(score) from student;
select min(score) from student;
select sum(score) from student;
select avg(score) from student;
select count(*) from student;
select count(*) from student where gender="male";
4.PHP與MySQL
- php開啟MySQL拓展,PHP本身是一個框架,它的功能是由PHP拓展而來的,要通過PHP連接數(shù)據(jù)庫,必須開啟PHP連接MySQL的功能,就是PHP的MySQL拓展. 在php.ini中,把extension=php_mysql.dll 開啟,重啟服務器.
1.php連接數(shù)據(jù)庫
$connect = mysql_connect("localhost",'root','password') or die("數(shù)據(jù)庫連接失敗");
/**
通過@符號屏蔽信息
$connect = @mysql_connect("localhost",'root','password') or die("數(shù)據(jù)庫連接失敗");
*/
2. 終止執(zhí)行:exit(),和die();
die()停止執(zhí)行,把生成的代碼發(fā)送到客戶端.
3. 選擇數(shù)據(jù)庫
方法1: 執(zhí)行 use db_name
mysql_query("use database_name") or die("數(shù)據(jù)選擇失敗");
方法二:
mysql_select_db("database_name") or die ("數(shù)據(jù)庫選擇失敗");
4. 設(shè)置字符編碼
mysql_query("set names utf8");
5.查詢數(shù)據(jù)庫 : 返回一個資源類型的數(shù)據(jù)
$results = mysql_query("select * from products"); //resource type
mysql_fetch_row: 取出結(jié)果集中數(shù)據(jù)
開始匹配,指針指向第一個記錄.取出資源中的當前記錄,匹配成索引數(shù)組,指針指向下一條記錄.
5.1.
while($rows = mysql_fetch_row($results)){
echo $rows[0];
echo "<br>";
echo $rows[1];
echo "<br>";
echo $rows[2];
echo "<br>";
echo $rows[3];
echo "<br>";
}
這種方法讀取數(shù)據(jù)缺點:數(shù)據(jù)庫字段發(fā)生變化,會影響數(shù)組的索引編碼.
5.2: mysql_fetch_assoc : 形成關(guān)聯(lián)數(shù)組
數(shù)組的鍵和數(shù)據(jù)表的字段名相關(guān)聯(lián)
while($rows = mysql_fetch_assoc($results)){
echo $rows["name"];
echo "<br>";
echo $rows["gender"];
echo "<br>";
echo $rows["age"];
echo "<br>";
echo $rows["id"];
echo "<br>";
}
5.3: mysql_fetch_object: 匹配成對象,通過->訪問
while($obj=mysql_fetch_object($results)){
echo $rows->name;
echo "<br>";
echo $rows->gender;
echo "<br>";
echo $rows->age;
echo "<br>";
echo $rows->id;
echo "<br>";
}
6. 釋放資源 mysql_free_result($results);
7. 關(guān)閉連接 mysql_close($connect);
頁面執(zhí)行完畢后,所有變量全部銷毀,可以不用手動釋放資源.
數(shù)據(jù)的導入與導出噩斟,用phpMyAdmin工具