0
所以我在互聯網上發現了這個類,它可以將文件放入一個zip文件中。 我有一個表格,我可以上傳圖片到一個文件夾中,但是當我嘗試將它們添加到zip中時,我只能添加該文件夾中最後一個文件(循環)。無法在zip中添加所有文件(php)
拉鍊類
<?php
class zipper {
private $_files = array(),
$_zip;
public function __construct() {
$this->_zip = new ZipArchive;
}
public function add($input){
if(is_array($input)){
$this->_files = array_merge($this->_files, $input);
}else{
$this->_files[] = $input;
}
}
public function store($location = null){
if(count($this->_files) && $location){
foreach ($this->_files as $index => $file) {
if(!file_exists($file)){
unset($this->_files[$index]);
}
print_r($file . "<br>");// here gives me the exact path of the files.
}
if($this->_zip->open($location, file_exists($location) ? ZIPARCHIVE::OVERWRITE : ZIPARCHIVE::CREATE)){
foreach ($this->_files as $file) {
$this->_zip->addFile($file, $file);
}
$this->_zip->close();
}
}
}
}
,這是我上傳的文件
> $uniqUser = uniqid(strtoupper($userName). "-" , true);
> $directory ='../upload/';
> $file_name is $files['name']
if(!is_dir("../upload/". $uniqUser ."/")) {
mkdir("../upload/". $uniqUser ."/");
}
if(move_uploaded_file($file_tmp, $directory . $uniqUser . "/" . $file_name)){
$uploaded[$position] = $directory . $uniqUser . "/" . $file_name;
$zipper = new zipper;
$zipper->add(BASE_URL . "/upload/" . $uniqUser . "/" . $file_name);
$zipper->store(BASE_URL . "/upload/" . $uniqUser . ".zip");
最後的代碼是循環進入上傳的文件的foreach內。
當我做了一個print_r("Added file:" . $file . "<br>");
以查看是否添加了所有文件,我得到了積極的迴應。但我總是從文件夾中獲取最後一個文件。 謝謝
編輯 好了,想這個問題是每個循環添加的文件夾中的文件後,將zip類添加文件到壓縮,然後檢查後,如果拉鍊存在或不...因此,在每個循環之後,zip會被覆蓋並只添加最後一個文件。 如何讓這個更好?