【发布时间】: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