使用PHP从URL字符串获取文件路径/扩展名

时间:2013-05-16 08:21:44

标签: php file

我正在阅读pathinfo basename之类的内容。但我从这些中收集的是如何在使用绝对/相对路径时获取我想要的细节。我想弄清楚的是如何从url字符串中获取filename.ext(不一定是活动URL,可能是用户输入URL)。

目前,我希望获取包含图像的用户提供的URL的文件名和扩展名。但可能希望将此进一步扩展。总而言之,我想弄清楚如何获取文件名和扩展名

我想过尝试使用一些preg_match逻辑找到url中的最后一个/,将其拆分,找到?从那个(如果有的话)并删除超出该点的点,然后尝试在剩下什么之后将其排序。但是,如果文件中有多个.,即2012.01.01-name.jpg

,我就会陷入困境

所以我正在寻找一种理智的最佳方式来做到这一点,而不会有太大的误差。

3 个答案:

答案 0 :(得分:13)

使用parse_url($url, PHP_URL_PATH)获取URI并在pathinfo / basename中使用URI。

答案 1 :(得分:11)

$path      = parse_url($url, PHP_URL_PATH);       // get path from url
$extension = pathinfo($path, PATHINFO_EXTENSION); // get ext from path
$filename  = pathinfo($path, PATHINFO_FILENAME);  // get name from path

也可以使用单行:

$extension = pathinfo(parse_url($url, PHP_URL_PATH), PATHINFO_EXTENSION);
$filename  = pathinfo(parse_url($url, PHP_URL_PATH), PATHINFO_FILENAME);

答案 2 :(得分:0)

您可以使用以下代码执行您想要的操作...

$fileName = $_SERVER['SCRIPT_FILENAME']; //$_SERVER['SCRIPT_FILENAME'] can be replaced by the variable in which the file name is being stored
$fileName_arr = explode(".",$fileName);

$arrLength = count($fileName_arr);
$lastEle = $arrLength - 1;
echo $fileExt = $fileName_arr[$arrLength - 1]; //Gives the file extension
unset($fileName_arr[$lastEle]);
$fileNameMinusExt = implode(".",$fileName_arr);

$fileNameMinusExt_arr = explode("/",$fileNameMinusExt);
$arrLength = count($fileNameMinusExt_arr);
$lastEle = $arrLength - 1;
echo $fileExt = $fileNameMinusExt_arr[$arrLength - 1]; //Gives the filename