Показывать свойства 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="&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>");
          }
        }
      ?>
Author: JakeGould, 2014-06-16

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, а затем просто получите к ним доступ, как к любому другому массиву.

 2
Author: JakeGould, 2017-09-16 11:14:43