Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PHP为目录中的文件显示docx属性(标题、标记)_Php_Metadata_Docx - Fatal编程技术网

使用PHP为目录中的文件显示docx属性(标题、标记)

使用PHP为目录中的文件显示docx属性(标题、标记),php,metadata,docx,Php,Metadata,Docx,我使用下面的代码查找目录中所有docx、xlsx和pdf文件的列表,并链接到这些文件() 我想显示docx属性,例如Title、Author以及已添加到文档中的任何标记。是否有一种仅使用PHP显示这些属性的方法 <div id="container"> <table class="sortable"> <thead> <tr> <th>Filename</th>

我使用下面的代码查找目录中所有
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>");
          }
        }
      ?>

文件名
修改日期
我想显示docx属性,如标题、作者和任何
标签已添加到文档中。有没有一种展示的方式
那些属性仅仅使用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/2的工作就完成了。剩下的就是找到一个最适合你需要的工具

如果您想要一个纯PHP解决方案,那么可以研究使用哪一个开发良好的PHP库来处理该任务。虽然不能100%确定它处理DOCx和其他微软格式的能力,但值得一看

另外,微软自己也有一个名为PHP的库,它允许你操作microsoftdocx及相关文档的内容,所以我认为元数据提取是其中的一部分

如果您使用的是Linux或Mac OS X之类的Unix版本,那么可以使用我使用过的类似工具,这是非常推荐的。是的,它是一个系统二进制文件,但您可以通过PHP中的
exec()
调用来使用它,这很神奇

查看您的特定代码,因为它似乎只通过
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\u info
的内容将是连接到
$dirArray[$index]
中加载的文件的数据数组。如何访问这些数据?现在还不清楚,但是你可以通过像这样转储
$file\u info
的内容来看看它抓到了什么东西

echo '<pre>';
print_r($file_info);
echo '</pre>';
echo';
打印(文件信息);
回声';

然后找出你想要的数据在
$file\u info
中的位置,然后像其他数组一样访问它。

当然,但是你需要打开.XXXx文件,解析出相关的xml文件,等等。你应该使用工具/库来提取元数据,如
getID3
。谢谢你,杰克。我明白你的意思。我将查看getID3和PHPWord以获得所需的功能。@CErdmier谢谢!很高兴能帮忙。如果这个答案对你有帮助,请记得投票表决。如果这是解决您问题的答案,请记住将其选中。getProperties返回一个可以检索的元数据列表。我对文件的标题感兴趣。我使用了以下语法,但它是不正确的。数组的传递是否正确?我尝试了其他几种配置。我卡住了$phpWord=新phpWord$getTitle=$phpWord->getProperties($dirArray[$index])->getTitle($dirArray[$index]‌​);@CErdmier看起来像是PHPWord只写文件。所以这不起作用。不清楚除了LibreOffice之外是否还有其他工具可以获取这些信息。我知道没有纯PHP方法。现在你可以轻松编辑元数据使用