使用PHP为dir中的文件显示docx属性(标题,标签)

时间:2014-06-16 19:00:39

标签: php metadata docx

我正在使用以下代码查找目录中所有docxxlsxpdf文件的列表,并链接到文件(taken from this site)。

我希望显示docxTitleAuthor属性,并且已将任何标记添加到文档中。有没有办法只使用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="&lt;Directory&gt;"; 
            $size="&lt;Directory&gt;"; 
            $class="dir";
          } else {
            $class="file";
          }

          // Cleans up . and .. directories 
          if($name=="."){$name=". (Current Directory)"; $extn="&lt;System Dir&gt;";}
          if($name==".."){$name=".. (Parent Directory)"; $extn="&lt;System Dir&gt;";}

          //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 个答案:

答案 0 :(得分:2)

  

我想展示docx属性,例如Title,Author和any   标签已添加到文档中。有没有办法显示   那些只使用PHP的属性?

您正在寻找的是一种可以从文件中提取元数据的工具。一旦你理解了元数据是什么 - 基本上是描述文件或对象中数据的数据 - 那么工作就完成了1/2。其余的工作包括找到最适合您需求的工具。

如果你想要一个纯PHP解决方案,那么请研究一下使用getID3这是一个不错的&amp;完善的PHP库,应该能够处理任务。不是100%肯定它处理DOCx和其他Microsoft格式的功能,但值得一看。

此外,Microsoft自己拥有名为PHPWord的PHP库,允许您操作Microsoft DOCx&amp ;;的内容。因此我假设元数据提取是混合的一部分。

如果您使用的是Linux或像Mac OS X这样的Unix vairiant,请使用我曾使用过的exiftool等工具。极力推荐。是的,它是一个系统二进制文件,但您可以通过PHP中的exec()调用来使用它,以使其发挥作用。

查看您的特定代码,因为它似乎只通过readdir获取目录内容,您必须编写一些逻辑来挂钩这些文件名&amp;路径&amp;然后将实际文件传递给getID3PHPWordexiftool,将数据读入。

如此快速地查看代码工作中的循环,请查看获取文件大小的这一行:

// 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的位置,然后像任何其他数组一样访问它。