无法创建 zip 文件 (php)
Can't create zip file (php)
所以我在互联网上找到了这个 class 可以将文件放入 zip 中。
我有一个可以将图片上传到文件夹的表格,然后我尝试循环进入这些文件并将它们存储到一个 zip 文件中,但似乎我在某处失败了。
zipper class
<?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();
}
}
}
}
and this is my uploading file
> $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 中,循环到上传的文件中。
不知道为什么最后创建存档失败了...
可能是将这些新创建的文件夹转换为 zip 文件或将它们添加到 zip 文件中的简单方法吗?
第一个问题是因为我添加了 BASE_URL
我不得不写 ../upload/
。
第二个问题有点愚蠢......
我必须在 foreach $zipper = new zipper;
和 $zipper-store("../upload/" . $uniqUser . ".zip");
之外创建 class 用于不必要的重复(将其添加到底部)。
所以我在互联网上找到了这个 class 可以将文件放入 zip 中。 我有一个可以将图片上传到文件夹的表格,然后我尝试循环进入这些文件并将它们存储到一个 zip 文件中,但似乎我在某处失败了。
zipper class
<?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();
}
}
}
}
and this is my uploading file
> $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 中,循环到上传的文件中。
不知道为什么最后创建存档失败了...
可能是将这些新创建的文件夹转换为 zip 文件或将它们添加到 zip 文件中的简单方法吗?
第一个问题是因为我添加了 BASE_URL
我不得不写 ../upload/
。
第二个问题有点愚蠢......
我必须在 foreach $zipper = new zipper;
和 $zipper-store("../upload/" . $uniqUser . ".zip");
之外创建 class 用于不必要的重复(将其添加到底部)。