整合營銷服務(wù)商

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

          免費咨詢熱線:

          Linux 下配置nginx到php的連接

          Linux 下配置nginx到php的連接

          中小企業(yè)中,LAMP架構(gòu)被廣泛使用。而對于高并發(fā)請求的情形,其Web服務(wù)器通常以Nginx居多,因此LNMP組合架構(gòu)也非常普遍。在LAMP架構(gòu)中,Apache可以使用三種方式與PHP連接通信,即以模塊化的方式,CGI(已不再使用)以及FastCGI。那對于Nginx而言,則可以使用FastCGI方式,即反向代理方式,將PHP代碼有FastCGI轉(zhuǎn)交給PHP解釋器進行處理。本文描述配置Nginx到PHP的連接。

          一、環(huán)境準(zhǔn)備

          安裝Nginx:Linux 6 下安裝編譯安裝Nginx

          安裝PHP : Linux 6 下編譯安裝 PHP 5.6

          二、演示環(huán)境

          ###當(dāng)前環(huán)境為CentOS 6.7,本演示配置適用于CentOS 7下配置nginx連接PHP。
          # cat /etc/redhat-release 
          CentOS release 6.7 (Final)
          # nginx -v
          nginx version: nginx/1.8.1
          # service nginx start
          Starting nginx: [ OK ]
          # ss -nltp|grep nginx
          LISTEN 0 128 *:8001 *:* users:(("nginx",2168,6),("nginx",2171,6))
          # service php-fpm start 
          Starting php-fpm done
          # ss -nltp|grep php
          LISTEN 0 128 127.0.0.1:9000 *:* users:(("php-fpm",2255,9),("php-fpm",2256,0),("php-fpm",2257,0))
          # php -v
          PHP 5.6.9 (cli) (built: Jul 17 2016 18:45:50) 
          Copyright (c) 1997-2015 The PHP Group
          Zend Engine v2.6.0, Copyright (c) 1998-2015 Zend Technologies
           with XCache v3.2.0, Copyright (c) 2005-2014, by mOo
           with XCache Optimizer v3.2.0, Copyright (c) 2005-2014, by mOo
           with XCache Cacher v3.2.0, Copyright (c) 2005-2014, by mOo
          1
          2
          3
          4
          5
          6
          7
          8
          9
          10
          11
          12
          13
          14
          15
          16
          17
          18
          19
          20
          21
          22
          23
          24
          25
          26
          

          三、配置nginx

          1、編輯/etc/nginx
          /nginx.conf,啟用如下選項:
          location ~ \.php$ {
           root html;
           fastcgi_pass 127.0.0.1:9000;
           fastcgi_index index.php;
           fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
           include fastcgi_params;
           }
          在所支持的主頁面格式中添加php格式的主頁,類似如下:
          location / {
           root html;
           index index.php index.html index.htm;
           }
          2、編輯/etc/nginx/fastcgi_params,將其內(nèi)容更改為如下內(nèi)容:
          # cp /etc/nginx/fastcgi_params /etc/nginx/fastcgi_params.bk
          # cat /dev/null>/etc/nginx/fastcgi_params
          # vim /etc/nginx/fastcgi_params
          fastcgi_param GATEWAY_INTERFACE CGI/1.1;
          fastcgi_param SERVER_SOFTWARE nginx;
          fastcgi_param QUERY_STRING $query_string;
          fastcgi_param REQUEST_METHOD $request_method;
          fastcgi_param CONTENT_TYPE $content_type;
          fastcgi_param CONTENT_LENGTH $content_length;
          fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
          fastcgi_param SCRIPT_NAME $fastcgi_script_name;
          fastcgi_param REQUEST_URI $request_uri;
          fastcgi_param DOCUMENT_URI $document_uri;
          fastcgi_param DOCUMENT_ROOT $document_root;
          fastcgi_param SERVER_PROTOCOL $server_protocol;
          fastcgi_param REMOTE_ADDR $remote_addr;
          fastcgi_param REMOTE_PORT $remote_port;
          fastcgi_param SERVER_ADDR $server_addr;
          fastcgi_param SERVER_PORT $server_port;
          fastcgi_param SERVER_NAME $server_name;
          3、重新載入nginx的配置文件:
          # nginx -t 
          # service nginx reload 
          1
          2
          3
          4
          5
          6
          7
          8
          9
          10
          11
          12
          13
          14
          15
          16
          17
          18
          19
          20
          21
          22
          23
          24
          25
          26
          27
          28
          29
          30
          31
          32
          33
          34
          35
          36
          37
          38
          39
          40
          41
          42
          43
          

          四、驗證

          1、在/etc/nginx/html新建index.php的測試頁面,
          測試php是否能正常工作:
          # vi /etc/nginx/html/index.php 
          <?php ### Author : Leshami
          phpinfo(); ### Blog : http://blog.csdn.net/leshami
          ?>
          2、通過瀏覽測試php頁面
          瀏覽器打開 http://192.168.1.245:8001
          也可以使用如下方式測試
          # curl -I http://192.168.1.245:8001
          HTTP/1.1 200 OK 
          Server: nginx/1.8.1
          Date: Tue, 19 Jul 2016 03:29:44 GMT
          Content-Type: text/html; charset=UTF-8
          Connection: keep-alive
          X-Powered-By: PHP/5.6.9
          3、訪問mysql數(shù)據(jù)庫
          #yum install php-mysql(安裝php的mysql驅(qū)動)
          vim /etc/nginx/html/connmysql.php
          <?php
           $conn=mysql_connect('192.168.1.242','robin','xxx');
           if ($conn)
           echo "succ";
           else
           echo "failute";
           mysql_close();
          ?>
          # curl http://192.168.1.245:8001/connmysql.php
          succ
          1
          2
          3
          4
          5
          6
          7
          8
          9
          10
          11
          12
          13
          14
          15
          16
          17
          18
          19
          20
          21
          22
          23
          24
          25
          26
          27
          28
          29
          30
          31
          32
          33
          34
          35
          36
          37
          38
          

          五、Nginx與PHP分離的情形

          電商網(wǎng)站搭建過程中,前端經(jīng)常會向后端請求數(shù)據(jù),有時候通過HTML、JS和PHP文件的處理來實現(xiàn)數(shù)據(jù)的連通。通常情況下,用戶在HTML中做關(guān)鍵字操作,JS對提交的表單進行數(shù)據(jù)處理,向后端發(fā)起ajax請求對應(yīng)PHP的api接口,PHP在接收到數(shù)據(jù)后對連接服務(wù)器,服務(wù)器再通過PHP中的SQL語句對數(shù)據(jù)庫關(guān)鍵字進行處理返回給PHP,再由PHP返回給前端,前端通過JS處理將數(shù)據(jù)渲染在HTML中,最終呈現(xiàn)給用戶。圖1為數(shù)據(jù)傳輸流程圖:

          圖1 HTML、JS與PHP之間的數(shù)據(jù)傳輸流程圖

          以加入商品到購物車為例,本例為模擬數(shù)據(jù),和實際的數(shù)據(jù)庫的數(shù)據(jù)不同。

          圖2 商品列表

          加入購物車的點擊事件大致步驟為:用戶點擊"加入購物車"按鈕==>頁面獲取當(dāng)前商品唯一值(如商品ID:productID)==>JS處理點擊事件,將唯一值連同用戶信息通過ajax請求傳送給PHP===>PHP向服務(wù)器請求連接===>數(shù)據(jù)庫語句執(zhí)行===>服務(wù)器將執(zhí)行結(jié)果返回給PHP===>PHP將執(zhí)行結(jié)果傳送給前端。

          如果數(shù)據(jù)庫語句執(zhí)行成功,那么數(shù)據(jù)庫中該用戶的購物車表就多了一項剛加入的商品數(shù)據(jù),同時服務(wù)器也會向PHP返回執(zhí)行成功信息(及一條不為空的數(shù)據(jù)串),而用戶的界面就會顯示"成功加入購物車"等字樣(如圖1-1所示);若執(zhí)行失敗,也會將失敗信息(err)傳給PHP,用戶界面也會顯示相應(yīng)的提示,如圖3所示。

          圖3 成功加入購物車提示

          1. HTML中的代碼實例,商品列表信息通過引入art-template模塊進行渲染,代碼如下

          <ul class="productContainer">

          {{each product prod}}

          <li>

          <input type="text" value="{{prod.id}}">

          <img src="{{prod.img}}"/>

          <p>{{prod.title}}</p>

          <span>¥{{prod.price}}</span>

          <a href="javascript:void(0)">加入購物車</a>

          </li>

          {{/each}}

          </ul>

          2. JS中的數(shù)據(jù)請求處理實例如下,加入購物車的請求的api文件路徑為http://localhost/api/add.php,此時將點擊加入的商品ID及操作的用戶ID封裝為對象,用ajax的post請求傳給服務(wù)端

          $(".productContainer").on("click", ".add", function () {

          var productID=$("#prodID").val();//獲取到當(dāng)前商品的ID值

          $.post("http://localhost/api/add.php", {productID:productID,userID},

          function (data) {

          if (data.res_code===1) { //返回的數(shù)據(jù)中,data.res_code為1表示加入成功

          alert("加入成功");//對用戶進行加入成功提示

          } else {

          alert(data.res_message);//若不為1則表示加入失敗,data.res_message為失敗信息

          }

          }, "json");

          });

          3. PHP中的代碼(及JS中所請求的add.php文件)

          <?php

          // CORS跨域

          header("Access-Control-Allow-Origin:*");

          /* 向購物車添加商品 */

          $productID=$_POST["productID"];

          $userid=$_POST["userID"];

          // 連接數(shù)據(jù)庫服務(wù)器

          mysql_connect("localhost:3306", "root", "");

          // 選擇連接數(shù)據(jù)庫的名稱

          mysql_select_db("cart");

          // 讀寫庫編碼

          mysql_query("set character set utf8");

          mysql_query("set names utf8");

          // 編寫SQL語句

          //若該用戶未添加該商品,則向cartList表插入該商品,并將數(shù)量置為1

          $sql1="INSERT INTO cartList(productID, userID,count) VALUES ('$productID', '$userID',1)";

          //若該用戶已添加該商品,再次添加時只在cartList表中讓該商品的數(shù)量+1

          $sql2="UPDATE cartList SET count=count+1 WHERE productID='$productID' AND userid='$userID'";

          // 執(zhí)行SQL語句,首先執(zhí)行sql1的語句,如果表中有相同的數(shù)據(jù),則sql1會執(zhí)行失敗,那么執(zhí)行sql2

          $result=mysql_query($sql1);

          if(!$result){

          $result=mysql_query($sql2);

          }

          // 判斷

          if ($result) { // 執(zhí)行成功,將res_code的值設(shè)為1,并將返回信息設(shè)置為"加入成功"

          $arr=array("res_code"=>1, "res_message"=>"加入成功");

          echo json_encode($arr);

          } else { // 執(zhí)行失敗,則將res_code設(shè)為0,并將錯誤信息設(shè)置為"加入失敗"

          $arr=array("res_code"=>0, "res_message"=>"加入失敗" . mysql_error());

          echo json_encode($arr);

          }

          // 關(guān)閉連接

          mysql_close();

          ?>

          4. 當(dāng)用戶進入購物車時,頁面要請求該用戶在數(shù)據(jù)庫中的購物車表cartList,此時查詢結(jié)果應(yīng)該為一個數(shù)組,數(shù)組里的每一個子元素對應(yīng)一個唯一的商品對象,數(shù)據(jù)庫查詢語句如下:

          // 編寫SQL語句

          //在購物車cartList表中找到該用戶已經(jīng)添加的購物車商品數(shù)據(jù)的信息

          $sql="SELECT * FROM cartList WHERE userID='$userID'";

          // 執(zhí)行SQL語句

          $result=mysql_query($sql);

          // 新建一個數(shù)組用來存查詢出來的結(jié)果,每條結(jié)果僅有一條商品的信息

          $results=array();

          // 每次查詢成功,將當(dāng)前查詢到的商品結(jié)果存入results數(shù)組中

          while($row=mysql_fetch_row($result))

          {

          $results[]=$row;

          }

          if ($results) {//返回數(shù)組$results,res_code值設(shè)為1

          $arr=array("res_code"=>1, "res_message"=>$results);

          echo json_encode($arr);

          }

          else { // 查找失敗,返回信息"查找失敗",res_code值設(shè)為0

          $arr=array("res_code"=>0, "res_message"=>"查找失敗" . mysql_error());

          echo json_encode($arr);

          }

          關(guān)于PHP語法的說明:

          mysql_query() 函數(shù)執(zhí)行某個針對數(shù)據(jù)庫的查詢,每次查詢結(jié)果僅有一條數(shù)據(jù)。

          mysql_fetch_row() 從和結(jié)果標(biāo)識 data 關(guān)聯(lián)的結(jié)果集中取得一行數(shù)據(jù)并作為數(shù)組返回。每個結(jié)果的列儲存在一個數(shù)組的單元中,偏移量從 0 開始。依次調(diào)用 mysql_fetch_row() 將返回結(jié)果集中的下一行,如果沒有更多行則返回 FALSE。

          們今天來簡單的說一下我們的PHP文件上傳功能。

          首先我們需要對數(shù)據(jù)庫進行設(shè)計,我們想要進行文件的上傳,就需要一個id字段來存放順序,一個path字段來存放我們文件的路徑,一個time字段來存放時間戳,這是最基本的數(shù)據(jù)庫結(jié)果,當(dāng)然,如果我們想要有其他功能,我們也可以增建其他的字段。


          數(shù)據(jù)庫字段


          我們對數(shù)據(jù)庫建設(shè)完畢后,可以先建一個文件夾來存放我們的上傳文件,然后我們就可以來寫代碼了。注意:我們需要建一個PHP文件。

          這個的代碼量比較少,我就寫在一個文件里了,我們先寫個HTML的表單,注意,我們的form一定要有enctype="multipart/form-data"屬性,并且是post的提交方式。

          PHP代碼最好寫在HTML代碼的下面。

          我們在一開始可以寫個判斷語句,判斷是否有文件提交,如果有文件提交我們再執(zhí)行PHP代碼,如果有文件提交的話,我們進行數(shù)據(jù)庫的鏈接,我們獲取到上傳文件的時間并存放在變量里方便后續(xù)使用。

          我們規(guī)定一個路徑,路徑的指向就是我們剛剛創(chuàng)建的那個文件夾,然后用move_uploaded_file函數(shù)將我們的文件從服務(wù)器的臨時目錄里保存到我們想要保存的文件夾中。文件的保存我們就算完成了。

          注意:我們最好對數(shù)據(jù)庫的插入語句進行判斷,以免出現(xiàn)數(shù)據(jù)庫和文件上傳的數(shù)據(jù)不符的情況,我們可以將文件的上傳放在我們數(shù)據(jù)庫語句輸入成功的條件里,只有數(shù)據(jù)庫語句插入成功才能進行文件的上傳。

          接下來就是對數(shù)據(jù)庫的操作了,我們寫一個sql語句將我們文件的路徑和時間戳保存到我們的數(shù)據(jù)庫中至此我們文件上傳的功能就算實現(xiàn)了。

          代碼展示



          文件的關(guān)系

          我們一定要注意路徑的關(guān)系,不然的話我們可能無法上傳或者后期無法下載展示等。文件中的upload就是我們想要將文件上傳的位置。(此代碼無安全機制,只可提供思路或同學(xué)游戲使用)

          歡迎大家評論區(qū)留言指教[送心][送心][送心]


          主站蜘蛛池模板: 波多野结衣AV一区二区三区中文| 亚洲片国产一区一级在线观看| 国产成人一区在线不卡| 国产成人精品一区在线| 国模一区二区三区| AV鲁丝一区鲁丝二区鲁丝三区| 精品国产免费一区二区三区| 成人精品视频一区二区| 国产精品第一区揄拍| 日韩爆乳一区二区无码| 久草新视频一区二区三区| 四虎一区二区成人免费影院网址| 亚洲大尺度无码无码专线一区| 国产裸体歌舞一区二区| 夜夜嗨AV一区二区三区 | 精品一区高潮喷吹在线播放| 日韩一区二区三区视频久久| 国产精品视频无圣光一区| 国产欧美色一区二区三区 | 精品永久久福利一区二区| 亚洲夜夜欢A∨一区二区三区| 国精品无码A区一区二区| 一区二区网站在线观看| 国产一区二区三区电影| 日韩精品一区二三区中文| 国产一区在线视频观看| 国产高清视频一区二区| 国产精品一区二区久久沈樵| 国产一区视频在线免费观看| 日本精品一区二区三区在线视频| 四虎一区二区成人免费影院网址| 国产一区二区三区在线免费观看 | 性色AV一区二区三区| 无码国产精品一区二区免费3p | 色欲AV蜜桃一区二区三| 成人免费一区二区无码视频 | 国产精品无码一区二区三区电影| 国偷自产Av一区二区三区吞精| 久久99精品波多结衣一区| 蜜桃视频一区二区三区在线观看 | 久久精品国产一区二区三区|