Pzp ZipArchive сохранить расположение zip - PullRequest
0 голосов
/ 10 марта 2019

Я использую Ajax с WordPress для экспорта ZIP-файла. Этот код работает хорошо, однако он загружает zip-файл в 2 разных местах: на моем рабочем столе (в качестве места загрузки браузера по умолчанию) и в моем каталоге wordpress / wp-admin, где работает этот код плагина. Я не хочу загружать его в папку wp-admin, как я могу это предотвратить?

//ajax

$('.btn').on('click', function(){

    var postData = [
        {name: 'action', value: 'foo_export_playlist'},
        {name: 'playlist_id', value: playlist_id},
        {name: 'playlist_title', value: playlist_title}
    ];

    $.ajax({
        url: ajax_url,
        type: 'post',
        data: postData,
        dataType: 'json',
    }).done(function(response){

           if(response.zip) {
            location.href = response.zip;
        }

    }).fail(function(jqXHR, textStatus, errorThrown) {
        console.log(jqXHR.responseText, textStatus, errorThrown);
    }); 

    return false;

});



//php

function foo_export_playlist(){

    // create zip file
    $zipname = 'foo.zip';
    $zip = new ZipArchive;
    $zip->open($zipname, ZipArchive::CREATE);


    // create a temporary file
    $size = 1 * 1024 * 1024;
    $fp = fopen('php://temp/maxmemory:$size', 'w');
    if (false === $fp) {
        die('Failed to create temporary file');
    }

  $stmt = $wpdb->prepare("SELECT * FROM {$media_table} WHERE playlist_id = %d", $playlist_id);
        $result = $wpdb->get_results($stmt, ARRAY_A);

    foreach($result as $row){

        $trimmed_array = array_map('trim',array_values($row));
        $line = str_replace('^', '', $trimmed_array);
        fputcsv($fp, $line, '|','^');

    }

    // return to the start of the stream
    rewind($fp);

    // add the in-memory file to the archive, giving a name
    $zip->addFromString($table.'.csv', stream_get_contents($fp) );

    //close the file
    fclose($fp);

    $zip->close();

    echo json_encode(array('zip' => $zipname));

    wp_die();

}
...