写一个函数,尽可能高效的,从一个标准 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=360chrome_zoned"));

输出结果:

Array
(
    [scheme] => https
    [host] => www.so.com
    [path] => /s
    [query] => q=strpos&src=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:[email protected]/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

 
时间: 2024-07-30 03:26:43

写一个函数,尽可能高效的,从一个标准 url 里取出文件的扩展名?pathinfo文件路径& parse_url解析url & basename路径中文件名的相关文章

写一个函数尽可能高效的,从一个标准url里取出文件的扩展名

$url_path = 'http://www.sina.com.cn/abc/de/fg.php?id=1'; $temp = pathinfo($url_path,PATHINFO_BASENAME); $temp = explode("?", $temp); $temp1 = substr($temp[0], 2,5); echo $temp1;

谭浩强 C程序设计 8.5 写一个函数,使输入的一个字符串按返序存放

写一个函数,使输入的一个字符串按返序存放,在主函数中输入和输出字符串. #include <stdio.h> #include <string.h> int main(){ void reverse(char arr[]); char arr[50]; gets(arr); reverse(arr); for(int i=0; i< strlen(arr); i++){ printf("%3c",arr[i]); } printf("\n&quo

输入6个人的成绩放入到一个一维数组中,然后打印出平均分,最后按成绩 从大到小打印。三个功能(输入是一个函数,求平均分是一个函数,排序是一个 函数)都用函数实现,最后在main方法中调用。

/*5.输入6个人的成绩放入到一个一维数组中,然后打印出平均分,最后按成绩从大到小打印.三个功能(输入是一个函数,求平均分是一个函数,排序是一个函数)都用函数实现,最后在main方法中调用.*/ #include <stdio.h> int inputScore(){ int score; scanf("%d",&score); return score;} double avg(int scores[],int length){ int i,score = 0;

实现一个函数itoa(int n, char s[]),将整数n这个数字转换为对应的字符串,保存到s中。

实现一个函数itoa(int n, char s[]),将整数n这个数字转换为对应的字符串,保存到s中. #include <stdio.h> void reverse(char *left, char *right){ while (left < right) {  char tmp = *left;  *left = *right;  *right = tmp;  left++;  right--; }} void my_itoa(int n, char s[]){ char *st

scala基础题--函数可以没有返回值案例,编写一个函数,从终端输入一个整数,打印出对应的金字塔

函数可以没有返回值案例,编写一个函数,从终端输入一个整数,打印出对应的金字塔 import scala.io.StdIn object work02 { def main(args: Array[String]): Unit = { println("请输入一个数") var num:Int=StdIn.readInt() val pige=(num:Int)=>{ for (i<-1 to num){ for (j<-1 to num-i){ print("

从一个标准URL中提取文件的扩展名

例如:http://www.sina.cn/abc/de.php?id=1  提出php 1. $url = 'http://www.sina.cn/abc/de.php?id=1'; $arr = parse_url($url); $filepath = $arr['path'];//文件路径  /abc/de.php $filename = basename[$fielpath];// 文件名de.php $ext = explode('.',$filename); $ext = $ext[

Java File类学习笔记4:自定义一个类,过滤指定扩展名的文件

自定义一个类,继承FileNameFilter类,获得某一目录下所有指定扩展名的文件. 方法一: /** * 说明: * 自定义FilterByJava类,过滤指定扩展名的文件 * */ import java.io.File; import java.io.FilenameFilter; public class FilterByJava implements FilenameFilter{ private String ext; public FilterByJava(String ext)

编写一个程序,将 d: \ java 目录下的所有.java 文件复制到d: \ jad 目录下,并 将原来文件的扩展名从.java 改为.jad

1.编写一个程序,将 d: \ java 目录下的所有.java 文件复制到d: \ jad 目录下,并 将原来文件的扩展名从.java 改为.jad package copy; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; i

C#获取一个文件的扩展名

C#获取一个文件的扩展名System.IO.Path.GetExtension( "文件名 ");ChangeExtension   更改路径字符串的扩展名. Combine   合并两个路径字符串. GetDirectoryName   返回指定路径字符串的目录信息. GetExtension   返回指定的路径字符串的扩展名. GetFileName   返回指定路径字符串的文件名和扩展名. GetFileNameWithoutExtension   返回不具有扩展名的指定路径字符