上传Zip文件并解压缩Zip

 rain 发布于 2023-01-18 14:59

我有一个表单(HTML),它将文件提交给PHP脚本,该脚本将文件重命名为ZIP,将其存储在一个文件夹(随机名称)中,然后提取该文件.

文件上传.文件夹已正确创建.该文件被正确重命名.

拉链的提取失败.

这是我的表格:

Select file

这是PHP脚本 - up.php

$file_name = $HTTP_POST_FILES['ufile']['name'];
$random_digit=rand(0000,9999);
$new_file_name=$random_digit.".zip";
mkdir($random_digit, 0777, true);

$path= $random_digit.'/'.$new_file_name;
if($ufile !=none)
 {
    if(copy($HTTP_POST_FILES['ufile']['tmp_name'], $path))
 {
 echo "The upload is successful
"; echo "File Renamed to: ".$new_file_name." for processing.
"; echo "File Size :".$HTTP_POST_FILES['ufile']['size']."
"; echo "Proceed to the next phase of the importation of data to the system
"; } else { echo "Error"; } } $zip = new ZipArchive; $res = $zip->open($new_file_name); if ($res === TRUE) { $zip->extractTo($random_digit.'/'); $zip->close(); echo 'extraction successful'; } else { echo 'extraction error'; }

它是防止提取的文件夹的模式吗?据我所见,没有语法错误.

1 个回答
  • <?php 
    
    function rmdir_recursive($dir) {
        foreach(scandir($dir) as $file) {
           if ('.' === $file || '..' === $file) continue;
           if (is_dir("$dir/$file")) rmdir_recursive("$dir/$file");
           else unlink("$dir/$file");
       }
    
       rmdir($dir);
    }
    
    if($_FILES["zip_file"]["name"]) {
        $filename = $_FILES["zip_file"]["name"];
        $source = $_FILES["zip_file"]["tmp_name"];
        $type = $_FILES["zip_file"]["type"];
    
        $name = explode(".", $filename);
        $accepted_types = array('application/zip', 'application/x-zip-compressed', 'multipart/x-zip', 'application/x-compressed');
        foreach($accepted_types as $mime_type) {
            if($mime_type == $type) {
                $okay = true;
                break;
            } 
        }
    
        $continue = strtolower($name[1]) == 'zip' ? true : false;
        if(!$continue) {
            $message = "The file you are trying to upload is not a .zip file. Please try again.";
        }
    
      /* PHP current path */
      $path = dirname(__FILE__).'/';  // absolute path to the directory where zipper.php is in
      $filenoext = basename ($filename, '.zip');  // absolute path to the directory where zipper.php is in (lowercase)
      $filenoext = basename ($filenoext, '.ZIP');  // absolute path to the directory where zipper.php is in (when uppercase)
    
      $targetdir = $path . $filenoext; // target directory
      $targetzip = $path . $filename; // target zip file
    
      /* create directory if not exists', otherwise overwrite */
      /* target directory is same as filename without extension */
    
      if (is_dir($targetdir))  rmdir_recursive ( $targetdir);
    
    
      mkdir($targetdir, 0777);
    
    
      /* here it is really happening */
    
        if(move_uploaded_file($source, $targetzip)) {
            $zip = new ZipArchive();
            $x = $zip->open($targetzip);  // open the zip file to extract
            if ($x === true) {
                $zip->extractTo($targetdir); // place in the directory with same name  
                $zip->close();
    
                unlink($targetzip);
            }
            $message = "Your .zip file was uploaded and unpacked.";
        } else {    
            $message = "There was a problem with the upload. Please try again.";
        }
    }
    
    
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>Unzip a zip file to the webserver</title>
    </head>
    
    <body>
    <?php if($message) echo "<p>$message</p>"; ?>
    <form enctype="multipart/form-data" method="post" action="">
    <label>Choose a zip file to upload: <input type="file" name="zip_file" /></label>
    <br />
    <input type="submit" name="submit" value="Upload" />
    </form>
    </body>
    </html>
    

    2023-01-18 15:02 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有