You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用PHP给文件夹中所有无扩展名文件添加统一扩展名?

批量给无扩展名文件添加通用扩展名的解决方案

你的原代码存在几个核心问题导致无法正常运行:

  1. 正则匹配逻辑偏差:@^((?!webm).)*$@i会把带路径的条目(比如./asset/test)整体纳入判断,而且会选中所有不含webm字符的文件——包括带其他扩展名的,不是只筛选无扩展名的目标文件。
  2. 未过滤目录:glob($dir . '*')会返回目录下的文件和子目录,直接重命名目录会触发错误。
  3. 缺少失败反馈:如果PHP进程没有目录读写权限,重命名操作会静默失败,无法定位问题。

下面是修正后的代码,能精准给无扩展名文件添加.webm扩展名:

<?php
$dir = './asset/';
// 获取目录下所有文件和目录条目
$items = glob($dir . '*');

foreach ($items as $item) {
    // 跳过目录,只处理文件
    if (!is_file($item)) {
        continue;
    }
    
    $filename = basename($item);
    // 筛选完全没有扩展名的文件(文件名中不含.)
    if (strpos($filename, '.') === false) {
        // 执行重命名并输出结果,方便排查问题
        if (rename($item, $item . '.webm')) {
            echo "已重命名:$item -> $item.webm\n";
        } else {
            echo "重命名失败:$item\n";
        }
    }
}
?>

关键优化说明:

  • 用is_file()过滤目录,避免误操作子目录
  • 用strpos($filename, '.') === false精准识别无扩展名的文件
  • 添加了重命名结果的输出,便于快速定位失败原因
  • 如果要排除已有的.webm文件,可补充判断:
    // PHP 8.0+版本可用
    if (strpos($filename, '.') === false && !str_ends_with($item, '.webm')) {
    // PHP 8.0以下版本兼容写法
    if (strpos($filename, '.') === false && substr($item, -5) !== '.webm') {
    

操作注意事项:

  • 先备份目标目录的文件,避免批量操作出错导致数据丢失
  • 确保运行PHP的进程对./asset/目录有读写权限
  • 命令行环境直接执行php your_script.php即可;网页环境运行时,注意隐藏脚本路径,避免安全风险

内容的提问来源于stack exchange,提问作者Yidi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 06:42:08