pathinfo(pathinfo iis)
如何用php获取文件名后缀
php获取文件后缀名(format file)
//方法一:
复制代码 代码如下:
?php
function extend_1( $file_name )
{
$retval = “” ;
$pt = strrpos ( $file_name , “.” );
if ( $pt ) $retval = substr ( $file_name , $pt +1, strlen ( $file_name ) - $pt );
return ( $retval );
}
//方法二
复制代码 代码如下:
function extend_2( $file_name )
{
$extend = pathinfo ( $file_name );
$extend = strtolower ( $extend [ "extension" ]);
return $extend ;
}
//方法三
复制代码 代码如下:
function extend_3( $file_name )
{
$extend = explode ( “.” , $file_name );
$va = count ( $extend )-1;
return $extend [ $va ];
}
//方法四
复制代码 代码如下:
function getFileExt( $file_name )
{
while ( $dot = strpos ( $file_name , “.” ))
{
$file_name = substr ( $file_name , $dot +1);
}
return $file_name ;
}
?
另外:
PHP pathinfo() 函数
PHP Filesystem 函数
定义和用法
pathinfo() 函数以数组的形式返回文件路径的信息。
语法
pathinfo(path,options)
参数
描述
path
必需。规定要检查的路径。
process_sections
可选。规定要返回的数组元素。默认是 all。
可能的值:
PATHINFO_DIRNAME – 只返回 dirname
PATHINFO_BASENAME – 只返回 basename
PATHINFO_EXTENSION – 只返回 extension
说明
pathinfo() 返回一个关联数组包含有 path 的信息。
包括以下的数组元素:
[dirname]
[basename]
[extension]
提示和注释
注释:如果不是要求取得所有单元,则 pathinfo() 函数返回字符串。
例子
例子 1
复制代码 代码如下:
?phpprint_r( pathinfo ( “/testweb/test.txt” ));?
// 输出:
// Array([dirname] = /testweb[basename] = test.txt[extension] = txt)
例子 2
复制代码 代码如下:
?phpprint_r( pathinfo ( “/testweb/test.txt” ,PATHINFO_BASENAME));?
// 输出:
// test.txt
Mac os 自带的 Apache 怎么开启 pathinfo
配置的 Apache 版本 : 2.2.13
在配置文件中加入
Files *.php
AcceptPathInfo On
/Files
这样 Apache 就可以支持针对 php 文件的 PathInfo 了.
2.让 Nginx 支持 PathInfo
在配置文件里添加
location ~ \.php
{
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
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 /var/html/$real_script_name;
fastcgi_param SCRIPT_NAME $real_script_name;
fastcgi_param PATH_INFO $path_info;
include conf/fcgi.conf;
}
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设置不起作用
pathinfo是检查服务器环境的,不启作用的原因我认为有两种
1、你的输出pathinfo文件,被.htaccess改写了
2、
服务环境
没有搭建好
PATHINFO模式和REWRITE模式哪个好
pathinfo 模式是index.ph/index/index 这种url格式。也需要服务器支持pathinfo才行
rewrite就是伪静态。把index.php隐藏掉
兼容模式就是普通的模式加s=/参数/或者m=modela=action这样的 各个开发框架都自己特定的格式。