8

在 PHP 中获取文件的基本名称(不带扩展名的文件名)的推荐方法是什么?

echo basename('foo.jpg', '.jpg');
// outputs "foo"

echo pathinfo('foo.jpg', PATHINFO_FILENAME);
// outputs "foo"

显然两者都产生相同的输出。使用一个比另一个有什么优势?

在性能方面,它看起来basename()比 1,000,000 次迭代快了大约 300 毫秒:

<?php

$f = 'foo.jpg';
$n = 1000000;

$start = microtime(true);

for ($i = 0; $i < $n; $i++) {
    basename($f);
}

$stop1 = microtime(true);

for ($i = 0; $i < $n; $i++) {
    pathinfo($f, PATHINFO_FILENAME);
}

$stop2 = microtime(true);

echo "Basename result: " . ($stop1 - $start) . " seconds\n";
echo "Pathinfo result: " . ($stop2 - $stop1) . " seconds\n";

这输出:

Basename result: 1.0358278751373 seconds
Pathinfo result: 1.3277871608734 seconds

除了边际性能提升之外,我还对这些功能如何在幕后实现感兴趣?在这两种情况下检索基本名称的底层算法是否相似?

4

2 回答 2

4

如果您只想要 basename,请使用 basename 函数。在任何情况下都一如既往地尝试使用消耗较少的操作;当您可以直接在字符串中获取所需内容(使用 basename 函数)时,为什么要创建不需要的信息数组(使用 pathinfo)?

于 2013-09-06T16:18:46.933 回答
0

我可能会使用 pathinfo 因为这可以返回文件的详细信息数组,例如:

$file_info = pathinfo('foo.jpg');

$dir_path = $file_info['dirname']; // outputs /path/to/foo
$base_name = $file_info['basename']; // outputs foo.jpg
$ext = $file_info['extension']; // outputs jpg
$file_name = $file_info['filename']; // outputs foo
于 2013-09-06T16:24:53.640 回答