【问题标题】:Get filename from PharData Archive itself从 PharData Archive 本身获取文件名
【发布时间】:2016-12-28 00:12:53
【问题描述】:

我的班级为我创建了PharData 档案。类的所有函数都不知道存档的名称。基本上我有一个这样的大纲:

public function doStuff(\PharData $bundle)
{
    $file = //someFile
    $bundle->addFile($file);

    $this->db->update($file is in $bundle->getName(????));
}

据我所知,访问捆绑包名称的唯一方法是$bundle 变量的getAlias() 函数。但是,这给了我完全限定的文件名,我需要手动 basename($bundle->getAlias())

我真的想知道PharData 类中是否无法获取实际的存档文件名本身。

我不需要存档中文件的名称,实际上我只需要访问存档本身的文件名。我只是不知道getAlias() 到底有多可靠,因为它的名字很混乱。

【问题讨论】:

    标签: php filenames phar


    【解决方案1】:

    您可以使用PharData::setMetadata() 方法存储自己的数据。因此,您可以将文件名存储在 PHAR 元数据中,并在稍后使用PharData::getMetadata() 方法再次获取它。

    这样设置:

    $bundle->setMetaData(array('bundleFileName' => 'your_bundle.phar'));
    

    所以你可以像这样在你的方法中得到它:

    public function doStuff(\PharData $bundle)
    {
        $metaData = $bundle->getMetaData();
        $file     = //some File
    
        $bundle->addFile($file);
    
        $this->db->update($file is in $bundle->getMetadata['bundleFileName']);
    }
    

    但我认为,如果你正确设计你的课程,你就不需要这种丑陋的解决方法。

    【讨论】:

    • 嗯,我想这在我的情况下至少适用于这些信息:) 谢谢。我会稍微修改一下你的答案,以更好地展示我实际在做什么;)
    【解决方案2】:

    这个问题已经有点老了,但是补充一下:

    我真的想知道 PharData 类中是否无法获取实际的存档文件名本身。

    PharData 扩展了 FilesystemIterator,因此您可以使用

    // Get the path to the current DirectoryIterator item.
    // DirectoryIterator::getPath();
    $bundle->getPath();
    

    http://php.net/manual/de/class.filesystemiterator.php

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-06
      • 2021-03-02
      • 1970-01-01
      • 2011-11-02
      • 1970-01-01
      • 2016-07-08
      • 2010-11-06
      • 2013-12-08
      相关资源
      最近更新 更多