首页 > 代码库 > 写一个函数,尽可能高效的,从一个标准 url 里取出文件的扩展名?pathinfo文件路径& parse_url解析url & basename路径中文件名
写一个函数,尽可能高效的,从一个标准 url 里取出文件的扩展名?pathinfo文件路径& parse_url解析url & basename路径中文件名
例如: http://www.sina.com.cn/abc/de/fg.php?id=1 需要取出 php 或 .php
方案1
<?php function getExt($url){ $arr = parse_url($url); $file = basename($arr[‘path‘]); $ext = explode(".",$file); return $ext[1]; } echo getExt("http://www.sina.com.cn/abc/de/fg.php?id=1");
输出结果:php
方案2
<?php $file="http://www.sina.com.cn/abc/de/fg.php?id=1"; $str=pathinfo($file,PATHINFO_EXTENSION); echo strchr($str,"?",true);
pathinfo() ——返回文件路径的信息
pathinfo(path,options)
参数 | 描述 |
---|---|
path | 必需。规定要检查的路径。 |
options | 可选。规定要返回的数组元素。默认是 all。
可能的值:
|
定义和用法
pathinfo() 函数以数组或字符串的形式返回关于文件路径的信息。
返回的数组元素如下:
- [dirname]:返回文件路径中的目录部分
- [basename]:返回文件路径中文件名的部分
- [extension]:返回文件路径中文件的类型的部分
提示和注释
注释:如果不是请求所有的元素,则 pathinfo() 函数返回字符串。
php开启pathinfo 路由模式:pathinfo 模式 需要 php.ini 开启下面这个参数 cgi.fix_pathinfo=1 path_info模式:http://www.xxx.com/index.php/模块/方法
实例 1
<?php print_r(pathinfo("/testweb/test.txt")); ?>
上面的代码将输出:
Array ( [dirname] => /testweb [basename] => test.txt [extension] => txt [filename] => test )
实例 2
<?php var_dump(pathinfo("/testweb/test.txt",PATHINFO_DIRNAME)); var_dump(pathinfo("/testweb/test.txt",PATHINFO_BASENAME)); var_dump(pathinfo("/testweb/test.txt",PATHINFO_EXTENSION)); ?>
注意:PATHINFO_EXTENSION等不能加双引号“”或单引号‘’。
警告:Warning: pathinfo() expects parameter 2 to be long, string given in C:\AppServ\www\test.php on line 3
上面的代码将输出:
string(8)"/testweb" string(8)"test.txt" string(3)"txt"
parse_url — 解析 URL,返回其组成部分
mixed parse_url ( string $url [, int $component = -1 ] )
本函数解析一个 URL 并返回一个关联数组,包含在 URL 中出现的各种组成部分。
本函数不是用来验证给定 URL 的合法性的,只是将其分解为下面列出的部分。不完整的 URL 也被接受,parse_url()会尝试尽量正确地将其解析。
参数
url:
要解析的 URL。无效字符将使用 _ 来替换。
component:
指定 PHP_URL_SCHEME
、 PHP_URL_HOST
、 PHP_URL_PORT
、 PHP_URL_USER
、 PHP_URL_PASS
、PHP_URL_PATH
、 PHP_URL_QUERY
或 PHP_URL_FRAGMENT
的其中一个来获取 URL 中指定的部分的 string。 (除了指定为 PHP_URL_PORT
后,将返回一个 integer 的值)。
返回值
对严重不合格的 URL,parse_url() 可能会返回 FALSE
。
如果省略了 component
参数,将返回一个关联数组 array,在目前至少会有一个元素在该数组中。数组中可能的键有以下几种:
scheme - 如 http host port user pass path query - 在问号 ? 之后 fragment - 在散列符号 # 之后
如果指定了component
参数, parse_url() 返回一个 string (或在指定为PHP_URL_PORT
时返回一个 integer)而不是 array。如果 URL 中指定的组成部分不存在,将会返回NULL
。
实例分析:
<?php print_r (parse_url("https://www.so.com/s?q=strpos&src=http://www.mamicode.com/360chrome_zoned"));
输出结果:
Array ( [scheme] => https [host] => www.so.com [path] => /s [query] => q=strpos&src=http://www.mamicode.com/360chrome_zoned )
实例2
<?php print_r (parse_url("https://i.cnblogs.com/EditPosts.aspx?opt=1"));
运行结果:
Array ( [scheme] => https [host] => i.cnblogs.com [path] => /EditPosts.aspx [query] => opt=1 )
Example #1 parse_url() 例子
<?php $url = ‘http://username:password@hostname/path?arg=value#anchor‘; print_r(parse_url($url)); echo parse_url($url, PHP_URL_PATH); ?>
以上例程会输出:
Array ( [scheme] => http [host] => hostname [user] => username [pass] => password [path] => /path [query] => arg=value [fragment] => anchor ) /path
Example #2 parse_url() 解析丢失协议的例子
<?php $url = ‘//www.example.com/path?googleguy=googley‘; // 在 5.4.7 之前这会输出路径 "//www.example.com/path" var_dump(parse_url($url)); ?>
以上例程会输出:
array(3) { ["host"]=> string(15) "www.example.com" ["path"]=> string(5) "/path" ["query"]=> string(17) "googleguy=googley" }
注释
Note:
本函数不能用于相对 URL。
Note:
parse_url() 是专门用来解析 URL 而不是 URI 的。不过为遵从 PHP 向后兼容的需要有个例外,对 file:// 协议允许三个斜线(file:///...)。其它任何协议都不能这样。
basename()—— 函数返回路径中的文件名部分。
basename(path,suffix)
参数 | 描述 |
---|---|
path | 必需。规定要检查的路径。 |
suffix | 可选。规定文件扩展名。如果文件有 suffix,则不会输出这个扩展名。 |
例子:
<?php $path = "/testweb/home.php"; //显示带有文件扩展名的文件名 echo basename($path); //显示不带有文件扩展名的文件名 echo basename($path,".php"); ?>
输出:
home.php
home
http://php.net/manual/zh/function.parse-url.php
http://www.w3school.com.cn/php/func_filesystem_basename.asp
写一个函数,尽可能高效的,从一个标准 url 里取出文件的扩展名?pathinfo文件路径& parse_url解析url & basename路径中文件名