首页 > 代码库 > 写一个函数,尽可能高效的,从一个标准 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 - 只返回 dirname
  • PATHINFO_BASENAME - 只返回 basename
  • PATHINFO_EXTENSION - 只返回 extension

定义和用法

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_PASSPHP_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路径中文件名