有没有办法让这个功能更好? [复制]

Posted

技术标签:

【中文标题】有没有办法让这个功能更好? [复制]【英文标题】:Is there a way to make this function better? [duplicate] 【发布时间】:2012-10-07 12:14:55 【问题描述】:

可能重复:How to extract a file extension in php?

我在教程中找到了以下函数来获取文件的扩展名,但我认为它有点太长了。所以我想有办法缩短它。

function getExtension($str) 
    $i = strrpos($str,".");
    if (!$i) return "";
    $l = strlen($str) - $i;
    $ext = substr($str, $i+1, $l);
    return $ext;

$str 将是一个文件名。 有没有办法在不影响稳定性和输出的情况下缩短这个功能? 我做过这样的事情:

function getExtension($str)     
    $ext = pathinfo($str)['extension'];
    return $ext;

但这对我不起作用,但可能是我做错了什么。

【问题讨论】:

你可以从缩进开始。 :) 我觉得这个问题更适合 codereview.stackexchange.com 我希望这会有所作为 ;) 甚至不知道 codereview.stackexchange.com 存在。存在的好东西!感谢您的通知! 看看How to extract a file extension in PHP? 在你的第二个例子中,它应该是 pathinfo($str,... 而不是 pathinfo($_FILES['image']['name'].... 【参考方案1】:

正确的方法是使用pathinfo() 函数。

$extension = pathinfo($filename, PATHINFO_EXTENSION);

【讨论】:

哎呀,现在我明白了,多么愚蠢的错误 :O 感谢您的帮助! 在编写 PHP 时请记住:如果您发现自己正在编写实用函数,请停止。 PHP 已经有了。 ;)【参考方案2】:

已移至:https://***.com/a/12932338/367456 - 此答案将被删除。

【讨论】:

可能值得一提的是,$ext = (new SplFileInfo($path))->getExtension(); 语法仅适用于 PHP>=5.4 @DennisHaarbrink:是的,这种类型的取消引用仅在 PHP >= 5.4 中可用,SplFileInfo 本身在 PHP 5 >= 5.1.2 中可用。【参考方案3】:

大概是这样的:

function getExtension($filename)

    $parts = explode('.', $filename);

    if (sizeof($parts) > 1) 
        return array_pop($parts);
    

    return '';

【讨论】:

我认为这比使用strrpos 更糟糕。数组更慢... 是的。但是在这种情况下,我们实际期望的文件名有多长? :) Tho,@Dennis 的回答确实更好。

以上是关于有没有办法让这个功能更好? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法让这个(内部 URL)JQuery 计数器每 20 秒读取一次 JSON

有没有办法让默认的 NSDragOperation 移动并仍然允许复制?

有没有办法让文本大小随窗口大小而变化? [复制]

有没有办法将参数传递给Runnable? [复制]

有没有办法让自定义目标依赖于 CPack? [复制]

Bootstrap 4-有没有办法让表格行可点击? [复制]