Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 伊人网综合网,九九精品视频在线观看,日本在线观看一区

          整合營銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費咨詢熱線:

          Nginx+keepalived 實現(xiàn)高可用,防盜鏈及動靜分離配置詳解

          者:小不點啊

          來源:www.cnblogs.com/leeSmall/p/9356535.html

          一、Nginx Rewrite 規(guī)則


          1. Nginx rewrite規(guī)則


          Rewrite規(guī)則含義就是某個URL重寫成特定的URL(類似于Redirect),從某種意義上說為了美觀或者對搜索引擎友好,提高收錄量及排名等。


          語法:


          rewrite <regex> <replacement> [flag]
          關(guān)鍵字 || 正則 || 替代內(nèi)容 || flag標(biāo)記


          Rewrite規(guī)則的flag標(biāo)記主要有以下幾種:


          • last :相當(dāng)于Apache里的(L)標(biāo)記,表示完成rewrite;
          • break:本條規(guī)則匹配完成后,終止匹配,不再匹配后面的規(guī)則
          • redirect:返回302臨時重定向,瀏覽器地址會顯示跳轉(zhuǎn)后的URL地址
          • permanent:返回301永久重定向,瀏覽器地址欄會顯示跳轉(zhuǎn)后的URL地址


          last和break用來實現(xiàn)URL重寫,瀏覽器地址欄URL地址不變


          2. Nginx rewrite例子


          a) 例如用戶訪問www.dbspread.com,想直接跳轉(zhuǎn)到網(wǎng)站下面的某個頁面,www.dbspread.com/new.index.html如何來實現(xiàn)呢?我們可以使用Nginx Rewrite 來實現(xiàn)這個需求,具體如下:在server中加入如下語句即可:


          效果圖如下:

                          rewrite     ^/$    http://www.dbspread.com/new.index.html  permanent;
          對應(yīng)如下語法:
                          rewrite    <regex>    <replacement>                 [flag];
                          關(guān)鍵字      正則        替代內(nèi)容                    flag標(biāo)記

          正則表達(dá)式說明:

          *代表前面0或更多個字符                +代表前面1或更多個字符
          ?代表前面0或1個字符                  ^代表字符串的開始位置
          $代表字符串結(jié)束的位置                 。為通配符,代表任何字符

          b)例如多個域名跳轉(zhuǎn)到同一個域名,nginx rewrite規(guī)則寫法如下:


          格式:

          rewrite <regex> <replacement> [flag];
          關(guān)鍵字 || 正則 || 替代內(nèi)容 || flag標(biāo)記


          說明:


          • rewrite為固定關(guān)鍵字,表示開始進(jìn)行rewrite匹配規(guī)則、
          • regex部分是 ^/(.*) ,這是一個正則表達(dá)式,匹配完整的域名和后面的路徑地址
          • replacement部分是http://www.dbspread.com/,是取自regex部分( )里的內(nèi)容。匹配成功后跳轉(zhuǎn)到的URL。
          • flag部分 permanent表示永久301重定向標(biāo)記,即跳轉(zhuǎn)到新的 http://www.dbspread.com/ 地址上



          二、Nginx 防盜鏈


          1. 什么是防盜鏈


          比如http://www.dbspread.com/download/av123.rmvb 這個視頻下載地址被其他網(wǎng)站引用,比如在www.test.com的index.html引用download/av123.rmvb就叫盜鏈,我們要禁止這種引用就叫做防盜鏈



          2. 怎么實現(xiàn)防盜鏈


          在nginx的nginx.conf的server里面配置如下代碼


          三、Nginx 動靜分離

          1. 動靜分離是什么

          Nginx動靜分離是讓動態(tài)網(wǎng)站里的動態(tài)網(wǎng)頁根據(jù)一定規(guī)則把不變的資源和經(jīng)常變的資源區(qū)分開來,動靜資源做好了拆分以后,我們就可以根據(jù)靜態(tài)資源的特點將其做緩存操作,這就是網(wǎng)站靜態(tài)化處理的核心思路。

          2. 動靜分離原理圖

          3. Nginx動靜分離應(yīng)該注意的地方

          1). WEB項目開發(fā)時要注意,將靜態(tài)資源盡量放在一個static文件夾2). 將static靜態(tài)資源文件夾放到Nginx可以取到的位置3). 頁面要建立全局變量路徑,方便修改路徑4). 修改nginx.conf的location, 匹配靜態(tài)資源請求

          4. Nginx動靜分離步驟

          4.1 準(zhǔn)備一個靜態(tài)資源button.css

          body {
              margin: 10px 20px;
              text-align: center;
              font-family: Arial, sans-serif;
              background-color: red;
          }

          4.2 在/var/local下新建一個static文件夾用來存放靜態(tài)資源button.css

          4.3 在tomcat-8080/webapps/ROOT下的index.html里面引入button.css


          4.4 在nginx的nginx.conf中server節(jié)點新增靜態(tài)資源分離的配置


          對于Nginx基礎(chǔ)配置,推薦之前的:后端實踐:Nginx日志配置(超詳細(xì))

          4.5 訪問頁面查看效果

          四、Nginx+keepalived 實現(xiàn)高可用

          1. keepalived是什么

          Keepalived軟件起初是專為LVS負(fù)載均衡軟件設(shè)計的,用來管理并監(jiān)控LVS集群系統(tǒng)中各個服務(wù)節(jié)點的狀態(tài),后來又加入了可以實現(xiàn)高可用的VRRP (Virtual Router Redundancy Protocol ,虛擬路由器冗余協(xié)議)功能。因此,Keepalived除了能夠管理LVS軟件外,還可以作為其他服務(wù)(例如:Nginx、Haproxy、MySQL等)的高可用解決方案軟件

          2. keepalived主要功能

          管理LVS負(fù)載均衡軟件實現(xiàn)LVS集群節(jié)點的健康檢查作為系統(tǒng)網(wǎng)絡(luò)服務(wù)的高可用性(failover)

          3. keepalived故障轉(zhuǎn)移

          Keepalived高可用服務(wù)之間的故障切換轉(zhuǎn)移,是通過 VRRP 來實現(xiàn)的。在 Keepalived服務(wù)正常工作時,主 Master節(jié)點會不斷地向備節(jié)點發(fā)送(多播的方式)心跳消息,用以告訴備Backup節(jié)點自己還活著,當(dāng)主 Master節(jié)點發(fā)生故障時,就無法發(fā)送心跳消息,備節(jié)點也就因此無法繼續(xù)檢測到來自主 Master節(jié)點的心跳了,于是調(diào)用自身的接管程序,接管主Master節(jié)點的 IP資源及服務(wù)。而當(dāng)主 Master節(jié)點恢復(fù)時,備Backup節(jié)點又會釋放主節(jié)點故障時自身接管的IP資源及服務(wù),恢復(fù)到原來的備用角色。

          說明:keepalived的主從切換和redis的主從切換是不一樣的,keepalived的主節(jié)點掛了以后,從節(jié)點變?yōu)橹鞴?jié)點,之前的主節(jié)點恢復(fù)以后繼續(xù)做主節(jié)點。redis的主節(jié)點掛了以后,重新恢復(fù)以后變?yōu)閺墓?jié)點

          4. keepalived高可用架構(gòu)示意圖

          說明:

          虛擬ip(VIP):192.168.152.200,對外提供服務(wù)的ip,也可稱作浮動ip192.168.152.130:nginx + keepalived master 主192.168.152.129:nginx + keepalived backup 從192.168.152.129:tomcat-8080192.168.152.129:tomcat-8081

          5. keepalived安裝

          環(huán)境準(zhǔn)備:

          centos6、jdk

          虛擬ip(VIP):192.168.152.200,對外提供服務(wù)的ip,也可稱作浮動ip
          192.168.152.130:nginx + keepalived master 主
          192.168.152.129:nginx + keepalived backup 從
          192.168.152.129:tomcat-8080
          192.168.152.129:tomcat-8081

          nginx和tomcat的環(huán)境準(zhǔn)備請查看我的前一篇關(guān)于nginx的文章

          5.1 安裝keepalived的步驟:

          注:192.168.152.129(keepalived從節(jié)點) 與 192.168.152.130(keepalived主節(jié)點)先安裝好nginx + keepalived

          下載壓縮包:

          wget www.keepalived.org/software/keepalived-1.3.5.tar.gz

          解壓縮:

          tar -zxvf keepalived-1.3.5.tar.gz

          進(jìn)入解壓縮以后的文件目錄:

          cd keepalived-1.3.5

          編譯安裝:./configure --prefix=/usr/local/keepalived系統(tǒng)提示警告 *** WARNING - this build will not support IPVS with IPv6. Please install libnl/libnl-3 dev libraries to support IPv6 with IPVS.yum -y install libnl libnl-devel再次執(zhí)行./configure --prefix=/usr/local/keepalived系統(tǒng)提示錯誤 configure: error: libnfnetlink headers missingyum install -y libnfnetlink-devel再次執(zhí)行./configure --prefix=/usr/local/keepalived

          make && make install

          到此keepalived安裝完成,但是接下來還有最關(guān)鍵的一步,如果這一步?jīng)]有做后面啟動keepalived的時候會報找不到配置文件的錯誤

          Configuration file '/etc/keepalived/keepalived.conf' is not a regular non-executable file

          安裝完成后,進(jìn)入安裝目錄的etc目錄下,將keepalived相應(yīng)的配置文件拷貝到系統(tǒng)相應(yīng)的目錄當(dāng)中。keepalived啟動時會從/etc/keepalived目錄下查找keepalived.conf配置文件

          mkdir /etc/keepalived

          cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived

          5.2 修改keepalived主節(jié)點192.168.152.130的/etc/keepalived/keepalived.conf配置文件


          5.3 修改keepalived從節(jié)點192.168.152.129的/etc/keepalived/keepalived.conf配置文件

          5.4 檢查nginx是否啟動的shell腳本


          /usr/local/src/check_nginx_pid.sh

          #!/bin/bash
          #檢測nginx是否啟動了
          A=`ps -C nginx --no-header |wc -l`        
          if [ $A -eq 0 ];then    #如果nginx沒有啟動就啟動nginx                        
                /usr/local/nginx/sbin/nginx                #重啟nginx
                if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then    #nginx重啟失敗,則停掉keepalived服務(wù),進(jìn)行VIP轉(zhuǎn)移
                        killall keepalived                    
                fi
          fi


          5.5 192.168.152.130(keepalived主節(jié)點)和 192.168.152.129(keepalived從節(jié)點)的nginx的配置文件nginx.conf

          user root root; #使用什么用戶啟動NGINX 在運行時使用哪個用戶哪個組
          worker_processes 4; #啟動進(jìn)程數(shù),一般是1或8個,根據(jù)你的電腦CPU數(shù),一般8個
          worker_cpu_affinity 00000001 00000010 00000100 00001000; #CPU邏輯數(shù)——把每個進(jìn)程分別綁在CPU上面,為每個進(jìn)程分配一個CPU
          #pid /usr/local/nginx/logs/nginx.pid
          worker_rlimit_nofile 102400; #一個進(jìn)程打開的最大文件數(shù)目,與NGINX并發(fā)連接有關(guān)系
          
          #工作模式及連接數(shù)上限
          events
          {
            use epoll; #多路復(fù)用IO 基于LINUX2.6以上內(nèi)核,可以大大提高NGINX的性能 uname -a查看內(nèi)核版本號
            worker_connections 102400; #單個worker process最大連接數(shù),其中NGINX最大連接數(shù)=連接數(shù)*進(jìn)程數(shù),一般1GB內(nèi)存的機(jī)器上可以打開的最大數(shù)大約是10萬左右
            multi_accept on;   #盡可能多的接受請求,默認(rèn)是關(guān)閉狀態(tài)
          }
          
          #處理http請求的一個應(yīng)用配置段
          http
          {
            #引用mime.types,這個類型定義了很多,當(dāng)web服務(wù)器收到靜態(tài)的資源文件請求時,依據(jù)請求文件的后綴名在服務(wù)器的MIME配置文件中找到對應(yīng)的MIME #Type,根據(jù)MIMETYPE設(shè)置并response響應(yīng)類型(Content-type)
            include       mime.types; 
            default_type  application/octet-stream; #定義的數(shù)據(jù)流,有的時候默認(rèn)類型可以指定為text,這跟我們的網(wǎng)頁發(fā)布還是資源下載是有關(guān)系的
            fastcgi_intercept_errors on; #表示接收fastcgi輸出的http 1.0 response code
            charset utf-8;
            server_names_hash_bucket_size 128; #保存服務(wù)器名字的hash表
            #用來緩存請求頭信息的,容量4K,如果header頭信息請求超過了,nginx會直接返回400錯誤,先根據(jù)client_header_buffer_size配置的值分配一個buffer,如果##分配的buffer無法容納request_line/request_header,那么就會##再次根據(jù)large_client_header_buffers配置的參數(shù)分配large_buffer,如果large_buffer還是無#法容納,那么就會返回414(處理request_line)/400(處理request_header)錯誤。
            client_header_buffer_size 4k; 
            large_client_header_buffers 4 32k;
            client_max_body_size 300m; #允許客戶端請求的最大單文件字節(jié)數(shù) 上傳文件時根據(jù)需求設(shè)置這個參數(shù)
            #指定NGINX是否調(diào)用這個函數(shù)來輸出文件,對于普通的文件我們必須設(shè)置為ON,如果NGINX專門做為一個下載端的話可以關(guān)掉,好處是降低磁盤與網(wǎng)絡(luò)的IO處理數(shù)及#系統(tǒng)的UPTIME
            sendfile on; 
            #autoindex on;開啟目錄列表訪問,適合下載服務(wù)器
            tcp_nopush on; #防止網(wǎng)絡(luò)阻塞
            #非常重要,根據(jù)實際情況設(shè)置值,超時時間,客戶端到服務(wù)端的連接持續(xù)有效時間,60秒內(nèi)可避免重新建立連接,時間也不能設(shè)太長,太長的話,若請求數(shù)10000##,都占用連接會把服務(wù)托死
            keepalive_timeout 60;
            tcp_nodelay on; #提高數(shù)據(jù)的實時響應(yīng)性
            client_body_buffer_size 512k; #緩沖區(qū)代理緩沖用戶端請求的最大字節(jié)數(shù)(請求多)
          
            proxy_connect_timeout   5; #nginx跟后端服務(wù)器連接超時時間(代理連接超時)
            proxy_read_timeout      60; #連接成功后,后端服務(wù)器響應(yīng)時間(代理接收超時)
            proxy_send_timeout      5; #后端服務(wù)器數(shù)據(jù)回傳時間(代理發(fā)送超時)
            proxy_buffer_size       16k; #設(shè)置代理服務(wù)器(nginx)保存用戶頭信息的緩沖區(qū)大小
            proxy_buffers           4 64k; #proxy_buffers緩沖區(qū),網(wǎng)頁平均在32k以下的話,這樣設(shè)置
            proxy_busy_buffers_size 128k; #高負(fù)荷下緩沖大小
            proxy_temp_file_write_size 128k; #設(shè)定緩存文件夾大小,大于這個值,將從upstream服務(wù)器傳
          
            gzip on; #NGINX可以壓縮靜態(tài)資源,比如我的靜態(tài)資源有10M,壓縮后只有2M,那么瀏覽器下載的就少了
            gzip_min_length  1k;
            gzip_buffers     4 16k;
            gzip_http_version 1.1;
            gzip_comp_level 2; #壓縮級別大小,最小1,最大9.值越小,壓縮后比例越小,CPU處理更快,為1時,原10M壓縮完后8M,但設(shè)為9時,壓縮完可能只有2M了。一般設(shè)置為2
            gzip_types       text/plain application/x-javascript text/css application/xml; #壓縮類型:text,js css xml 都會被壓縮
            gzip_vary on; #作用是在http響應(yīng)中增加一行目的是改變反向代理服務(wù)器的緩存策略
          
          #日志格式 
          log_format  main '$remote_addr - $remote_user [$time_local] "$request" ' #ip 遠(yuǎn)程用戶 當(dāng)?shù)貢r間  請求URL
                           '$status $body_bytes_sent "$http_referer" ' #狀態(tài)  發(fā)送的大小  響應(yīng)的頭
                   '"$http_user_agent" $request_time'; #客戶端使用的瀏覽器  頁面響應(yīng)的時間
          
          #動態(tài)轉(zhuǎn)發(fā)         
          upstream web1 {
              #每個請求按訪問ip的hash結(jié)果分配,這樣每個訪客固定訪問一個后端服務(wù)器,可以解決session的問題。配置了ip_hash就沒有負(fù)載均衡的效果了,每次訪問的都是同一個tomcat
              #ip_hash; 
              #轉(zhuǎn)發(fā)的后端的tomcat服務(wù)器,weight表示轉(zhuǎn)發(fā)的權(quán)重,越大轉(zhuǎn)發(fā)的次數(shù)越多,機(jī)器性能不一樣配置的weight值不一樣     
               server   192.168.152.129:8080 weight=1 max_fails=2 fail_timeout=30s;
               server   192.168.152.129:8081 weight=1 max_fails=2 fail_timeout=30s;
          }
          upstream web2 {
               server   192.168.152.129:8090 weight=1 max_fails=2 fail_timeout=30s;
               server   192.168.152.129:8091 weight=1 max_fails=2 fail_timeout=30s;
          }
          
          server {
              listen       80; #監(jiān)聽80端口
              server_name  www.dbspread.com; #域名
              #rewrite規(guī)則
              index  index.jsp index.html index.htm;
              root   /usr/local/nginx/html; #定義服務(wù)器的默認(rèn)網(wǎng)站根目錄位置
              #重定向
              if ($host != 'www.dbspread.com' ){ 
                      rewrite ^/(.*)$  http://www.dbspread.com/$1  permanent;
                      }
          
              #防盜鏈
               location ~* \.(rmvb|jpg|png|swf|flv)$ { #rmvb|jpg|png|swf|flv表示對rmvb|jpg|png|swf|flv后綴的文件實行防盜鏈
                          valid_referers none blocked  www.dbspread.com; #表示對www.dbspread.com此域名開通白名單,比如在www.test.com的index.html引用download/av123.rmvb,無效
                          root   html/b;
                          if ($invalid_referer) { #如果請求不是從www.dbspread.com白名單發(fā)出來的請求,直接重定向到403.html這個頁面或者返回403 
                               #rewrite ^/ http://www.dbspread.com/403.html;
                               return 403;
                          }
                  }
          
              #監(jiān)聽完成以后通過斜桿(/)攔截請求轉(zhuǎn)發(fā)到后端的tomcat服務(wù)器
              location / 
                  {
                      #如果后端的服務(wù)器返回502、504、執(zhí)行超時等錯誤,自動將請求轉(zhuǎn)發(fā)到upstream負(fù)載均衡池中的另一臺服務(wù)器,實現(xiàn)故障轉(zhuǎn)移。
                      proxy_next_upstream http_502 http_504 error timeout invalid_header;
                      proxy_set_header Host  $host; #獲取客戶端的主機(jī)名存到變量Host里面,從而讓tomcat取到客戶端機(jī)器的信息
                      proxy_set_header X-Real-IP $remote_addr; #獲取客戶端的主機(jī)名存到變量X-Real-IP里面,從而讓tomcat取到客戶端機(jī)器的信息
                      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                      #rewrite     ^/$    http://www.dbspread.com/new.index.html  permanent;#用戶訪問www.dbspread.com,想直接跳轉(zhuǎn)到網(wǎng)站下面的某個頁面:www.dbspread.com/new.index.html
                      proxy_pass http://web1; #跳轉(zhuǎn)到對應(yīng)的應(yīng)用web1
                  }
          
                 # location ~ .*\.(php|jsp|cgi|shtml)?$ #動態(tài)分離 ~匹配 以.*結(jié)尾(以PHP JSP結(jié)尾走這段)
                 #  {
                 #     proxy_set_header Host  $host;
                 #        proxy_set_header X-Real-IP $remote_addr;
                 #        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                 #        proxy_pass http://jvm_web2;
                 # }
          
                  #靜態(tài)分離 ~匹配 以.*結(jié)尾(以html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css結(jié)尾走這段),當(dāng)然不是越久越好,如果有10000個用戶在線,都保存幾個月,系統(tǒng)托跨
                  location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css)$ 
                  {
                      root /var/local/static; #靜態(tài)資源存放在nginx的安裝機(jī)器上
                      #proxy_pass http://www.static.com; #靜態(tài)資源也可存放在遠(yuǎn)程服務(wù)器上
                      expires    30d;
                  }
          
                  #日志級別有[debug|info|notice|warn|error|crit]  error_log 級別分為 debug, info, notice, warn, error, crit  默認(rèn)為crit, 生產(chǎn)環(huán)境用error 
                  #crit 記錄的日志最少,而debug記錄的日志最多
                  access_log  /usr/local/logs/web2/access.log main;
                  error_log   /usr/local/logs/web2/error.log  crit;
          
              }
          
          
          }


          到這一步環(huán)境準(zhǔn)備已完成,相關(guān)的配置也修改完成,下面我們來查看效果


          5.6 配置hosts域名映射


          192.168.152.200  www.dbspread.com

          注意:這里192.168.152.200 是keepalived里面virtual_ipaddress配置的虛擬ip

           virtual_ipaddress {
                  192.168.152.200 # 定義虛擬ip(VIP),可多設(shè),每行一個
              }


          到這一步環(huán)境準(zhǔn)備已完成,相關(guān)的配置也修改完成,下面我們來查看效果


          5.7 分別啟動192.168.152.129的兩個tomcat


          5.8 分別啟動192.168.152.130(keepalived主節(jié)點)和

          192.168.152.129(keepalived從節(jié)點)的keepalived的

          啟動命令:


          /usr/local/keepalived/sbin/keepalived  

          可以看到keepalived和nginx都啟動了

          在瀏覽器輸入www.dpspread.com域名訪問

          5.9 下面我們停掉主節(jié)點192.168.152.130的keepalived和nginx

          可以看到從節(jié)點變?yōu)橹鞴?jié)點了

          在瀏覽器輸入地址www.dpspread.com訪問,可以看到訪問正常

          5.10 下面我們重新啟動主節(jié)點192.168.152.130

          可以看到主節(jié)點重新啟動以后變?yōu)橹鞴?jié)點了

          之前變?yōu)橹鞴?jié)點的從節(jié)點又變回從節(jié)點了

          到此keepalived+nginx的高可用完美完成

          多數(shù)PHP程序都使用HTML表單從用戶那里獲取數(shù)據(jù)并計算結(jié)果。

          HTML表單的一些基本原則

          • 選擇適合于收集的數(shù)據(jù)類型和提供交互方式的控件。
          • 清楚標(biāo)記每一個控件,這樣用戶就可以理解其功能。
          • 盡可能將標(biāo)簽對齊。將控件的左邊緣對齊。
          • 將相關(guān)的標(biāo)簽分組,并且通過設(shè)計中使用空白將每一個分組分開。
          • 表單上的控件順序應(yīng)該類似于用戶操作他們的順序。

          創(chuàng)建基本HTML表單

          首先創(chuàng)造一個基本的HTML大綱,包含表單控件;然后將控件進(jìn)行合并(HTML表單必須包括一個提交按鈕,用戶單擊它可以將表單數(shù)據(jù)發(fā)送到服務(wù)器。)一個單獨的HTML頁面可以包含多個表單。

          • 創(chuàng)建HTML結(jié)構(gòu)

          包含表單的HTML結(jié)構(gòu)和和普通的HTML結(jié)構(gòu)一樣。

          <HTML>
            <HEAD>
            <TITLE>標(biāo)題放在這</TITLE>
            </HEAD>
          <BODY>
            表單頁面放在這
            </BODY>
            </HTML>

          在包含表單的HTML頁面中可以使用任何HTML標(biāo)簽。基本的表單使用FROM標(biāo)簽來說明。該標(biāo)簽中METHOD屬性接收GET或POST兩個值中的一個。ACTION屬性子明PHP腳本的url,該腳本可以收集通過表單收集的數(shù)據(jù),可以是絕對路徑或者相對路徑

          <FORM METHOD="method" ACTION="url"> 
            中間可以放置表單控件
            </FORM>
          • 合并控件

          兩個常用的基本控件:文本框和提交按鈕。

          文本框:允許用戶鍵入信息以發(fā)送給PHP腳本。NAME屬性為文本提供名稱,PHP腳本可以通過名稱準(zhǔn)確訪問其內(nèi)容,因此它應(yīng)該是唯一的且符合PHP變量命名規(guī)則(但不需要$符號),單標(biāo)簽。VALUE屬性指明出現(xiàn)在提交按鈕上面的標(biāo)題。創(chuàng)建方式如下:

          <INPUT TYPE = "TEXT" NAME="text">

          提交按鈕:允許用戶將一個表單的內(nèi)容發(fā)送到服務(wù)器,一個HTML表單對應(yīng)應(yīng)該有一個提交按鈕。

          示例:一個完整的HTML表單。

          <HTML>
            <HEAD>
            <TITLE>標(biāo)題</TITLE>
            </HEAD>
          <BODY>
          <FORM METHOD="POST" ACTION="phpinfo.php">
          <INPUT TYPE="TEXT" NAME="user_name">
          <BR/>
          <BR/>
          <INPUT TYPE="TEXT" NAME="user_email">
          <BR/>
          <BR/>
          <INPUT TYPE="SUBMIT" VALUE="Send the Data">
          </FORM>
            </BODY>
            </HTML>


          • 使用多個表單

          可以在一個HTML頁面中包含多個表單,注意下一個表單的FORM開始之前需要結(jié)束前一個FORM表單。

          <HTML>
            <HEAD>
            <TITLE>標(biāo)題</TITLE>
            </HEAD>
          <BODY>
            
          <FORM METHOD="POST" ACTION="phpinfo.php">
          <INPUT TYPE="TEXT" NAME="user_name">
          <BR/>
          <BR/>
          <INPUT TYPE="TEXT" NAME="user_email">
          <BR/>
          <BR/>
          <INPUT TYPE="SUBMIT" VALUE="Send the Data">
          <BR/>
          <BR/>
          </FORM>
          
          <FORM METHOD="POST" NAME="phpinfo.php">
          <INPUT TYPE="TEXT" NAME="user_name1">
          <BR/>
          <BR/>
          <INPUT TYPE="TEXT" NAME="user_email1">
          <BR/>
          <BR/>
          <INPUT TYPE="SUBMIT" VALUE="Send the Data1">
          </FORM>
          
            </BODY>
            </HTML>


          創(chuàng)建表單控件

          • 創(chuàng)建自定義的文本框

          文本框的屬性中,TYPE和NAME是必須的,其余是可選屬性。SIZE屬性用于設(shè)置文本框的可視大小;MAXLENGTH指明用戶鍵入字符的最大長度;VALUE給出了一個最初顯示在文本框中的值。

          <input type="text" name="" size="" maxlength="" value="">
          • 創(chuàng)建文本區(qū)域

          文本區(qū)域可以輸入多行文本。NAME和ROWS屬性是必須的。ROWS屬性表明了文本區(qū)域內(nèi)可以看到的文本行數(shù),充滿時會滾動。COLS屬性指明可見文本列數(shù)與行數(shù)類似。WRAP屬性指明文本區(qū)域內(nèi)單詞換行的方式,可以指定如下值。該標(biāo)簽為雙標(biāo)簽。

          說明

          off

          禁止單詞換行但用戶可以輸入換行符強(qiáng)制換行

          virtual/soft

          各行顯示為換行,但是換行并沒有被發(fā)送到服務(wù)器

          physica/hard

          啟用了單詞換行

          <inputarea name="" rows="" cols="" wrap="">
          • 創(chuàng)建密碼框

          創(chuàng)建密碼框的語法與文本框相同,但要將TYPE屬性指定為PASSWORD而不是TYPE。

          <input type="password" name="" size="" maxlength="" value="">
          • 創(chuàng)建復(fù)選框

          取兩個值中的一個,即二選一。TYPE屬性是必須的,checked屬性出現(xiàn),該復(fù)選框默認(rèn)情況會被選定。value屬性指定復(fù)選框被選定情況下被發(fā)送到服務(wù)器的值,默認(rèn)發(fā)送on值。法如下:

          <input type="checkbox" name="" checked value="">
          • 創(chuàng)建單選按鈕

          語法與復(fù)選框?qū)傩院x相同,但是TYPE屬性的值必須是RADIO,NAME屬性是必須的。

          <input type="radio" name="" checked value="">
          • 創(chuàng)建列表框

          用戶可以選擇一個或者多個選項,它是一個滾動菜單。

          <select name="" multipile size="">options go here</select>

          name屬性是必須的,multipile屬性指明用戶可以通過按下crtl鍵并單擊多個選項來選擇它們

          列表框的單選行為可作為單選按鈕。

          <option selected value="text"></options>
          • 創(chuàng)建隱藏域
          <input type="hidden" name="text"value="">
          • 實現(xiàn)上傳文件的HTML表單
          <input type="FILE" name="name" accept="time" value="text">

          其中type屬性是必須的。格式通過使用MIME碼指定。常用的格式如下:


          超文本標(biāo)記語言文本 .html,.html text/html

            普通文本 :txt text/plain

            word文檔:application/msword

            RTF文本 :rtf application/rtf

            GIF圖形 :gif image/gif

            JPEG圖形 :jpeg,

            jpg: image/jpeg

            au聲音文件:au audio/basic

            MIDI音樂文件 :mid,.midi audio/midi,audio/x-midi

            RealAudio音樂文件 .ra, .ram audio/x-pn-realaudio

            MPEG文件 .mpg,.mpeg video/mpeg

            AVI文件 .avi video/x-msvideo

            GZIP文件 .gz application/x-gzip

            壓縮文件.rar application/octet-stream

            壓縮文件.zip application/x-zip-compressed

            TAR文件 .tar application/x-tar


          更多提交表單的信息

          • 使用圖像提交數(shù)據(jù)
          <input type="image" src="url" name="text" align="align">
          • 創(chuàng)建重置按鈕
          <input type="reset" value="text">

          HP默認(rèn)的函數(shù)有移除指定html標(biāo)簽,名稱為strip_tags,在某些場合非常有用。

          strip_tags

          (PHP 3 >= 3.0.8, PHP 4, PHP 5)

          strip_tags — Strip HTML and PHP tags from a string

          string strip_tags ( string str [, string allowable_tags] )

          弊端 :

          這個函數(shù)只能保留想要的html標(biāo)簽,就是參數(shù)string allowable_tags。

          這個函數(shù)的參數(shù)allowable_tags的其他的用法。

          strip_tags($source, ”); 去掉所以的html標(biāo)簽。

          strip_tags($source, ‘<div><img><em>’); 保留字符串中的div、img、em標(biāo)簽。

          如果想去掉的html的指定標(biāo)簽。那么這個函數(shù)就不能滿足需求了。于是乎我用到了這個函數(shù)。

          /**

          * Removes specific tags.

          */

          function strip_only_tags($str, $tags, $stripContent = FALSE) {

          $content = '';

          if (!is_array($tags)) {

          $tags = (strpos($str, '>') !== false ? explode('>', str_replace('<', '', $tags)) : array($tags));

          if (end($tags) == '') {

          array_pop($tags);

          }

          }

          foreach($tags as $tag) {

          if ($stripContent) {

          $content = '(.+<!--'.$tag.'(-->|\s[^>]*>)|)';

          }

          $str = preg_replace('#<!--?'.$tag.'(-->|\s[^>]*>)'.$content.'#is', '', $str);

          }

          return $str;

          }

          參數(shù)說明

          $str — 是指需要過濾的一段字符串,比如div、p、em、img等html標(biāo)簽。

          $tags — 是指想要移除指定的html標(biāo)簽,比如a、img、p等。

          $stripContent = FALSE — 移除標(biāo)簽內(nèi)的內(nèi)容,比如將整個鏈接刪除等,默認(rèn)為False,即不刪除標(biāo)簽內(nèi)的內(nèi)容。

          使用說明

          $target = strip_only_tags($source, array(‘a(chǎn)’,'em’,'b’));

          移除$source字符串內(nèi)的a、em、b標(biāo)簽。

          $source='<div><a href="http://www.tsingyaun.cn" target="_blank"><img src="http://www.tsingyuan.cn/logo.png" border="0" alt="Welcome to linzl." />This a example from<em>lixiphp</em></a><strong>!</strong></div>

          ';

          $target = strip_only_tags($source, array('a','em'));

          //target results

          //<div><img src="http://blog.lixiphp.com/logo.png" border="0" alt="Welcome to lixiphp." />This a example from<strong>!</strong></div>

          :left;"


          主站蜘蛛池模板: 日韩久久精品一区二区三区 | 久久精品日韩一区国产二区 | 日本道免费精品一区二区| 性色AV一区二区三区无码| 一区二区三区免费视频播放器 | 国产婷婷色一区二区三区深爱网| 亚洲国产一区国产亚洲| 一区二区高清在线观看| 无码人妻啪啪一区二区| 99精品国产高清一区二区麻豆| 久久99国产精一区二区三区| 日本一区二区三区四区视频| 成人欧美一区二区三区在线视频| 国产成人精品一区二三区熟女| 国产午夜精品一区二区三区极品 | 海角国精产品一区一区三区糖心| 一区一区三区产品乱码| 91视频一区二区| 亚洲av成人一区二区三区| 2022年亚洲午夜一区二区福利| 99精品一区二区三区无码吞精| 亚洲国产成人久久一区二区三区| 国产精品视频一区二区三区| 精品国产乱码一区二区三区| 搡老熟女老女人一区二区| 亚洲一区爱区精品无码| 无码日韩精品一区二区三区免费| 久久er99热精品一区二区| 国偷自产av一区二区三区| 精品国产亚洲一区二区三区| 不卡一区二区在线| 精品乱人伦一区二区三区| 亚洲va乱码一区二区三区| 天堂va在线高清一区| 国产亚洲福利精品一区二区| 亚洲一区视频在线播放 | 波多野结衣AV一区二区三区中文| 无码午夜人妻一区二区不卡视频 | 骚片AV蜜桃精品一区| 91精品一区二区三区在线观看| 激情爆乳一区二区三区|