前段时间我用Apache和TP开发了一个小网站,这是我第一次真正使用TP。我习惯使用pathinfo模式,一切在本地正常运行。但是部署到服务器时,由于对方使用nginx,默认不支持ThinkPHP的pathinfo模式,导致路径错误,出现页面循环跳转的问题,所以我下载了Nginx,在本地进行了测试。
其实要解决nginx不支持pathinfo的问题,有两种解决方案,一种是不使用pathinfo模式,另一种是修改nginx的配置文件,使其支持pathinfo。为了简化问题,我选择了第一种方式,因为在第二种方式中,我查看了大量数据,发现每个人的方法都不一样,有些方法差异很大,容易造成误导。所以我选择从简单出发,选择普通模式,虽然有一定的风险。修改index.php对应的前台代码后发现,前台基本正常,但后台仍然存在重定向问题。我花了很长时间查看日志文件。原来是编辑的问题。看来日志文件真的很重要,我以前从来没有关注过。输出出现在config.php文件的第一行。
在崇高,物料清单标题通常被添加到UTF-8文件。这个BOM表头通常在window下是不可见的,可以直接在其他编辑器下查看,也可以直接在Linux下查看。它通常显示为乱码字符,因此您可以删除该字符,或者直接在第一行按enter键,然后将其删除。在这里,背景基本上是可访问的。
有几个小问题需要解释。
1.登录时,我通过外部js文件发送了Ajax请求进行验证。我在js和ThinkPHP模块函数的通信中遇到了一些问题。从来不知道怎么写正确的路径,也没有找到相关资料。我不得不尝试各种各样的事情,但幸运的是,我找到了解决办法。通过直接带来条目文件名,代码如下。
复制代码如下:var url='system.php?m=Logina=DoLog ';$.post (URL,{'staffname' : $ staffname,' staffpwd ' : $ staffpwd,' verifycode' : $ verifycode},function(data){ if(data==' codeerr '){ alert('验证码错误!);} else if(data==' auth empty '){ alert('请输入用户名或密码!)}else if(data=='autherr'){ alert('错误的用户名或密码!' );}else if(data=='success'){ alert('登录成功!);location.href='system.php?m=Indexa=index ';//访问主页}
当然,这是正常模式下的访问模式。如果是pathinfo,只需要修改红色部分如下。
复制代码如下:var url=' doLog$.post (URL,{'staffname' : $ staffname,' staffpwd ' : $ staffpwd,' verifycode' : $ verifycode},function(data){ if(data==' codeerr '){ alert('验证码错误!);} else if(data==' auth empty '){ 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();标题(“内容类型:应用程序/八位字节流”);标头('接受-范围:字节');标题(' Content-type : application/vnd . ms-excel;charset=GB 2312 ');标题('内容-处置:附件;文件名={$filename}。xls’);
3.删除文件时会遇到路径问题,因为项目中使用的是相对路径,也就是相对于条目文件,但是删除文件时需要绝对路径。我没有找到合适的解决办法,只好用比较保守的方式。代码如下。
复制代码代码如下:美元路径=' ./Public/uploads/';$path=str_replace('\ ','/',realpath($path).'/');//获取绝对路径,并转换分隔符
4.在配置服务器和服务器端编程语言(专业超文本预处理器的缩写)方面,我使用了网关接口的方式,将如下代码保存为煤矿管理局文件,直接点击运行就可以了
f : PHP PHP-CGI。exe '-b 127。0 .0 .1:9000-c ' f : PHP PHP。ini '//后面是服务器端编程语言(专业超文本预处理器的缩写)文件的路径然后在服务器的配置文件里加上几句话
复制代码代码如下:位置~ .php/?* {根myapplicationsfastcgi _ pass 127。0 .0 .1:9000;index.php指数;fastcgi _ param SCRIPT _ FILENAME $ document _ root $ fastcgi _ SCRIPT _ name;包括fastcgi _ params#定义变量$path_info,用于存放返回文件路径的信息信息设置$ path _ info#定义变量$real_script_name,用于存放真实地址设置$ 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 _ param SCRIPT _ FILENAME $ document _ root $ real _ SCRIPT _ name;fastcgi _ param SCRIPT _ NAME $ real _ SCRIPT _ NAME;fastcgi _ param PATH _ INFO $ PATH _ INFO;}