Показывать свойства docx (заголовок, теги) с помощью PHP для файлов в каталоге
Я использую приведенный ниже код, чтобы найти список всех docx
, xlsx
и pdf
файлы в каталоге и ссылка на файлы (, взятые с этого сайта).
Я хотел бы показать docx
такие свойства, как Title
, Author
и все теги были добавлены в документ. Есть ли способ отобразить эти свойства, используя только PHP?
<div id="container">
<table class="sortable">
<thead>
<tr>
<th>Filename</th>
<th>Date Modified</th>
</tr>
</thead>
<tbody>
<div align="center">
<?php
// Opens directory
$myDirectory=opendir(".");
// Set Accepted Files
$acceptExts = array("docx", "pdf", "xlsx");
// Gets Each Entry
while($entryName = readdir($myDirectory)) {
$exts = explode(".", $entryName);
if(in_array($exts[1],$acceptExts)) {
$dirArray[] = $entryName;
}
}
// Finds extensions of files
function findexts ($filename) {
$filename=strtolower($filename);
$exts=split("[/\\.]", $filename);
$n=count($exts)-1;
$exts=$exts[$n];
return $exts;
}
// Closes directory
closedir($myDirectory);
// Counts elements in array
$indexCount=count($dirArray);
// Sorts files
sort($dirArray);
// Loops through the array of files
for($index=0; $index < $indexCount; $index++) {
// Allows ./?hidden to show hidden files
if($_SERVER['QUERY_STRING']=="hidden")
{$hide="";
$ahref="./";
$atext="Hide";}
else
{$hide=".";
$ahref="./?hidden";
$atext="Show";}
if(substr("$dirArray[$index]", 0, 1) != $hide) {
// Gets File Names
$name=$dirArray[$index];
$namehref=$dirArray[$index];
// Gets Extensions
$extn=findexts($dirArray[$index]);
// Gets file size
$size=number_format(filesize($dirArray[$index]));
// Gets Date Modified Data
$modtime=date("M j Y", filemtime($dirArray[$index]));
$timekey=date("Ymd", filemtime($dirArray[$index]));
// Separates directories
if(is_dir($dirArray[$index])) {
$extn="<Directory>";
$size="<Directory>";
$class="dir";
} else {
$class="file";
}
// Cleans up . and .. directories
if($name=="."){$name=". (Current Directory)"; $extn="<System Dir>";}
if($name==".."){$name=".. (Parent Directory)"; $extn="<System Dir>";}
//Display to screen
print("
<tr class='$class'>
<td><a href='./$namehref'>$name</a></td>
<td sorttable_customkey='$timekey'><a href='./$namehref'>$modtime</a></td>
</tr>");
}
}
?>
1 answers
Я хотел бы показать свойства docx, такие как заголовок, Автор и любые теги, которые были добавлены в документ. Есть ли способ отобразить эти свойства, используя только PHP?
То, что вы ищете, - это инструмент, который может извлекать метаданные из файла. И как только вы поймете, что такое метаданные - в основном данные, которые описывают данные в файле или объекте, - тогда 1/2 работа будет выполнена. Остальное включает в себя поиск инструмента, который лучше всего подходит для ваших нужд.
Если вы хотите чистое решение PHP, а затем изучите использование getID3
это хорошая и хорошо развитая библиотека PHP, которая должна быть в состоянии справиться с этой задачей. Не на 100% уверен в его возможностях обработки DOCx и других форматов Microsoft, но на это стоит обратить внимание.
Кроме того, у самих Microsoft есть библиотека PHP под названием PHPWord
это позволяет вам манипулировать содержимым Microsoft DOCx и связанных с ним документов, поэтому я предполагаю, что извлечение метаданных является частью этого процесса.
И прошлое Библиотеки, специфичные для PHP, если вы работаете в Linux или на платформе Unix, такой как Mac OS X, рассмотрите возможность использования такого инструмента, как exiftool
который я использовал и настоятельно рекомендую. Да, это системный двоичный файл, но вы можете использовать его с помощью exec()
вызовов в PHP, чтобы заставить его работать, это волшебство.
Глядя на ваш конкретный код, поскольку он, похоже, получает содержимое каталога только через readdir
, вам придется закодировать некоторую логику, чтобы подключиться к этим именам файлов и путям, а затем передать фактический файл в getID3
, PHPWord
или exiftool
к считывайте данные во что-нибудь.
Итак, быстро взглянув на циклы в работе вашего кода, посмотрите на эту строку, которая получает размер файла:
// Gets file size
$size=number_format(filesize($dirArray[$index]));
Ну, до или после того, как произойдет эта строка, вам нужно будет сделать что-то вроде этого:
// Gets file info metadata.
$getID3 = new getID3;
$file_info = $getID3->analyze($dirArray[$index]);
Тогда содержимое $file_info
будет представлять собой массив данных, подключенных к файлу, загруженному в $dirArray[$index]
. Как получить доступ к этим данным? Неясно прямо сейчас, но вы можете посмотреть, какой материал он захватил, сбросив содержимое $file_info
, например это.
echo '<pre>';
print_r($file_info);
echo '</pre>';
А затем выясните, где находятся нужные вам данные $file_info
, а затем просто получите к ним доступ, как к любому другому массиву.