загрузить и распаковать zip-файл, используя ajax и php - PullRequest
0 голосов
/ 11 октября 2018

Я не уверен, как правильно обращаться к объекту javascript, я думаю.Я пытаюсь использовать ajax для загрузки файла в php, и файл php обрабатывает распаковку в определенных каталогах.

Я не уверен, как будет происходить распаковка, но у меня пока есть следующий код:

HTML:

<form id="upload_header_modules_form1" enctype="multipart/form-data" method="post" action="" onsubmit="return false">
                <label for="themes_edit_file_id1" class="themes_edit_file">Upload .zip file</label>
                <input id="themes_edit_file_id1" style="visibility:hidden;"  onchange="setfilename1(this.value);" type="file">
                <label for="install1" class="normal_button" onclick="uploadZip()">Install</label>
                <input id="install1" style="visibility:hidden;" type="submit">
            </form>

AJAX:

<code>function uploadZip() 
{
    formdata = new FormData(document.forms[0]);
    if (formdata) 
    {
        $.ajax
        (
            {
                url: "http://localhost/IG_API_2/pages/default_upload/upload_php.php",
                type: "POST",
                data: formdata,
                processData: false,
                contentType: false,
                success: function (data)
                {
                    $(".modal").css("opacity", "1");$(".modal").css("visibility", "visible");$(".modal_mid").html("<pre>" + data + "
"); alert (data);}});}}

и PHP (я не особо проверял PHP, поэтому не обращайте на это слишком много внимания):

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 = '../plugins/';  // 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.";
    }
}

Я просто хочу

а) обойти ошибку PHP "Неопределенный индекс zip_file в C: \ etc"

b) извлечь файл .ZIP в папку"temp /"

Заранее спасибо.

Edit Мы знаем, что ошибка PHP является неопределенным индексом, поскольку тип файла загружается неправильно в $ _FILES ["zip_file"]. По какой-то причине он не получает файл из-за ajax. Я думаю, что это связано со строкой formdata = new FormData(document.forms[0]);.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...