【问题标题】:Retrieve directory structure of extracted zip file with PHP使用 PHP 检索提取的 zip 文件的目录结构
【发布时间】:2015-02-14 05:40:12
【问题描述】:

我正在为我的应用程序开发一个捆绑系统,用户可以上传具有以下结构的压缩 zip 文件:

name_of_file.zip
  src/
    file.jar
  thumbnail.png
  meta.json

我想在用 PHP 提取后验证这个结构。验证结构后,我会将 thumbnail.png 和 /src/source.jar 移动到我的服务器上。我还将解析 meta.json 并从中返回数据。

这就是我的班级目前的样子($this->archive 是 ZipArchive 的一个实例):

/**
 * Process and parse a bundle.
 * 
 * @param  \UploadedFile  $zip
 * @param  array $paths
 * 
 * @return boolean
 */
private function bundle($zip, array $paths)
{
   $status = $this->archive->open($zip->getRealPath());

    if($status === false)
        return false;

    // Before getting here I need to verify the files exist...

    $this->archive->extractTo($paths['software'], ['src/file.jar']);
    $this->archive->extractTo($paths['thumbnail'], ['thumbnail.png']);

    // Cool, files moved now read the meta.json file...
}

如果你已经猜到了,那就是 laravel。

我现在只想验证结构。完成结构后,我需要进行一些简单的文件验证(获取文件扩展名的一些技巧?)。

最后,file.jar 和 thumbnail.png 将被移动到它们的位置,并且 meta.json 将被解析并返回其中的数据(文件不会被移动)。

【问题讨论】:

  • 那么确切的问题是什么?您需要确定您有 2 个具有这两个名称的文件和一个名为 src 的目录,其中包含 fire.jar
  • 我需要确保每个 zip 包含一个 /src/file.jar、thumbnail.png 和一个 meta.json
  • 好吧,我想只需使用 $this->archive->locateName('fire.jar') 等来检查这 3 个文件。参考这里:php.net/manual/en/ziparchive.locatename.php
  • 如果我告诉你file.jar的文件名每次都不一样会不会很痛?所以这使得像这样查找它是一个禁忌。
  • 这就是为什么我问文件名是否会明确相同。我能想到的是,您可以在临时文件夹中提取 zip 并使用带有通配符的glob() 检查文件是否存在。示例:$files = glob('src/*.jar'); 完成验证后,只需清除临时目录。当然在做这些事情之前验证文件大小。

标签: php laravel ziparchive


【解决方案1】:

检索已上传文件的扩展名

$extension = Input::file('photo')->getClientOriginalExtension();

来源:http://laravel.com/docs/4.2/requests

或者

$path = $_FILES['image']['name'];
$ext = pathinfo($path, PATHINFO_EXTENSION);

来源:How to get the file extension in PHP?

【讨论】:

    猜你喜欢
    • 2013-09-20
    • 2013-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多