哪个函数更适合在PHP中检索文件的基名:basename或pathinfo?

时间:2013-09-06 16:12:29

标签: php string file

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

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

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

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

性能方面看起来,basename()在1,000,000次迭代中的速度提高了约300ms:

<?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

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

2 个答案:

答案 0 :(得分:4)

如果您只想要基本名称,请使用basename函数。在任何情况下,尽量使用耗费较少的操作;为什么要创建一个你不需要的信息数组(使用pathinfo),你可以直接在字符串中得到你想要的东西(用basename函数)?

答案 1 :(得分: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