如何在PHP中获取Word文档的文件名并存入数据库?
获取Word文档文件名并存入数据库的解决方案
看起来你混淆了文档元数据和文件系统文件名的区别——Word文档的内部元数据(就是你用$docxmeta读取的关键词、作者这类信息)里默认不包含它在文件系统里的文件名,所以$docxmeta->getFileName()自然没法生效。文件名是存储在文件系统层面的,得从你加载文档时的路径/上传信息里提取。
下面给你几种常见场景的解决方案:
1. 从本地文件系统加载文档的情况
假设你是通过固定路径加载文档的,比如:
$filePath = '/path/to/your/example.docx'; // 替换成你的文档实际路径 $docx = \PhpOffice\PhpWord\IOFactory::load($filePath); $docxmeta = $docx->getDocInfo();
直接用PHP内置的basename()函数提取文件名:
// 获取带扩展名的完整文件名(比如"example.docx") $Filename = basename($filePath); // 若需要不带扩展名的文件名,可添加第二个参数: $FilenameWithoutExt = basename($filePath, '.docx');
2. 通过表单上传文档的情况
如果是用户通过HTML表单上传文件,文件名存在$_FILES数组里:
// 假设表单文件输入框的name属性为"word_document" if ($_FILES['word_document']['error'] === UPLOAD_ERR_OK) { // 获取上传的原始文件名(比如"report.docx") $Filename = $_FILES['word_document']['name']; // 临时文件路径,用于加载文档 $tempFile = $_FILES['word_document']['tmp_name']; // 加载文档并读取关键词 $docx = \PhpOffice\PhpWord\IOFactory::load($tempFile); $docxmeta = $docx->getDocInfo(); $Keywords = $docxmeta->getKeywords(); // 将文件名和关键词存入数据库(以PDO为例) $pdo = new PDO('mysql:host=localhost;dbname=your_db', 'username', 'password'); $stmt = $pdo->prepare("INSERT INTO your_table (filename, keywords) VALUES (?, ?)"); $stmt->execute([$Filename, $Keywords]); }
为什么$docxmeta->getFileName()不生效?
大多数处理Word文档的PHP库(比如PHPWord、phpdocx)的元数据对象,只会读取文档内部的内置属性(作者、标题、关键词、创建时间等)。而文件名是文件在系统中的标识,不属于文档本身的内容,所以这类库不会提供获取文件名的方法。
结合你现有的代码,整合后的示例如下:
// 定义文档路径 $filePath = '/var/www/docs/annual_report.docx'; // 加载文档并读取关键词 $docx = \PhpOffice\PhpWord\IOFactory::load($filePath); $docxmeta = $docx->getDocInfo(); $Keywords = $docxmeta->getKeywords(); echo "Keywords : " . $Keywords . "<br>"; // 获取文件名 $Filename = basename($filePath); echo "Filename : " . $Filename . "<br>"; // 存入数据库(替换为你自己的数据库操作逻辑) // $yourDbConnection->query("INSERT INTO your_table (filename, keywords) VALUES ('$Filename', '$Keywords')");
内容的提问来源于stack exchange,提问作者Joe Smith
相关产品推荐
相关产品推荐

