热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

thinkphplinux数据库配置,Linux环境thinkphp配置以及数据源驱动修改

项目中需要用到thinkphp,以下简称tp。linux版本:64位CentOS6.4Nginx版本:nginx1.8.0php版本&#x

项目中需要用到thinkphp,以下简称tp。

linux版本:64位CentOS 6.4

Nginx版本:nginx1.8.0

php版本:php5.5.28

thinkphp版:3.2.3

1.安装LNMP

2.项目框架

下载框架后,解压缩到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 预览首页

3.thinkphp的MVC结构

项目文件结构

0818b9ca8b590ca3270a3433284dd417.png

如上图所示在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

0818b9ca8b590ca3270a3433284dd417.png

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,

文件位置如图所示:

0818b9ca8b590ca3270a3433284dd417.png

不然会报错:

Undefined class constant 'PDO::SQLSRV_ATTR_ENCODING'

错误位置

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

0818b9ca8b590ca3270a3433284dd417.png

注释掉哪行代码以后可以正常显示:

0818b9ca8b590ca3270a3433284dd417.png

此外,如果需要自己写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);

0818b9ca8b590ca3270a3433284dd417.png

在浏览器一样显示出数据。

因为开发中总是会遇到一些特殊需求,所以,如果有需要就可以自己写一个底层的数据源驱动或者在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);



推荐阅读
  • php缓存ri,浅析ThinkPHP缓存之快速缓存(F方法)和动态缓存(S方法)(日常整理)
    thinkPHP的F方法只能用于缓存简单数据类型,不支持有效期和缓存对象。S()缓存方法支持有效期,又称动态缓存方法。本文是小编日常整理有关thinkp ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • Android系统移植与调试之如何修改Android设备状态条上音量加减键在横竖屏切换的时候的显示于隐藏
    本文介绍了如何修改Android设备状态条上音量加减键在横竖屏切换时的显示与隐藏。通过修改系统文件system_bar.xml实现了该功能,并分享了解决思路和经验。 ... [详细]
  • 本文总结了在开发中使用gulp时的一些技巧,包括如何使用gulp.dest自动创建目录、如何使用gulp.src复制具名路径的文件以及保留文件夹路径的方法等。同时介绍了使用base选项和通配符来保留文件夹路径的技巧,并提到了解决带文件夹的复制问题的方法,即使用gulp-flatten插件。 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • Vagrant虚拟化工具的安装和使用教程
    本文介绍了Vagrant虚拟化工具的安装和使用教程。首先介绍了安装virtualBox和Vagrant的步骤。然后详细说明了Vagrant的安装和使用方法,包括如何检查安装是否成功。最后介绍了下载虚拟机镜像的步骤,以及Vagrant镜像网站的相关信息。 ... [详细]
  • svnWebUI:一款现代化的svn服务端管理软件
    svnWebUI是一款图形化管理服务端Subversion的配置工具,适用于非程序员使用。它解决了svn用户和权限配置繁琐且不便的问题,提供了现代化的web界面,让svn服务端管理变得轻松。演示地址:http://svn.nginxwebui.cn:6060。 ... [详细]
  • 如何实现JDK版本的切换功能,解决开发环境冲突问题
    本文介绍了在开发过程中遇到JDK版本冲突的情况,以及如何通过修改环境变量实现JDK版本的切换功能,解决开发环境冲突的问题。通过合理的切换环境,可以更好地进行项目开发。同时,提醒读者注意不仅限于1.7和1.8版本的转换,还要适应不同项目和个人开发习惯的需求。 ... [详细]
  • 本文介绍了H5游戏性能优化和调试技巧,包括从问题表象出发进行优化、排除外部问题导致的卡顿、帧率设定、减少drawcall的方法、UI优化和图集渲染等八个理念。对于游戏程序员来说,解决游戏性能问题是一个关键的任务,本文提供了一些有用的参考价值。摘要长度为183字。 ... [详细]
  • 深入解析Linux下的I/O多路转接epoll技术
    本文深入解析了Linux下的I/O多路转接epoll技术,介绍了select和poll函数的问题,以及epoll函数的设计和优点。同时讲解了epoll函数的使用方法,包括epoll_create和epoll_ctl两个系统调用。 ... [详细]
  • CentOS7.8下编译muduo库找不到Boost库报错的解决方法
    本文介绍了在CentOS7.8下编译muduo库时出现找不到Boost库报错的问题,并提供了解决方法。文章详细介绍了从Github上下载muduo和muduo-tutorial源代码的步骤,并指导如何编译muduo库。最后,作者提供了陈硕老师的Github链接和muduo库的简介。 ... [详细]
  • Java如何导入和导出Excel文件的方法和步骤详解
    本文详细介绍了在SpringBoot中使用Java导入和导出Excel文件的方法和步骤,包括添加操作Excel的依赖、自定义注解等。文章还提供了示例代码,并将代码上传至GitHub供访问。 ... [详细]
  • Tomcat安装与配置教程及常见问题解决方法
    本文介绍了Tomcat的安装与配置教程,包括jdk版本的选择、域名解析、war文件的部署和访问、常见问题的解决方法等。其中涉及到的问题包括403问题、数据库连接问题、1130错误、2003错误、Java Runtime版本不兼容问题以及502错误等。最后还提到了项目的前后端连接代码的配置。通过本文的指导,读者可以顺利完成Tomcat的安装与配置,并解决常见的问题。 ... [详细]
  • Annotation的大材小用
    为什么80%的码农都做不了架构师?最近在开发一些通用的excel数据导入的功能,由于涉及到导入的模块很多,所以开发了一个比较通用的e ... [详细]
author-avatar
爱做梦的蓝梦
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有