Php 获取ZipArchive::close()函数和要创建的zip文件夹时出现问题

Php 获取ZipArchive::close()函数和要创建的zip文件夹时出现问题,php,file,file-upload,zip,ziparchive,Php,File,File Upload,Zip,Ziparchive,我正在尝试从刚上载的文件创建zip附件。为了确认,我尝试上载的文件正在上载。该问题仅限于zip部分和下面的代码 这是我收到的错误: 警告:ZipArchive::close():无法删除文件:没有此类文件 或中的目录 对于这一行代码: $f->close(); 有人知道我做错了什么吗 以下是完整的代码: $date = new DateTime(); $fu = new fileUpload(); $filename = $fu->upload(); $uploadedFileTy

我正在尝试从刚上载的文件创建zip附件。为了确认,我尝试上载的文件正在上载。该问题仅限于zip部分和下面的代码

这是我收到的错误:

警告:ZipArchive::close():无法删除文件:没有此类文件 或中的目录

对于这一行代码:

$f->close();
有人知道我做错了什么吗

以下是完整的代码:

$date = new DateTime();
$fu = new fileUpload();
$filename = $fu->upload();
$uploadedFileTypes = $fu->getImageFileTypes();
$extensions = ['pdf','jpg', 'jpeg', 'png', 'gif'];

$differentExtensions = array_diff($uploadedFileTypes, $extensions);
if (count($differentExtensions) > 0) { 
    $f = new ZipArchive();
    $zip = $f->open('uploads/' . $_FILES['uploadedFile']['name'][0] . ".zip", ZipArchive::CREATE | ZipArchive::OVERWRITE);
    if ($zip) {
        for ($index = 0; $index < count($_FILES['uploadedFile']['name']); $index++) {
            $f->addFile($_FILES['uploadedFile']['tmp_name'][$index], $_FILES['uploadedFile']['name'][$index]);
        }
        $f->close();

        $message["attachment[0]"] = curl_file_create("uploads/{$file['uploadedFile']['name'][0]}.zip",
            pathinfo("uploads/{$file['uploadedFile']['name'][0]}.zip", PATHINFO_EXTENSION),
            $file['uploadedFile']['name'][0] . ".zip");
    }
$date=new DateTime();
$fu=新文件上传();
$filename=$fu->upload();
$uploadedFileTypes=$fu->getImageFileTypes();
$extensions=['pdf'、'jpg'、'jpeg'、'png'、'gif'];
$differencetensions=array_diff($uploadedFileTypes,$extensions);
如果(计数($differencetensions)>0{
$f=新的ZipArchive();
$zip=$f->open('uploads/'.$\u文件['uploadedFile']['name'][0]。.zip',ZipArchive::CREATE | ZipArchive::OVERWRITE);
如果($zip){
对于($index=0;$indexaddFile($\u文件['uploadedFile']['tmp\u名称][$index],$\u文件['uploadedFile']['name'][$index]);
}
$f->close();
$message[“attachment[0]”]=curl_file_create(“uploads/{$file['uploadedFile']['name'][0]}.zip”,
pathinfo(“uploads/{$file['uploadedFile']['name'][0]}.zip”,pathinfo_扩展名),
$file['uploadedFile']['name'][0].“.zip”);
}
文件上载类:

class fileUpload
{

public function __construct()
{}

public $imageFileTypes = [];

public function getImageFileTypes()
{
     return $this->imageFileTypes;
}

public function upload() {

    if (!empty($_FILES["uploadedFile"]["name"])) {

        $file_count = count($_FILES['uploadedFile']['name']);
        $results = [];
        for ($i = 0; $i<$file_count; $i++) {
//          echo $file['uploadedFile']['name'][$index] . "\n";

            $target_dir = "uploads/";
            $target_file = $target_dir . basename($_FILES["uploadedFile"]["name"][$i]);
            $uploadOk = 1;
            //$imageFileType = strtolower(pathinfo($target_file, PATHINFO_EXTENSION));
             // here's the important bit
            $this->imageFileTypes[] = $imageFileType = strtolower(pathinfo($target_file, PATHINFO_EXTENSION));

            // Check if $uploadOk is set to 0 by an error
            if ($uploadOk == 0) {
                return 0;
    // if everything is ok, try to upload file
            } else {
                if (move_uploaded_file($_FILES["uploadedFile"]["tmp_name"][$i], $target_file)) {
                    $results[] = basename($_FILES["uploadedFile"]["name"][$i]);
                } else {
                    return 0;
                }
            }
        }
        return $results;
class文件上传
{
公共函数构造()
{}
public$imageFileTypes=[];
公共函数getImageFileTypes()
{
返回$this->imageFileTypes;
}
公共函数上传(){
如果(!空($_文件[“uploadedFile”][“name”])){
$file_count=计数($_FILES['uploadedFile']['name']);
$results=[];

对于($i=0;$i,正如我在评论中提到的那样,看起来您正在将上载的文件移动到
$fu->upload()
调用中的
uploads/
目录中。但是,当您对它们进行压缩时,您使用
$\u files['uploadedFile']['tmp\u name']
数组作为其位置来引用文件的“旧”位置

在脚本更改中:

    $f->addFile($_FILES['uploadedFile']['tmp_name'][$index], $_FILES['uploadedFile']['name'][$index]);


您是否检查了
$zip
$f
的值?请共享。@zbee
var\u dump($zip);
输出
bool(true)
var\u dump($f)
对象(ZipArchive)#5(5){[“status”]=>int(0)[“statusSys”]=>int(0)[“numFiles”]=>int(0)[“filename”=>字符串(53)”/php/uploads/zip.PNG[“comment”]=>string(0)”}
听起来好像没有添加文件。Is
$f->addFile()
返回
false
?文件是否存在且可读,是否有来自
open\u basedir
等的限制?我认为您不必在尝试压缩文件之前将文件复制到永久位置;但您是否尝试过这样做?PHP中上载的文件是一些奇怪的小鬼影,很难处理在某些上下文中。谢谢!这创建了zip,但是没有检索到zip。那么我必须修改此部分吗?
message[“附件[0]”]=curl\u文件\u创建(“上载/{$filename[0]}.zip”、pathinfo(“上载/{$filename[0]}.zip”、pathinfo扩展名)、$filename[0]..zip”);
我会像您在
$f->open()
调用中那样引用zip路径/文件名:
'uploads/.$\u FILES['uploadedFile']['name'][0]。“.zip”
但这只是一个猜测。谢谢您的帮助!
    $f->addFile($_FILES['uploadedFile']['tmp_name'][$index], $_FILES['uploadedFile']['name'][$index]);
    $f->addFile('uploads/'.basename($_FILES["uploadedFile"]["name"][$index], basename($_FILES["uploadedFile"]["name"][$index]);