《php與mysql權威指南》第一部分
第一部分 準備篇
第1章 Apache基礎
1.1 Apache介紹:開源的http伺服器軟體
web系統架構也被成為B/S架構-瀏覽器/伺服器架構
工作原理:瀏覽器向伺服器傳送一個http請求,伺服器對接收到的請求資訊進行處理,然後將處理結果返回給瀏覽器,最終將瀏覽器處理後的結果呈現給使用者
apache特點:簡單、快速、高效、穩定
1.2 Apache安裝與部署
1.3 httpd.conf深入剖析
httpd.conf:基本伺服器配置,伺服器的資源對映檔案,伺服器的訪問許可權等
站點基本配置:
ServerRoot "":Apache軟體安裝位置
PidFile logs/httpd.pid:第一個httpd程序的程序號檔案(所有其他程序的父程序)
Listen 80:監聽埠號
ServerName www.example.com:主站點的名稱
ServerAdmin [email protected]:管理員的郵件地址
DocumentRoot "":主站點的網頁儲存地址
DirectoryIndex index.html index.htm index.php:主頁檔案的設定
伺服器優化配置
利用的主要優勢:更好的支援多處理器
---
httpd -l # 列出Apache的所有模組
---
工作模式如下:
prefork:伺服器啟動5個httpd程序(加上父程序,一共6個)
---
ps -ax|grephttpd #檢視httpd程序
---
worker:現成監聽客戶的連結,當新客戶連結時,其中一個空閒執行緒接受連線,伺服器啟動兩個程序,50個執行緒,當執行緒不夠用時,伺服器會自動fork一個程序,再產生25個執行緒
perchild:紫禁城數量固定,執行緒數不受限制
HTTP響應頭的資訊配置
ServerTokens用來設定頭部返回的apache版本資訊,引數如下
Apache/2.0.54(Unix)mod_ssl/2.0.54 OpenSSL/0.9.7g
prod:僅軟體名稱;
Major:包括主版本號
Minor:包括次版本號
Min:僅完整版本號
OS:包括作業系統型別
Full:包括Apache支援的模組及模組版本號
永續性連結配置
KeepAlive On:開啟永續性連線功能
MaxKeepAliveRequest 100:一個連線服務的最多請求次數
KeepAliveTimeOut 30:測試一次連線中的多次請求傳輸之間的時間,如果伺服器已經完成一次請求,但一直沒有接收到客戶程式的下一次請求,在間隔超過了這個引數設定的值之後,伺服器就斷開連線,預設15s
1.4 日誌記錄
日誌的配置
ErrorLog file-path|syslag[:facility] # 指定當伺服器遇到錯誤時記錄錯誤的日誌檔案
LogLevel用於調整記錄在錯誤日誌中的資訊的詳細程度
emerg,alert,crit,error,warn,notice,info,debug
CustomLog file|pipe format|nickname [env=[!]environment-variable] # 用來對伺服器的請求進行日誌記錄
錯誤日誌:ErrorLog指令控制
示例:[Fri Mar 12 23:04:10 2010][error][client 127.0.0.1] script 'E:/www/test.php' not found or unable to stat
引數說明:
[Fri Mar 12 23:04:10 2010]:錯誤發生的時間
[error]:錯誤級別
[client 127.0.0.1]:導致錯誤的ip地址
script 'E:/www/test.php' not found or unable to stat:錯誤原因
訪問日誌
存放檔案和記錄的格式指令:CustomLog
定義日誌內容格式指令:LogFormat
通用日誌格式
設定
LogFormat "%h %l %u %t \"%r\" %>s %b" common
CustomLog "" common
產生結果
127.0.0.1 - - [12/Mar/2010:23:08:09 +0800] "GET /test.php HTTP/1.1" 404 206
引數解釋:
127.0.0.1:傳送請求到伺服器的客戶端ip地址
第一個'-':由客戶端identd程序判斷的RFC1413身份,-表示此處資訊無效
第二個'-':http認證系統得到的訪問該網頁客戶端標識,401代表客戶端未通過認證,-代表不需要認證
[12/Mar/2010:23:08:09 +0800]:伺服器完成請求處理的時間 +0800代表時區
"GET /test.php HTTP/1.1":客戶端發出的請求行
404:伺服器返回給客戶端的狀態碼
206:返回給客戶端不包含響應頭的位元組數
組合日誌格式
設定
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{user-agent}i\" " combined
CustomLog "" combined
產生結果
123.206.210.160 - - [28/Oct/2018:04:01:27 +0800] "GET /help.php HTTP/1.1" 404 206 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:28.0) Gecko/20100101 Firefox/31.0"
引數解釋:
多出來的-:referer請求頭,-代表內容為空
"Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:28.0) Gecko/20100101 Firefox/31.0":user-agent請求頭,客戶端提供的瀏覽器識別資訊
1.5 虛擬主機
通過<VirtualHost>區塊指令來識別不同的身份(虛擬主機)
基於主機名的虛擬主機
NameVirtualHost *:80 # 指定主機的IP地址和埠號
<VirtualHost *:80>
DocumentRoot "/var/www/html"
ServerName www.example.com
ServerAlias www.example.com
ServerAlias 114.115.159.177
ErrorLog "logs/localhost-error_log"
</VirtualHost>
基於IP地址的虛擬主機
NameVirtualHost 192.168.1.1 # 指定主機的IP地址和埠號
<VirtualHost 192.168.1.1> # 注意要與外邊的一致
DocumentRoot "/var/www/html"
ServerName www.example.com
ServerAlias www.example.com
ServerAlias 114.115.159.177
ErrorLog "logs/localhost-error_log"
</VirtualHost>
1.6 URL重寫
mod_rewrite模組:基於正則表示式分析器的重寫引擎來實現重寫url請求
指令分為伺服器級和目錄級
伺服器級作用域為服務下的所有網站,在httpd.conf中配置
目錄級只對.htaccess檔案所在目錄有效,在.htaccess中配置
工作步驟:
接收一個具有一定規則的url請求
按照設定的規則進行匹配,成功則生成匹配結果
通過匹配結果進行下一步操作
開啟重寫功能
httpd.conf檔案中LoadModule rewrite_module modules/mod_rewrite.so去掉註釋
常用指令
RewriteEngine On|Off:開啟|關閉重寫引擎
RewriteBase url_path:設定重寫根目錄
RewriteCond test CondPattern [flags]:定義重寫規則的條件,滿足該條件進行重寫
RewriteRule Pattern Substitution [flags]:定義重寫規則的條件,滿足該條件進行重寫
RewriteLogLevel level:重寫引擎日誌的詳細程度的級別,預設為0(不記錄),9代表記錄所有操作(level很大會降低伺服器速度)
1.7 實戰案例
防圖片盜鏈
通過http referer進行限制,設定預設圖片
apache偽靜態
通過程式生成靜態化頁面|rewrite模組來實現
使用者訪問許可權設定
建立使用者
---
htpasswd -c 目錄/htaccess user1
---
httpd.conf開啟如下三個模組
LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule auth_file_module modules/mod_authn_file.so
LoadModule auth_user_module modules/mod_authz_user.so
/conf/extra/檔案中
<Directory "C:/apache2.2/htdocs/shop/"> # 注意要與外邊的一致
Options Indexes MultiViews
AllowOverride None
Order allow,deny
Allow from all
</Directory>
<Directory "C:/apache2.2/htdocs/shop/">
AuthType Basic [None | Basic | Digest | Form,後三種為不同的加密方式] #指定認證型別模型
AuthName 請輸入使用者名稱和密碼 # 驗證登入框的提示資訊
AuthUserFile /usr/file/password # 指定驗證資訊檔案的存放目錄
Require user user1 # 指定允許訪問的使用者,多個使用者之間用空格隔開
</Directory>
2.1 在windows上安裝iis
2.2 PHP的安裝和配置
在windows下的安裝和配置
在linux下的安裝和配置
apache安裝和配置
安裝包拷貝到"/usr/local"下
---
cp httpd-2.2.17.tar.gz /usr/local/
---
切換目錄為"/usr/local",建立httpd目錄
---
cd /usr/local
mkdir httpd
---
解壓安裝包,解壓後進入目錄
---
tar zxvf httpd-2.2.17.tar.gz
cd httpd-2.2.17
---
配置項檢測,生成makefile檔案,為make做準備
---
./configure --prefix=/usr/local/httpd --enable-so
---
編譯
---
make
---
安裝
---
make install
---
apache啟動:/usr/local/httpd/bin/apachetcl start
apache停止:/usr/local/httpd/bin/apachetcl stop
安裝libxml---xml c語言版的解析器
與apache安裝相同
PHP安裝預配置
安裝同Apache安裝
配置項檢測出的異同:
---
./configure --prefix=/usr/local/php --with-apxs2=/usr/local/httpd/bin/apxs --with-libxml-dir=/usr/local/libxml2 --with-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config --with-pdo-mysql=/usr/local/mysql
---
安裝完成後修改配置檔案
---
gedit /usr/local/httpd/conf/httpd.conf
---
在末尾新增如下兩行
-----
AddDefaultCharset UTF-8
AddTypr application/x-httpd-php.php
-----
修改目錄的使用者許可權
---
chown -R /usr/local/httpd/htdocs/
chmod -R 755 /usr/local/httpd/htdocs/
---
測試
-----
<?php
phpinfo();
?>
-----
拷貝PHP.ini檔案
---
cp /usr/local/php-5.2.14/php/ini-recommended /usr/local/php/lib/php.ini
---
2.3 MySQL的安裝預配置
windows下的安裝和配置
linux下的安裝語篇日誌
建立mysql賬號,並加入組群
---
/usr/sbin/groupadd mysql
/usr/sbin/useradd -g mysql mysql
---
拷貝安裝包
解壓
建立到跟那個解壓的資料夾的連結,並命名為mysql
---
ln -s mysqll-5.1.53-linux-i686-glibc23 mysql
---
進入目錄並安裝
---
cd mysql
./scripts/mysql_install_db --user=mysql
---
拷貝mysql配置檔案到系統目錄,並重命名為my.cnf
---
cp ./support-files/my-medium.cnf /ext/my.cnf
---
啟動mysql:/usr/local/mysql/bin/mysqld_safe --user=mysql&
停止mysql:/usr/local/mysql/bin/mysqldadmin -u root -p shutdown
登入:/usr/local/mysql/bin/mysql -u root -p
2.4 php與mysql連線
PHP.ini檔案去掉註釋
extension=php_mysql.dll
extension=php_mysqli.dll
extension=php_pdo_mysql.dll
關係型資料庫;mysql sqlserver,oracle
資料庫抽象層:metabase/pear:db/pdo/adodb