Linux环境thinkphp配置以及数据源驱动改动
项目中须要用到thinkphp,以下简称tp。
linux版本号:64位CentOS 6.4
Nginx版本号:nginx1.8.0
php版本号:php5.5.28
thinkphp版:3.2.3
1.安装LNMP
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结构
项目文件结构
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" />
如上图所看到的在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就非常easy依照官方的教程做就能够,假设是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, // port
'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
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" />
凝视掉哪行代码以后能够正常显示:
此外,假设须要自己写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);
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" />
在浏览器一样显示出数据。
由于开发中总是会遇到一些特殊需求。所以。假设有须要就能够自己写一个底层的数据源驱动或者在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配置以及数据源驱动改动的更多相关文章
- LNMP1.3一键安装Linux环境,配置Nginx运行ThinkPHP3.2
LNMP1.3一键安装Linux环境,配置Nginx运行ThinkPHP3.2 你是否遇见过:安装LNMP1.3环境后,运行ThinkPHP 3.2,只能打开首页,不能访问控制器,报404错误. 按照 ...
- linux环境下配置虚拟主机域名
linux环境下面配置虚拟主机域名 第一步:在root目录下面(即根目录)ls(查看文件)cd进入etc目录find hosts文件vi hosts 打开hosts文件并进行编辑在打开的文件最下面添加 ...
- Linux环境变量配置全攻略
Linux环境变量配置 在自定义安装软件的时候,经常需要配置环境变量,下面列举出各种对环境变量的配置方法. 下面所有例子的环境说明如下: 系统:Ubuntu 14.0 用户名:uusama 需要配置M ...
- 阿里云ECS服务器Linux环境下配置php服务器(二)--phpMyAdmin篇
上一篇讲了PHP服务器的基本配置,我们安装了apache,php,还有MySQL,最后还跑通了一个非常简单的php页面,有兴趣的朋友可以看我的这篇博客: 阿里云ECS服务器Linux环境下配置php服 ...
- 每日所学之自学习大数据的Linux环境的配置
今天开始配置环境,因为下载镜像文件需要很长时间,加上训练,所以Linux环境之配置了一半 VMware下载及安装教程(Window) 在安装虚拟机时需要下载镜像文件 下面是我下载的镜像文件的地址 Ce ...
- Linux 环境变量配置的 6 种方法,建议收藏
关注「开源Linux」,选择"设为星标" 回复「学习」,有我为您特别筛选的学习资料~ Linux环境变量配置 在自定义安装软件的时候,经常需要配置环境变量,下面列举出各种对环境变量 ...
- 超详干货!Linux 环境变量配置全攻略
点击上方"开源Linux",选择"设为星标" 回复"学习"获取独家整理的学习资料! Linux环境变量配置 在自定义安装软件的时候,经常需要 ...
- Linux环境变量配置的三个方法--/etc/profile,~/.bashrc,shell
[环境配置的原因] 在windows系统下,很多软件的安装都需要设置环境变量,比如安装JAVA JDK.如果不安装环境变量,在非软件安装的目录下运行javac命令,将会报告"找不到文件&qu ...
- Linux环境安装配置Swftools
系统:CentOS6.5的64位版本 这里有一位仁兄的几个错误处理办法,下面是swftools的安装配置步骤: 1.安装所需的库和组件.机器之前安装过了,主要安装的是下面几个组件.如果不安装会 ...
随机推荐
- tp框架---表单验证
自动验证是ThinkPHP模型层提供的一种数据验证方法,可以在使用create创建数据对象的时候自动进行数据验证.分为静态验证和动态验证. 关于基础知识,请查看手册“自动验证”一章. 一.静态验证 ( ...
- BZOJ 1061费用流
思路: 我们可以列出几个不等式 用y0带进去变成等式 下-上 可以消好多东西 我们发现 等式左边的加起来=0 可以把每个方程看成一个点 正->负 连边 跑费用流即可 //By SiriusRen ...
- [Codeforces]Educational Codeforces Round 37 (Rated for Div. 2)
Water The Garden #pragma comment(linker, "/STACK:102400000,102400000") #include<stdio.h ...
- 在线word论文生成的方法
下午实验室师妹问我latex转word生成的格式不行咋办.于是找了一下网上,发现了一个可以自动生成word论文的网站 https://typeset.io/formats/bmc/default-te ...
- MySQL 5.6 Reference Manual-14.5 InnoDB Tablespace Management
14.5 InnoDB Tablespace Management 14.5.1 Resizing the InnoDB System Tablespace 14.5.2 Changing the ...
- C++:数据流和缓冲区
(1):C++之自定义的input缓冲区 原文链接:http://hi.baidu.com/nicker2010/item/d0c4cd2a7caf27c4ddf69aeb input stream用 ...
- Java中的常量
常量的概念 是指在Java程序中固定不变的数据.我们可以理解为是一种特殊的变量,它的值被设定后,在程序运行过程中不允许改变. 常量的分类 整数常量: 所有的整数 例如 100 -100 123 ...
- 如何分页爬取数据--beautisoup
'''本次爬取讲历史网站'''#!usr/bin/env python#-*- coding:utf-8 _*-"""@author:Hurrican@file: 分页爬 ...
- javascript 富文本 注意事项
富文本编辑器 div内嵌iframe iframe body contenteditable属性 true 整个iframe 即为可编辑框,创建时注意事项: 1.编辑 焦点问题 弹出新控件时为控件设置 ...
- Codeforces 787B Not Afraid( 水 )
链接:传送门 题意:判断 m 组数,如果某一组中出现负数就判断这一组中是否存在与之相反的数,如果每一组中都满足要求则输出 "NO" 反之输出 "YES" 思路: ...