在Nginx上部署ThinkPHP项目教程


Posted in PHP onFebruary 02, 2015

前段时间用Apache配合TP开发了一个小型网站,也算是我使用TP的第一次实战。我习惯使用pathinfo模式,本地运行一切正常,然而部署到服务器上时,由于对方使用的是Nginx,默认是不支持ThinkPHP的pathinfo模式,所以导致路径错误,出现了页面循环跳转的问题,于是就把nginx下载下来在本地亲自测试。

      其实,要解决nginx不支持pathinfo的问题,有两个解决思路,一是不使用pathinfo模式,二是修改nginx的配置文件,使它支持pathinfo。为了使问题简单化,我选择了第一种方式,因为就第二种方式,我查了很多资料,发现大家的方法不尽相同,有的还差别很大,容易造成误导,所以我选择从简出发,选择普通模式,虽然有一定的风险。当把index.php对应的前台代码修改完毕之后,发现前台基本正常,可是后台仍然出现重定向的问题。折腾了半天之后,我才想到看一下日志文件,原来是编辑器的问题,看来日志文件真的很重要,以前一直不重视。在config.php文件的第一行出现了输出,

在Nginx上部署ThinkPHP项目教程

      在sublime下,一般会为UTF-8文件添加BOM头,这个BOM头在window下通常是看不见的,可以通过其他的编辑器查看到,Linux下也可以直接看到,通常显示出来是一个乱码字符,把这个字符删除即可,或者简单一点,直接在第一行回车,再删除就可以了。到这里,后台基本可以访问了。

      有几个小问题需要说明一下。

      1.在登录的时候,我是通过外部js文件发送Ajax请求进行验证的,在js与ThinkPHP模块函数通信遇到了点问题,一直不知道正确的路径该怎么写,也没有查到相关资料,只能各种试,好在找到了解决办法,通过直接带上入口文件名的方式,代码如下

 var url="system.php?m=Login&a=doLog";

 $.post(url,{"staffname":$staffname,"staffpwd":$staffpwd,"verifycode":$verifycode},function(data){

     if(data=="codeerr"){

           alert("验证码错误!");

     }else if(data=="authempty"){

           alert("请输入用户名或密码!")

     }else if(data=="autherr"){

           alert("用户名或密码错误!");

     }else if(data=="success"){

           alert("登录成功!");

            location.href="system.php?m=Index&a=index";   //访问首页

     }

    当然,此为普通模式下的访问方式,如果是pathinfo的话,只需要把红色部分如下修改即可

 var url="doLog";

 $.post(url,{"staffname":$staffname,"staffpwd":$staffpwd,"verifycode":$verifycode},function(data){

       if(data=="codeerr"){

               alert("验证码错误!");

       }else if(data=="authempty"){

               alert("请输入用户名或密码!")

       }else if(data=="autherr"){

               alert("用户名或密码错误!");

       }else if(data=="success"){

               alert("登录成功!");

               location.href="../Index/index";   //跳转首页,访问其他模块的方法

      2.下载文件的时候,总是莫名多出许多html的东西,原因是缓冲区没有清空,可以通过以下代码进行修改,不过这种方式实际上是下载的仍然是html格式的文件,只不过改了一下后缀名为xls而已,因而用excel打开的时候会提示格式问题,忽略即可。同时需要注意使用 icov()函数转换编码,因为xls默认编码格式并非utf-8.

ob_start();

ob_end_clean();

Header( "Content-type: application/octet-stream"); 

Header( "Accept-Ranges: bytes "); 

Header( "Content-type:application/vnd.ms-excel;charset=gb2312");   

Header( "Content-Disposition:attachment;filename={$filename}.xls");

      3.在删除文件时会遇到路径问题,因为项目中使用的较多的是相对路径,即相对入口文件而言,但是删除文件则需要使用绝对路径,我并没有找到合适的解决方法,只好用了比较保守的方式,代码如下

 $path="./Public/uploads/";    

 $path=str_replace("\\","/",realpath($path)."/");  //获取绝对路径,并转换分隔符

       4.在配置nginx和php方面,我使用了fastCGI的方式,将如下代码保存为cmd文件,直接点击运行就可以了

"F:\php\php-cgi.exe" -b 127.0.0.1:9000 -c "F:\php\php.ini"     //后面是php文件的路径
      然后在nginx的配置文件里加上几句话

 location ~ \.php/?.* {

            root           myapplications;

            fastcgi_pass   127.0.0.1:9000;

             fastcgi_index  index.php;

             fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;

            include        fastcgi_params;

            #定义变量 $path_info ,用于存放pathinfo信息

             set $path_info "";

             #定义变量 $real_script_name,用于存放真实地址

             set $real_script_name $fastcgi_script_name;

             #如果地址与引号内的正则表达式匹配

             if ($fastcgi_script_name ~ "^(.+?\.php)(/.+)$") {

                     #将文件地址赋值给变量 $real_script_name

                     set $real_script_name $1;

                     #将文件地址后的参数赋值给变量 $path_info

                     set $path_info $2;

             }

             #配置fastcgi的一些参数

             fastcgi_param SCRIPT_FILENAME $document_root$real_script_name;

             fastcgi_param SCRIPT_NAME $real_script_name;

             fastcgi_param PATH_INFO $path_info;

         }
PHP 相关文章推荐
PHP $_FILES函数详解
Mar 09 PHP
PHP实现的博客欢迎提示功能(很特别哦)
Jun 05 PHP
php函数实现判断是否移动端访问
Mar 03 PHP
php使用curl简单抓取远程url的方法
Mar 13 PHP
使用新浪微博API的OAuth认证发布微博实例
Mar 27 PHP
php 实现进制相互转换
Apr 07 PHP
PHP flush 函数使用注意事项
Aug 26 PHP
Laravel5.* 打印出执行的sql语句的方法
Jul 24 PHP
PHP实现超简单的SSL加密解密、验证及签名的方法示例
Aug 28 PHP
php 数据结构之链表队列
Oct 17 PHP
php连接MSsql server的五种方法总结
Mar 04 PHP
ThinkPHP5.1框架页面跳转及修改跳转页面模版示例
May 06 PHP
PHP中开启gzip压缩的2种方法
Jan 31 #PHP
PHP调试函数和日志记录函数分享
Jan 31 #PHP
php上传文件问题汇总
Jan 30 #PHP
PHP文件缓存类示例分享
Jan 30 #PHP
php递归删除目录与文件的方法
Jan 30 #PHP
php递归法读取目录及文件的方法
Jan 30 #PHP
php实现简单文件下载的方法
Jan 30 #PHP
You might like
让你的WINDOWS同时支持MYSQL4,MYSQL4.1,MYSQL5X
2006/12/06 PHP
PHP学习笔记之二 php入门知识
2011/01/12 PHP
PHP利用hash冲突漏洞进行DDoS攻击的方法分析
2015/03/26 PHP
Laravel中Facade的加载过程与原理详解
2017/09/22 PHP
ThinkPHP5.1验证码功能实现的示例代码
2020/06/08 PHP
利用javascript中的call实现继承
2007/01/22 Javascript
jquery 关键字“拖曳搜索”之“拖曳”以及 图片“提示自适应放大”效果 的实现
2010/04/18 Javascript
Jquery Easyui对话框组件Dialog使用详解(14)
2016/12/19 Javascript
BootStrap CSS全局样式和表格样式源码解析
2017/01/20 Javascript
数组Array的排序sort方法
2017/02/17 Javascript
微信小程序 中wx.chooseAddress(OBJECT)实例详解
2017/03/31 Javascript
实例详解JSON取值(key是中文或者数字)方式
2017/08/24 Javascript
微信小程序的日期选择器的实例详解
2017/09/29 Javascript
详解Vue中的scoped及穿透方法
2019/04/18 Javascript
如何解决js函数防抖、节流出现的问题
2019/06/17 Javascript
用Angular实现一个扫雷的游戏示例
2020/05/15 Javascript
Vue2.0 ES6语法降级ES5的操作
2020/10/30 Javascript
Python实现二维数组按照某行或列排序的方法【numpy lexsort】
2017/09/22 Python
Tensorflow环境搭建的方法步骤
2018/02/07 Python
Python输入二维数组方法
2018/04/13 Python
谷歌浏览器小字体处理方案即12px以下字体
2013/12/17 HTML / CSS
便携式太阳能系统的创新者:GOAL ZERO
2018/02/04 全球购物
表达自我的市场:Society6
2018/08/01 全球购物
大学生就业自荐信
2013/10/26 职场文书
决定成败的关键——创业计划书
2014/01/24 职场文书
小学生读书活动总结
2014/06/30 职场文书
物业管理委托协议(2篇)
2014/09/23 职场文书
民主生活会对照检查材料思想汇报
2014/09/27 职场文书
财务统计员岗位职责
2015/04/14 职场文书
邹越演讲观后感
2015/06/15 职场文书
优秀教师工作总结2015
2015/07/22 职场文书
关于做家务的心得体会
2016/01/23 职场文书
CSS 文字装饰 text-decoration & text-emphasis 详解
2021/04/06 HTML / CSS
如何使用PyCharm及常用配置详解
2021/06/03 Python
Java面试题冲刺第十五天--设计模式
2021/08/07 面试题
MySQL详细讲解变量variables的用法
2022/06/21 MySQL