zoukankan      html  css  js  c++  java
  • Linux环境thinkphp配置以及数据源驱动改动

    项目中须要用到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 HomeController;
    use ThinkController;
    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


    凝视掉哪行代码以后能够正常显示:



    此外,假设须要自己写sql能够这样:

            header("Content-type: text/html; charset=utf-8");
           //dump(M('account')->select());    
           $Model = new ThinkModel();
           $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,

  • 相关阅读:
    sql-trace-10046-trcsess-and-tkprof
    教你深入理解软件包的配置、编译与安装过程
    Java RESTful 框架的性能比较
    gcc、arm-Linux-gcc和arm-elf-gcc的组成及区别
    Linux线上系统程序debug思路及方法
    使用systemtap调试Linux内核 :www.lenky.info
    SystemTap使用技巧 1
    gvfs
    Systemtap examples, Network
    .NET 大型信息化建设标准基础数据管理平台
  • 原文地址:https://www.cnblogs.com/jhcelue/p/7085744.html
Copyright © 2011-2022 走看看