在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 ignore_user_abort与register_shutdown_function 使用方法
Jun 14 PHP
PHP学习之字符串比较和查找
Apr 17 PHP
简单的php数据库操作类代码(增,删,改,查)
Apr 08 PHP
php目录操作实例代码
Feb 21 PHP
2个自定义的PHP in_array 函数,解决大量数据判断in_array的效率问题
Apr 08 PHP
简单概括PHP的字符串中单引号与双引号的区别
May 07 PHP
php强制下载文件函数
Aug 24 PHP
PHP 实现浏览记录并按日期分组
May 11 PHP
PHP实现从上往下打印二叉树的方法
Jan 18 PHP
thinkPHP5框架实现基于ajax的分页功能示例
Jun 12 PHP
Yii框架通过请求组件处理get,post请求的方法分析
Sep 03 PHP
php输出形式实例整理
May 05 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
PHP 基于文件头的文件类型验证类函数
2012/05/01 PHP
PHP使用finfo_file()函数检测上传图片类型的实现方法
2017/04/18 PHP
Javascript实例教程(19) 使用HoTMetal(2)
2006/12/23 Javascript
javascript下对于事件、事件流、事件触发的顺序随便说说
2010/07/17 Javascript
使用Mootools动态添加Css样式表代码,兼容各浏览器
2011/12/12 Javascript
Jquery 的outerHeight方法使用介绍
2013/09/11 Javascript
Jquery解析Json格式数据过程代码
2014/10/17 Javascript
JS基于面向对象实现的放烟花效果
2015/05/07 Javascript
JQuery实现超链接鼠标提示效果的方法
2015/06/10 Javascript
JS判断字符串变量是否含有某个字串的实现方法
2016/06/03 Javascript
BootStrap Validator对于隐藏域验证和程序赋值即时验证的问题浅析
2016/12/01 Javascript
浅谈Vue.nextTick 的实现方法
2017/10/25 Javascript
在vue-cli的组件模板里使用font-awesome的两种方法
2018/09/28 Javascript
express + jwt + postMan验证实现持久化登录
2019/06/05 Javascript
Vue实现剪切板图片压缩功能
2020/02/04 Javascript
开发Node CLI构建微信小程序脚手架的示例
2020/03/27 Javascript
Node.js 深度调试方法解析
2020/07/28 Javascript
vue监听浏览器原生返回按钮,进行路由转跳操作
2020/09/09 Javascript
微信小程序picker组件两列关联使用方式
2020/10/27 Javascript
[02:44]重置世界,颠覆未来——DOTA2 7.23版本震撼上线
2019/12/01 DOTA
Python+tkinter使用80行代码实现一个计算器实例
2018/01/16 Python
Python三种遍历文件目录的方法实例代码
2018/01/19 Python
python获取程序执行文件路径的方法(推荐)
2018/04/26 Python
Python 实现异步调用函数的示例讲解
2018/10/14 Python
keras模型可视化,层可视化及kernel可视化实例
2020/01/24 Python
python设置环境变量的作用整理
2020/02/17 Python
python json load json 数据后出现乱序的解决方案
2020/02/27 Python
Python爬虫实例——爬取美团美食数据
2020/07/15 Python
详解Python 函数参数的拆解
2020/09/02 Python
Python 实现二叉查找树的示例代码
2020/12/21 Python
HTML5基于flash实现播放RTMP协议视频的示例代码
2020/12/04 HTML / CSS
什么是servlet
2012/05/08 面试题
高三高考决心书
2014/03/11 职场文书
公开服务承诺制度
2014/03/26 职场文书
python中if和elif的区别介绍
2021/11/07 Python
Spring JPA 增加字段执行异常问题及解决
2022/06/10 Java/Android