【php學習】PHP 入門經典第二章筆記

問題答疑:php

1.默認狀況下,Apache服務器的配置文件名、MySQL服務器的配置文件名以及PHP預處理器配置文件名分別是什麼?
Apache默認主配置文件:根目錄下config文件夾下httpd.conf
Mysql服務器的配置文件名:根目錄下my.ini
PHP預處理器配置文件:根目錄php.inihtml

 

Apache的啓動、關閉、重啓
  啓動命令:service httpd start
  關閉命令:service httpd stop
  重啓命令:service httpd restartweb

Apache服務器的安裝與配置

文檔:http://httpd.apache.org/docs/2.4/正則表達式

指令:http://httpd.apache.org/docs/2.4/mod/core.htmlsql

1、配置文件apache

語法瀏覽器

* 主配置文件httpd.conf,更改只有重啓服務纔會生效
* 配置中一行一個命令,若是要多行一個命令,則最後以\結束,且與該行最後個字符無其它字符或者空白
* 每行註釋以#開頭,會被忽略,一行命令符後不能再接註釋
* 空行空白字符在配置文件中被忽略
* 配置文件錯誤檢測能夠經過 Test Configuration來完成(httpd.exe -w -t -f "D:\Software\GreenSoft\Apache\conf\httpd.conf" -d "D:\Software\GreenSoft\Apache\.")緩存


模塊安全

Related Modules Related Directives
--------------------------------------------
mod_so <IfModule>
LoadModule服務器

* httpd基於模塊化,編譯配置時,默認會把基本的功能模塊加載到服務器內核。
* 對於動態加載的模塊能夠經過LoadModule指令在任什麼時候候完成。
* <IfModule>可用於條件加載
* Dos命令 httpd.exe -l 能夠查看已經加載的模塊

* httpd.exe支持的參數指令

-D name : define a name for use in <IfDefine name> directives
-d directory : specify an alternate initial ServerRoot
-f file : specify an alternate ServerConfigFile
-C "directive" : process directive before reading config files
-c "directive" : process directive after reading config files
-n name : set service name and use its ServerConfigFile
-k start : tell Apache to start
-k restart : tell running Apache to do a graceful restart
-k stop|shutdown : tell running Apache to shutdown
-k install : install an Apache service
-k config : change startup Options of an Apache service
-k uninstall : uninstall an Apache service
-w : hold open the console window on error
-e level : show startup errors of level (see LogLevel)
-E file : log startup errors to file
-v : show version number
-V : show compile settings
-h : list available command line options (this page)
-l : list compiled in modules
-L : list available configuration directives
-t -D DUMP_VHOSTS : show parsed settings (currently only vhost settings)
-S : a synonym for -t -D DUMP_VHOSTS
-t -D DUMP_MODULES : show all loaded modules
-M : a synonym for -t -D DUMP_MODULES
-t : run syntax check for config files
-T : start without DocumentRoot(s) check

 

指令做用範圍


Related Modules Related Directives
-----------------------------------------
<Directory>
<DirectoryMatch>
<Files>
<FilesMatch>
<Location>
<LocationMatch>
<VirtualHost>

* 指令範圍標籤能夠指定指令生效的範圍,其能夠嵌套
* 能夠經過在<VirtualHost>標籤中放置多個指令以同時支持多個虛擬主機站點
* 節點配置參見:http://httpd.apache.org/docs/2.4/sections.html

 

.htaccess文件

* httpd經過在站點目錄裏面放置.htaccess文件容許配置分散
* .htaccess的語法與主配置文件一致,對於該配置文件的變動只要請求過來會當即生效
* 能夠在.htaccess中放置的指令見:http://httpd.apache.org/docs/2.4/mod/directive-dict.html#Context
* 若是有權限配置主配置,則應避免使用.htaccess文件方式來配置,這種方式影響服務器性能
1)配置.htaccess文件後,httpd會查找每一個目錄的.htaccess文件,無論你實際有沒有使用
2)文檔被請求的時候,.htaccess文件每次都會被加載

3)httpd會在多層目錄中查找.htaccess文件,以應用完整的指令。
4).htaccess中地址重寫指令中的正則表達式在每次請求的時候從新編譯。
5)安全問題,用戶在修改.htaccess使管理員對配置的管理失控。只有設置AllowOverride指令纔可使用戶使用指定的指令。

 


* 在.htaccess中配置指令與在主配置中配置Dirctory塊能夠達到相同效果,可是後者有更好的性能。

Contents of .htaccess file in /www/htdocs/example
AddType text/example .exm

等價於:

Section from your httpd.conf file

<Directory /www/htdocs/example>
AddType text/example .exm
</Directory>


* 禁用.htaccess能夠用指令 AllowOverride None

 

2、Apache目錄結構

根目錄
|-- bin 程序命令目錄
|-- build
|-- cgi-bin
|-- conf 配置文件目錄
|-- error
|-- htdocs 編譯安裝時站點目錄
|-- icons
|-- include
|-- lib 
|-- logs 默認日誌文件存放包括錯誤日誌(error_log)和訪問日誌(access_log) tail -f access_log能夠隨時看訪問記錄, 裏面httpd.pid還會記錄主進程號
|-- man
|-- manual
|-- modules 模塊目錄 例如PHP MEMCACHE編譯後的模塊在這裏面

 

Bin目錄
|-- ab apache http服務器性能壓力測試工具,相似的jmeter loadrunner webbench
|-- apachectl apache的啓動命令
|-- apr-1-config
|-- apu-1-config
|-- apxs apache服務器編譯和安裝擴展的工具,在進行DSO方式模塊編譯時會用到例如編譯PHP時就用到:--with-apxs2=/usr/local/apache/bin/apxs
|-- checkgid
|-- dbmmanage
|-- envvars
|-- envvars-std
|-- htcacheclean 清理磁盤緩存區的命令,通常少用
|-- htdbm
|-- htdigest
|-- htpasswd 創建更新基本認證文件 例如配置nagio監控時候會用到
|-- httpd 爲apache的控制命令程序,apachectl執行的時候會調用到httpd
|-- httxt2dbm
|-- logresolve


Conf目錄
|-- extra 輔助apache配置文件
| |-- httpd-autoindex.conf
| |-- httpd-dav.conf dav支持配置
| |-- httpd-default.conf apache相關服務配置 如超時時間 保持鏈接時間
| |-- httpd-info.conf
| |-- httpd-languages.conf 語言支持
| |-- httpd-manual.conf
| |-- httpd-mpm.conf 服務器池管理,如apache模式配置 鏈接等
| |-- httpd-multilang-errordoc.conf
| |-- httpd-ssl.conf 支持SSL加密配置
| |-- httpd-userdir.conf
| |-- httpd-vhosts.conf 虛擬機配置文件
|-- httpd.conf 主配置文件
|-- magic
|-- mime.types
|-- original

 

3、httpd.conf主配置文件常見配置


ServerRoot "/usr/local/apache2.2.22" apache安裝目錄
Listen 80 apache端口 
<IfModule !mpm_netware_module>
<IfModule !mpm_winnt_module>
User daemon apache運行用戶
Group daemon apache運行組
</IfModule>
</IfModule>
ServerAdmin you@example.com 管理員郵箱
DocumentRoot "/usr/local/apache2.2.22/htdocs" 站點目錄,注意最後不要加/線

<Directory /> 根目錄權限
Options FollowSymLinks 可使用符號連接
AllowOverride None
Order deny,allow
Deny from all
</Directory>
<Directory "/usr/local/apache2.2.22/htdocs"> 目錄權限 注意Indexes的做用是容許瀏覽目錄
Options Indexes FollowSymLinks
AllowOverride None 禁止用戶對目錄配置文件.htaccess修改,通常爲none
Order allow,deny
Allow from all 
</Directory>

<IfModule dir_module>
DirectoryIndex index.html 站點目錄首頁文件多個文件用空格隔開
</IfModule>

<FilesMatch "^\.ht"> 防止WEB用戶查看以.ht開頭的隱藏文件
Order allow,deny
Deny from all
Satisfy All
</FilesMatch>

ErrorLog "logs/error_log" 錯誤日誌
LogLevel warn 警告級別
<IfModule log_config_module>
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined 複合日誌格式
LogFormat "%h %l %u %t \"%r\" %>s %b" common 常規日誌格式
<IfModule logio_module>
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio 複合日誌格式
</IfModule>
CustomLog "logs/access_log" common 默認訪問日誌格式
</IfModule>

<IfModule alias_module>
ScriptAlias /cgi-bin/ "/usr/local/apache2.2.22/cgi-bin/" CGI別名配置
</IfModule>
<IfModule cgid_module>
</IfModule>

<Directory "/usr/local/apache2.2.22/cgi-bin"> CGI權限訪問路徑
AllowOverride None
Options None
Order allow,deny
Allow from all
</Directory>
DefaultType text/plain 定義不能肯定MIME類型時候使用默認MIME類型,若是服務主要包含text或HTML ,text/plain是一個好選擇

<IfModule mime_module>
TypesConfig conf/mime.types
AddType application/x-compress .Z 容許信息在傳輸中使用mosaic/x 2.1+解壓信息 但不是全部瀏覽器都支持
AddType application/x-gzip .gz .tgz
</IfModule>

<IfModule ssl_module>
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
</IfModule>

 

4、虛擬主機http_vhost.conf配置文件

NameVirtuaHost *:80 表示基於名稱的虛擬主機 *:80表示監聽本機全部IP的80端口上提供HTTP服務,*能夠設置爲具體IP
<VirtualHost *:80>
serveradmin 管理員郵箱
servername 域名
serveralias 別名 能夠設置多個域名指向同一個站點
errorlog 錯誤日誌
customlog 訪問日誌
</VirtualHost>


虛擬主機的配置是局部優先原則,也就是http_vhost.conf配置了,那麼就不會從主配置文件http.conf中讀取了


5、修改Apache默認站點目錄

一、文檔路徑更改 
DocumentRoot "D:/Software/GreenSoft/Apache/htdocs" 
改爲
DocumentRoot "E:/wwwroot/Apache"

二、目錄更改
<Directory "D:/Software/GreenSoft/Apache/htdocs">
改爲
<Directory "E:/wwwroot/Apache">

 


6、配置多站點方式

方式一 拷貝配置文件,安裝新服務
一、將httpd.conf複製一個新的文件httpdNew.conf
二、將httpdNew.conf中的偵聽端口改爲未使用的自定義的端口。 Listen:8111
三、將httpdNew.conf中的網站目錄 DocumentRoot "原絕對路徑" 改爲 DocumentRoot "新絕對路徑"
四、將httpdNew.conf中的權限設置 <Directory "原絕對路徑" > 改爲 <Directory "新絕對路徑" >
五、安裝新服務。Dos下進到Apache安裝目錄下的Bin目錄,輸入命令 httpd.exe -k install -n "服務名" -f "X:\Apache安裝目錄根目錄\conf\httpdNew.conf"
六、啓動新服務。輸入命令 httpd -k start


方式二 添加新端口,新虛擬目錄的方式
一、httpd.conf在以前偵聽端口的基礎上,加上新偵聽端口 Listen 8333.這樣Apache有多個偵聽端口
二、httpd.conf中加入虛擬主機支持。加入指令:NameVirtualHost *
三、找到<VirtualHost> definition註釋所在位置。加入指令:
<VirtualHost localhost:8333>
ServerName localhost
DocumentRoot "虛擬站點新絕對路徑"
</VirtualHost>

 

方式三 創建虛擬主機方式
一、修改虛擬主機配置文件 X:\Apache安裝目錄根目錄\conf\extra\httpd-vhosts.conf文件.加入配置:
<VirtualHost 127.0.1.1:8222>
DocumentRoot "虛擬站點新絕對路徑"
ServerName url.com
ErrorLog "虛擬站點新絕對路徑/error.log"
</VirtualHost>

二、修改主配置文件X:\Apache安裝目錄根目錄\conf\httpd.conf。去掉#Include conf/extra/httpd-vhosts.conf前面的#號
三、修改主配置文件X:\Apache安裝目錄根目錄\conf\httpd.conf。加目錄權限:
<Directory "虛擬站點新絕對路徑">
Options Indexes FollowSymLinks MultiViews ExecCGI
AllowOverride All
Order allow,deny
Allow from all
</Directory>
四、重啓對應的Apache服務

 

7、配置Apache支持Url重寫

一、加載重寫模塊。httpd.conf中找到#LoadModule rewrite_module modules/mod_rewrite.so,去掉#號
二、httpd.conf中找到AllowOverride None,改爲 AllowOverride All (All表示整臺服務器上都支持URL規則重寫)
三、httpd.conf加入
<Directory "站點絕對路徑">
Options FollowSymLinks
AllowOverride All
</Directory>
四、重啓Apache服務器並啓動服務
五、在URL重寫的網站目錄下放一個.htaccess文件,文件名是.htaccess。如無此文件或此文件中沒定義任何關於URL重寫的規則,則重寫不會生效。
六、在.htaccess中經過正則表達式映射須要僞靜態的頁面。URL正則表達式以下:
RewriteEngine on
RewriteRule index.html index.php
RewriteRule (\d+).htmlinfo\.php\?infoid=info\.php\?infoid=1
效果爲:www.abc.cn/info/info.php?infoid=100 映射爲 www.abc.cn/info/100.html


可用於如下用途:
一、http錯誤的自定義頁。格式 ErrorDocument 錯誤代碼 /目錄名/名.擴展名
ErrorDocument 404 /errors/notfound.html
ErrorDocument 401 "你權限訪問該頁面!"

二、拒絕某IP的訪問
order allow,deny 
deny from 210.10.56.32 
deny from 219.5.45. 
deny from www.baidu.com
allow from all

三、保護.htaccess文檔
四、Url轉向(文檔遷移,目錄更改,顯示友好易記的url)。格式:
Redirect /舊目錄/舊文檔名 新文檔名
Redirect 舊目錄 新目錄

五、更改默認主頁
DirectoryIndex 新的缺省名
DirectoryIndex filename.html index.cgi index.pl default.htm

六、反盜鏈
RewriteEngine on 
RewriteCond %{ HTTP_REFERER } !^RewriteCondRewriteCond [NC] 
RewriteRule .(gif&line;jpg)- [F]  RewriteRule .(gif&line;jpg)- [F]  RewriteRule .(gif&line;jpg) http://www.mydomain.com/替代名 [R,L]

 

8、配置反盜鏈
一、參見 配置Apache支持Url重寫 節,配置Apache支持url重寫
二、在站點的.htaccess文件中加入
RewriteEngine on
#容許空「HTTP_REFERER」的訪問
RewriteCond %{HTTP_REFERER} !^[NC]RewriteCond[NC]RewriteCond http://nobing.cn/no.png [R,NC,L]

說明:
R 就是轉向的意思
NC 指的是不區分大小寫
L 的做用是指明本次轉向到此結束,後續的轉向不受先前判斷語句的影響

多個擴展名用|分隔

 


9、配置緩存LoadModule cache_module modules/mod_cache.so LoadModule mem_cache_module modules/mod_mem_cache.so <IfModule mod_cache.c> #默認緩存有效期(秒)CacheDefaultExpire 3600 CacheMaxExpire 86400 CacheLastModifiedFactor 0.1 #禁止緩存某些特定的URL CacheDisable /local_files #使用特定的存儲類型緩存某些特定的URL CacheEnable mem /manual CacheEnable fd /images CacheEnable disk / <IfModule mod_mem_cache.c> CacheEnable mem / MCacheSize 8192 MCacheMaxObjectCount 10000 MCacheMinObjectSize 1 MCacheMaxObjectSize 51200 #MCacheRemovalAlgorithm LRU </IfModule> </IfModule>

相關文章
相關標籤/搜索