1. 程式人生 > >Linux環境thinkphp配置以及資料來源驅動修改

Linux環境thinkphp配置以及資料來源驅動修改

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow

也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!

               

專案中需要用到thinkphp,以下簡稱tp。

linux版本:64位CentOS 6.4

Nginx版本:nginx1.8.0

php版本:php5.5.28

thinkphp版:3.2.3


1.安裝LNMP

Linux環境Nginx安裝與除錯以及PHP安裝


2.專案框架

tp原始碼下載http://www.thinkphp.cn/

最新文件http://www.kancloud.cn/manual/thinkphp/1682

下載框架後,解壓縮到web目錄下面,可以看到初始的目錄結構如下:
1.www  WEB部署目錄(或者子目錄)
2.├─index.php       入口檔案
3.├─README.md       README檔案
4.├─Application     應用目錄
5.├─Public          資原始檔目錄
6.└─ThinkPHP        框架目錄


說明:需要修改網站根目錄下的runtime目錄許可權

#chmod 777  ./Runtime/

根目錄下index.php

if (version_compare(PHP_VERSION, '5.3.0', '<'))    die('require PHP > 5.3.0 !');// 開啟除錯模式 建議開發階段開啟 部署階段註釋或者設為falsedefine('APP_DEBUG', TRUE);/** * 快取目錄設定 * 此目錄必須可寫,建議移動到非WEB目錄 */define('RUNTIME_PATH'
, './Runtime/');//定義公共模組的目錄,放到應用目錄外define('COMMON_PATH', './Common/');//關閉目錄安全檔案的生成define('BUILD_DIR_SECURE', false);// 定義應用目錄define('APP_PATH', './Application/');//define('BIND_MODULE','Admin');// 引入ThinkPHP入口檔案require './ThinkPHP/ThinkPHP.php';// 親^_^ 後面不需要任何程式碼了 就是如此簡單


修改Nginx配置

 server { listen       81;        server_name  localhost;    location / {        index  index.htm index.html index.php;        #訪問路徑的檔案不存在則重寫URL轉交給ThinkPHP處理        if (!-e $request_filename) {           rewrite  ^/(.*)$  /index.php/$1  last;           break;        }    }    location ~ \.php/?.*$ {        root        /usr/wwwtp;        fastcgi_pass   127.0.0.1:9000;        fastcgi_index  index.php;        #載入Nginx預設"伺服器環境變數"配置        include        fastcgi.conf;                #設定PATH_INFO並改寫SCRIPT_FILENAME,SCRIPT_NAME伺服器環境變數        set $fastcgi_script_name2 $fastcgi_script_name;        if ($fastcgi_script_name ~ "^(.+\.php)(/.+)$") {            set $fastcgi_script_name2 $1;            set $path_info $2;        }        fastcgi_param   PATH_INFO $path_info;        fastcgi_param   SCRIPT_FILENAME   $document_root$fastcgi_script_name2;        fastcgi_param   SCRIPT_NAME   $fastcgi_script_name2;    }}

在瀏覽器輸入  http://localhost/index.php 預覽首頁

子頁面本來是:

http://localhost/index.php/Home/school/select

經過URL重寫以後是:

http://localhost/Home/school/select

如果需要去掉Home可以繼續修改上面的重寫規則:

rewrite  ^/(.*)$  /index.php/Home/$1  last;

http://localhost/school/select


3.thinkphp的MVC結構

專案檔案結構


如上圖所示在Controller目錄中新建一個SchoolController.class.php


在SchoolController.class.php新建一個index的方法

namespace Home\Controller;use Think\Controller;class SchoolController extends Controller {    public function index(){                echo "Hello Thinkphp!";    }}


在瀏覽器輸入:http://192.168.0.104:81/home/school/index



4.資料庫配置

參考官方文件:ThinkPHP內建了抽象資料庫訪問層,把不同的資料庫操作封裝起來,我們只需要使用公共的Db類進行操作,而無需針對不同的資料庫寫不同的程式碼和底層實現,Db類會自動呼叫相應的資料庫驅動來處理。目前包含了Mysql、SqlServer、PgSQL、Sqlite、Oracle、Ibase、Mongo等資料庫的支援,並且採用PDO方式。


如果是mysql就很簡單按照官方的教程做就可以,如果是SQLserver或者其他資料庫就會有些麻煩,需要稍稍做些修改。

另外關於linux環境PHP連線SQLserver可以參考此文:Linux環境PHP5.5以上連線SqlServer2008

首先需要改配置檔案Common/conf/config.php,下面是sqlserver的配置:

return array//'配置項'=>'配置值'        'DB_TYPE'   => 'sqlsrv', // 資料庫型別          'DB_USER'   => 'unix21', // 使用者名稱        'DB_PWD'    => '123456', // 密碼        'DB_PORT'   => 1433, // 埠        'DB_PREFIX' => '', // 資料庫表字首        'DB_DSN'       =>  'dblib:host=XXX:1433;dbname=XXX',          'DB_CHARSET'=> 'utf8', // 字符集        'DB_DEBUG'  =>  TRUE, // 資料庫除錯模式 開啟後可以記錄SQL日誌 3.2.3新增);


在SchoolController.class.php新增一個accout的方法
    public function account(){         header("Content-type: text/html; charset=utf-8");         dump(M('account')->select());    }


注意:需要修改Sqlsrv.class.php中的程式碼,註釋PDO::SQLSRV_ATTR_ENCODING   =>  PDO::SQLSRV_ENCODING_UTF8,

檔案位置如圖所示:


不然會報錯:

Undefined class constant 'PDO::SQLSRV_ATTR_ENCODING'

錯誤位置

FILE: /usr/wwwtp/ThinkPHP/Library/Think/Db.class.php  LINE: 39


註釋掉哪行程式碼以後可以正常顯示:



此外,如果需要自己寫sql可以這樣:

        header("Content-type: text/html; charset=utf-8");       //dump(M('account')->select());           $Model = new \Think\Model();       $result=$Model->query("select top 10 * from account;");       dump($result);


其實thinkphp底層還是使用PDO連線資料庫,可以自己修改Driver.class.php.

註釋這一行

$this->linkID[$linkNum] = new PDO( $config['dsn'], $config['username'], $config['password'],$this->options); 

改為硬編碼就知道前面的配置還是在這裡被使用:

$this->linkID[$linkNum] = new PDO( "dblib:host=192.168.1.235:1433;dbname=XXX","unix21","password",$this->options);


在瀏覽器一樣顯示出資料。


因為開發中總是會遇到一些特殊需求,所以,如果有需要就可以自己寫一個底層的資料來源驅動或者在tp的基礎上做修改就可以了。


要想用好一個框架還是需要去讀一讀其原始碼,搞清楚其執行原理,達到為我所用,而不應該是用了幾年框架都不知道底層怎麼回事。

 

tp開啟除錯模式

配置檔案增加程式碼

'SHOW_PAGE_TRACE' => TRUE,

 

thinkphp的坑

由於我們目前是tp+sqlserver所以估計使用的人不多,導致bug很少暴漏。

1).表名

除了首字母以外中間的一律小寫

2).where條件

必須按資料庫裡欄位一樣,例如資料庫是ID那麼你也要寫ID,資料庫是State你也要寫State。

 

$map['State'] =2;

$map['ID'] = 5;

//資料庫原表名是GJGZNews,如果你寫為M('GJGZNews')那麼會被TP變為G_J_G_Z_News

$news=M('gjgznews')->where($map)->select();

dump($news);

 

許可權問題

_STORAGE_WRITE_ERROR_:./Runtime/Cache/Home/b39761fdd01eadcd4b8a82f371520558.php

├─Runtime        執行時目錄
│  ├─Cache       模版快取目錄
│  ├─Data        資料目錄
│  ├─Logs        日誌目錄
│  └─Temp        快取目錄

模版快取目錄Cache下的Home目錄需要許可權

# chmod 777  ./Home/

 原因是$this->display('list');繫結模板就需要許可權寫目錄生成快取檔案!

 

 

開啟thinkPHP全站快取

Think配置檔案增加:

       'DB_SQL_BUILD_CACHE' => true,

                  //開啟靜態快取

       'HTML_CACHE_ON'       => true,

                  'HTML_CACHE_TIME'   =>   600,   // 全域性靜態快取有效期(秒)

       'HTML_CACHE_RULES'    => array(

       '*'=>array('{$_SERVER.REQUEST_URI|md5}'),

 

 

需要給/Application/Html這個目錄增加許可權

# chmod -R 777 Html

原理是第一次請求生成html後在該目錄生成一個個的html,再設定的時間內直接請求靜態檔案

-rw-r--r-- 1 nobody nobody 177460 Oct 1311:24 f6f0651ffb91f9bba1bb24ae0574d4f9.html

-rw-r--r-- 1 nobody nobody 162988 Oct 1311:29 f9f5ed1a3286dc39724e78dfeb3da4f4.html

-rw-r--r-- 1 nobody nobody  20109 Oct13 11:39 fcf7fa39e34d97c4dd219d7725e6d50f.html

-rw-r--r-- 1 nobody nobody 175251 Oct 1311:34 fdaa60f6d213dfca9069e6a520c755f9.html

官方文件:

http://document.thinkphp.cn/manual_3_2.html#html_cache

 

另外我還開啟了 SQL解析快取也是有用的,這個主要針對第一次

 

所以如果你的應用有大量的SQL查詢需求,那麼可以開啟SQL解析快取以減少SQL解析提高效能。要開啟SQL解析快取,只需要設定:

'DB_SQL_BUILD_CACHE'=>true,

 

           

給我老師的人工智慧教程打call!http://blog.csdn.net/jiangjunshow

這裡寫圖片描述