项目中需要用到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 !');
// 开启调试模式 建议开发阶段开启 部署阶段注释或者设为false
define('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,

Linux环境thinkphp配置以及数据源驱动修改相关推荐

  1. 中修改环境变量_超详干货!Linux环境变量配置全攻略

    Linux环境变量配置 在自定义安装软件的时候,经常需要配置环境变量,下面列举出各种对环境变量的配置方法. 下面所有例子的环境说明如下: 系统:Ubuntu 14.0 用户名:uusama 需要配置M ...

  2. 【OS】Linux环境下配置固定IP地址--静态IP地址(不能上外网问题)

    [OS]Linux环境下配置固定IP地址--静态IP地址(不能上外网问题) ---red hat重启网卡 service network restart /etc/rc.d/init.d/networ ...

  3. 超详干货!Linux 环境变量配置全攻略

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自|机器学习实验室 Linux环境变量配置 在自定义安装软件 ...

  4. Linux环境变量配置出错,导致登录不了......

    Linux环境变量配置出错导致的后果: 1.登陆不了 linux 了 2.基本命令全失效了(如:ls,vi,sudo,su,find,cp等),除了cd命令可用. 解决方法有如下三步: 1.从图形登陆 ...

  5. Linux环境变量配置

    这篇文章主要介绍了Linux环境变量配置全攻略,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧. 在自定义安装软件的时候,经常需要 ...

  6. 操作系统:Linux 环境变量配置的 6 种方法!

    Linux环境变量配置 在自定义安装软件的时候,经常需要配置环境变量,下面列举出各种对环境变量的配置方法. 下面所有例子的环境说明如下: 系统:Ubuntu 14.0 用户名:uusama 需要配置M ...

  7. Linux 环境变量配置总结

    Linux是多用户的任务系统,对于每个用户都可以指定特定的用户变量.针对不同程序在不同的环境下运行就需要修改环境变量进行定制,本文介绍 Linux常见的环境变量设置方法,希望对你有帮助.图片 一.Li ...

  8. Linux 环境变量配置全攻略

    Linux环境变量配置 在自定义安装软件的时候,经常需要配置环境变量,下面列举出各种对环境变量的配置方法. 下面所有例子的环境说明如下: 系统:Ubuntu 14.0 用户名:uusama 需要配置M ...

  9. Linux 环境变量配置全攻略,超详细~

    感谢您抽出 . . 阅读本文 Linux是多用户的任务系统,对于每个用户都可以指定特定的用户变量.针对不同程序在不同的环境下运行就需要修改环境变量进行定制,本文介绍 Linux常见的环境变量设置方法, ...

最新文章

  1. Go 源码阅读笔记 text/template/parse
  2. [原译]11个高效的VS调试技巧
  3. VS2008中vss的设置
  4. 【WebGoat笔记】--- Cross-Site Scripting(XSS)
  5. Visual studio代码行数统计
  6. java如何解析cron成可视化_宅家30天,2万字节java高级工程师面试题解析,如何斩获阿里p7...
  7. 使用匿名内部类实现方式二线程创建 java 1615474836
  8. 关于“我的藏书阁:.NET/数据库应用开发”的几点看法。
  9. NS-仿真实验--FTP
  10. 证明神经网络的通用逼近定理_在您理解通用逼近定理之前,您不会理解神经网络。...
  11. 软件项目经理应具备的素质和条件_项目经理应具备的素质和能力
  12. Unity3d美颜滤镜
  13. libreelec投屏_PVE系列四:安装LibreELEC-KODI的LINUX版
  14. 插入安装光盘并重新启动计算机,电脑开机时显示 插入windows安装光盘并重新启动计算机 怎么解决 急救...
  15. iOS组件化:从零开始搭设私有库
  16. 在1705年第一个电灯泡是如何被发明的?
  17. corpus iweb_「As is depicted」和「As depicted」哪个对?
  18. 微信开发相关图书推荐
  19. 互联网神经学面临的16个重要问题
  20. caoz的梦呓:谈谈信息不对称与To B业务的难点【推荐】

热门文章

  1. Ubuntu中APUE 3rd中实例编译时err_sys函数找不到解决方法
  2. 0基础培训java必须掌握的一些知识点
  3. Python OpenCV GrabCut进行前景分割和提取
  4. 深度学习(6)构造简单的神经网络
  5. Node.js复制/删除服务器端文件到指定目录文件夹下,并且预判是否存在该目录,如果没有,则递归创建该文件夹目录
  6. 在Ubuntu 14.04 64bit下编译安装rtmpdump并调试输出
  7. 对Squid使用的一些总结
  8. LTE PUCCH F2 TX/RX汇总
  9. BitCask 持久化hash存储引擎 原理介绍
  10. [转载] static class 静态类(Java)