这是我的情景:
我用Google搜索并查看了不同的解决方案,但没有人可以在将文件保存到最终目的地之前处理文件。
这是我到目前为止的功能:
// Extract zip file and return files in an array.
private function processZip() {
$zip = new ZipArchive;
$tmp_dir = FB_PLUGIN_DIR.'tmp/';
// Extract files to tmp dir
if ($zip->open($this->file['tmp_name']) === TRUE) {
//Check if temp dir exists. If not, create one.
if (!is_dir($tmp_dir)) {
mkdir($tmp_dir, 0700);
}
$zip->extractTo($tmp_dir);
$zip->close();
/* Process extracted files */
foreach(glob($tmp_dir.'*.*') as $filename) {
// Somehow get MIME type here without using 'finfo' and 'mime_content_type'
// I haven't installed PEAR and 'mime_content_type' is decapricated.
}
return '1'; // success
} else {
return "0"; // fail
}
}
我不确定我是否朝着正确的方向前进。不知怎的,我认为我应该能够在“ZIP循环”中处理文件。
有没有办法可以读取ZIP文件中的文件,确定MIME类型然后处理文件?
我找到了这个例子:http://www.java-samples.com/showtutorial.php?tutorialid=985
我认为它接近我需要的东西。但不确定要修改什么。
答案 0 :(得分:1)
解耦您的流程。首先从ZIP文件中提取所有内容,然后扫描文件中的图像文件并进行处理。
这是一个更简单的过程,可以更容易地分解以处理更大的zipfiles。
答案 1 :(得分:0)
以下是我过去如何处理zip文件而不提取整个内容
$zip = new ZipArchive;
$zip->open($file);
for ($i = 0; $i < $zip->numFiles; $i++) {
$entry = $zip->statIndex($i);
if ($entry['size'] > 0) {
$data = $zip->getFromIndex($i);
// $data is a binary string of file data
// which can be used in GD functions for images
// and written to a location for regular files
if (preg_match('/\.jpe?g$/i', $entry['name'])) {
// JPEG file
} else {
// Not a JPEG file :-)
}
}
}
$zip->close();
不幸的是,我找不到一种方法来实际读取文件信息而不提取它,所以我已经进行了文件扩展名检测。