Экспорт CSV в Zip - Php - PullRequest
       11

Экспорт CSV в Zip - Php

0 голосов
/ 13 апреля 2020

Я пытаюсь создать и загрузить CSV-файлы в zip-файл, используя php. Zip-файл успешно загружается в папку экспорта в каталоге моего веб-сайта, однако загрузка на стороне клиента через браузер содержит ошибки

An error occured while loading the archive - There was an error while extracting "abc.zip" .. it is not an archive

Я заметил, что zip-файл, загруженный в каталог моего веб-сайта в папке экспорта, кажется, имеет значок блокировки на нем (Debian) владелец www-data .. может ли это быть проблемой, если да, как я могу изменить владельца на например -sa- каждый раз, когда файл загружается в каталог моего сайта

            function export1($p){
                        for($i=0;$i<count($p);$i++){
                            $outgoing = array();
                            $full_export_columns = array();
                            $full_export_rows = array();
                            $for_export_columns = array();
                            $full_export_columns[] = $for_export_columns;
                            while($row=mysqli_fetch_array($p[$i]['results'], MYSQLI_BOTH)){
                                $for_export_rows = array();
                                for($y=0;$y< $p[$i]['field_count'];$y++){
                                    $for_export_rows[] =  $row[$y];
                                }
                                $full_export_rows[] = $for_export_rows;
                            }
                            $outgoing[] = $full_export_columns;
                            $outgoing[] = $full_export_rows;
                            return $outgoing; 
                        }
                    }  
                    function bulk_export_zip($incoming){    
                        date_default_timezone_set("Asia/Kolkata");
                        ini_set('display_errors', true);
                        $date = new DateTime();
                        $date_time = $date->format('Y_m_d_H_i');
                        $conn = $incoming['conn'];
                        $export_queries_array = $incoming['export_queries_array'];
                        $item_names_str = $incoming['export_queries_names_str'];
                        $item_names_arr = $incoming['export_queries_names_arr'];
                        $zip = new ZipArchive;
                        $querys = $export_queries_array;
                        $dump_label = "test";
                        $files = array();
                        $path = "../private/exports/"; 
                        for($x = 0;$x < count($querys);$x++){
                            $q = $querys[$x];
                            $n = $item_names_arr[$x];
                            $sql = $q;
                            $query = mysqli_query($conn,$sql);
                            $d1[0]["results"]= $query;
                            $d1[0]["field_count"] = $d1[0]["results"]->field_count;
                            $d1 = $this->export1($d1);
                            $a = $d1[0][0];
                            $b = $d1[1];
                            $c = $n;
                            $filename = $path.$c.".csv";
                            $fp = fopen($filename, 'w');
                            for($z = 0; $z < count($b); $z++){
                                fputcsv($fp, $b[$z]);
                            }
                            fclose($fp); 
                            $files[$x] = $filename;
                        }
                        $zipname = $path.$item_names_str.".zip";
                        $item_names_str_comma_replaced = str_replace(",", "_", $item_names_str);
                        $zipname2 = $item_names_str_comma_replaced.".zip";
                        if(!file_exists($zipname)){
                            $zip->open($zipname, ZipArchive::CREATE);
                            }else{
                            $zip->open($zipname, ZipArchive::OVERWRITE);
                        }
                        foreach ($files as $file) {
                            if(file_exists($file)){
                                $zip->addFile($file);
                            }
                            else{
                                echo"file does not exist";
                                exit();
                            }
                        }
                        $zip->close();
                        //doest work -- exec("chmod -R 755 /var/www/private/exports");
                        //doest work -- exec("chown -R sa:sa /var/www/private/exports");
                        header('Content-Type: application/zip');
                        header('Content-Disposition: attachment; filename='.$zipname2);
                        header('Content-Length: ' . filesize($zipname));
                        readfile($zipname); 
                    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...