pathinfo,pathinfo得到的文件名为空

http://www.itjxue.com  2023-01-06 11:43  来源:未知  点击次数: 

上传后thinkphp中为什么pathinfo设置不起作用

pathinfo是检查服务器环境的,不启作用的原因我认为有两种

1、你的输出pathinfo文件,被.htaccess改写了

2、

服务环境

没有搭建好

tp框架pathinfo格式怎么配置

我们在安装lnmp一键安装的时候,一般都没有开启访问pathinfo模式

这种模式在比较多的框架中用到,比如国人的ThinkPHP,还比如C写的Yaf也用到,不支持就比较可惜了。

pathinfo的原理就是将index.php/xxxx/xxx类似的网址当做php来执行,并且需要将xxx/xxx写入到$_SERVER[‘PATH_INFO’]中

这个是lnmp.org(我装的就是这个,所以我以这个为例子)开出来的虚拟机的配置中的一段(vhost/***.conf),修改nginx配置文件也是这样修改

location ~ .*\.(php|php5)?$

{

try_files $uri =404;

fastcgi_pass unix:/tmp/php-cgi.sock;

fastcgi_index index.php;

include fcgi.conf;

}

大家明显看到,location中的正则中,写了一个$,悲剧了,表示就此结束(?表示前面的php只匹配一次,这个只是随便提提)

最终,应该如此处理(location哪里也修改了,因为我没有用到php5处理):

if (!-e $request_filename)

{

rewrite ^\/(.*)$ /index.php/$1 last;

break;

}

location ~ \.php

{

try_files $uri =404;

fastcgi_pass unix:/tmp/php-cgi.sock;

fastcgi_index index.php;

include fcgi.conf;

set $path_info "";

set $real_script_name $fastcgi_script_name;

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

set $real_script_name $1;

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;

}

后面的部分处理我是参考的网络上搜索到的文档,带注释版告诉大家

location ~ \.php

{

try_files $uri =404;

fastcgi_pass unix:/tmp/php-cgi.sock;

fastcgi_index index.php;

include fcgi.conf;

set $path_info "";#初始化一个变量

set $real_script_name $fastcgi_script_name;#初始化一个变量,并且获取到一个原始赋值

if ($fastcgi_script_name ~ "^(.+?\.php)(/.+)$") {#检测如果.php后面还存在/开始参数,将参数处理

set $real_script_name $1;#将第一个正则子串匹配到的赋值

set $path_info $2;#将第二个正则子串匹配到的赋值

}

fastcgi_param SCRIPT_FILENAME $document_root$real_script_name;#修改SCRIPT_FILENAME值

fastcgi_param SCRIPT_NAME $real_script_name;#修改SCRIPT_NAME值

fastcgi_param PATH_INFO $path_info;#修改PATH_INFO值

#上述三个赋值都是replace into的模式,这些值都是写在fcgi.conf中

}

thinkphp 需要 pathinfo吗

ThinkPHP中pathinfo的两种模式、四种路径访问模式和URL重写相关知识进行了总结归纳,分享给大家便于查询和借鉴。具体归纳如下:

1、pathinfo

访问模块IndexAction.class.php下边的test方法

;a=test 等同于

2、四种路径访问模式

在config目录下边来做修改 URL_MODEL的值,分别表述如下:

值为0 叫做普通模式。如:模块a=方法

值为1 叫做pathinfo模式。如:模块/方法

值为2 叫做rewrite重写(伪静态) 可以自己写相关的rewrite规则,也可以使用系统为我们提供的rewrite规则隐藏掉index.php,生成:模块/方法

值为3 叫做兼容模式。当服务器上面不支持pathinfo模式的时候,但是你又在之前的路径访问格式上面,全部用的是pathinfo格式。那么它会提示你路径格式不正确。那么,你就可以用标号为3的兼容模式来处理。他的路径访问类似于模块/方法

3、URL重写步骤:

(1)、D:\wamp\wamp\Apache2\conf\httpd.conf开启apache服务器中的URL_REWRITE模块

(2)、AllowOverride None 将 None 改为 All

(3)、确保config.php配置文件中 URL_MODEL 设置为 2

(4)、把 .htaccess 文件放到入口文件的同级目录下

采用URL重写利于seo,不过会加大服务器的性能消耗。

(责任编辑:IT教学网)

更多

推荐CGI/Perl教程文章