PHP 剪切未知的文件扩展名


PHP Cut unknown file extensions

我需要有关PHP中文件操作的帮助。我有 4 个具有已知名称和未知扩展名的文件。诸如此类:

Y923BBBB.E120506
Y924BBBB.E120606
Y925BBBB.E120706
Y926BBBB.E120806

并且文件扩展名每天都在变化。我如何为每个文件剪切或剥离文件扩展名,以便仅保留这样的名称:

Y923BBBB
Y924BBBB
Y925BBBB
Y926BBBB

有人有想法吗?

反过来想一想:你想提取文件名,而不是"删除扩展名":

echo pathinfo($file, PATHINFO_FILENAME);

http://php.net/pathinfo

使用

strrpos 查找最后一个.,使用 substr 仅获取该点之前的子字符串。要查找文件并重命名它们,请使用 glob 并重命名:

foreach(glob('*') as $f) {
    if ($f == '.' || $f == '..') continue;
    $stripped = substr($f, 0, strrpos($f, '.'));
    rename($f, $stripped);
}

注意glob('*')在Windows和Linux上的工作方式不同(与答案相比)。如果您想要更稳定的代码,请改用DirectoryIterator。此外,一个已经提供了处理文件扩展名所需的函数,并且当文件内部没有点时不会中断 - 如本例所示。并且要非常小心rename,使用 glob 仅返回文件名,rename将其作为完整路径处理,您将文件移动到您可能不想移动它们的位置。

foreach(new DirectoryIterator('.') as $f) {
    /* @var $f splFileInfo*/
    if (!$f->isFile()) continue;
    ($ext = strlen($f->getExtension())) && $ext++;
    if (!$ext) continue;
    $path = $f->getRealPath();
    rename($path, substr($path, 0, -$ext));
}

当心。您应该始终注意重命名操作。与文件系统相关的每个操作和更改它都需要更加小心,比如说只读过程。