Frage

My zip file name is Product_Catalog.txt.gz. this zip file contain one txt file.

how can i extract and store into my database

i have already done in zip file unzip and store into my database. but i can't understand .gz format. so please advise

my zip file code is here

if (realpath($destinationname."/".$filename)){
    if ($zip = zip_open(realpath($directory."/".$filename)))
        {
            while (($zip_entry = zip_read($zip))){
            $zipfilename=zip_entry_name($zip_entry  );
            $zipfilename."<br>";
            $tmpfname = tempnam("/tmp", "");
            $handle = fopen($tmpfname, "w+");
            while($data = zip_entry_read($zip_entry,50000000000)){
            fwrite($handle,$data);
            }// end while $data
            fseek($handle,0);
            if ($separatetables);
            $table=strtok($zipfilename,"-");
            $sql="CREATE TABLE IF NOT EXISTS `$table` LIKE `cjfeeds`";
             mysql_query($sql);

how can i convert this code into txt.gz

War es hilfreich?

Lösung 2

You don't extract.

if ($rrpath){
     if ($zip = gzopen($rrpath, "rb"))
        {   
            $filenamen = $_SESSION['files_list'][$i];       
            $zipfilename = str_replace('.gz', '', $_SESSION['files_list'][$i]); 
            $tmpfname = tempnam("/home/demoosiz/tmp", "");      
            $handle = fopen($tmpfname, "w+");
            ini_set("max_execution_time",3000000000000);
            while($data = gzread($zip, 4096)){
            fwrite($handle,$data);
            }// end while $data
            fseek($handle,0);
            if ($separatetables);
            $table=strtok($zipfilename,"-");                   
           // $sqly = "TRUNCATE TABLE `cjfeeds`";
            //mysql_query($sqly);                           
             // I'm not too sure if this is windows specific
            $tmpfile=addslashes($tmpfname);
            //if the script times out uncomment the next line 
             ini_set("max_execution_time",3000000000000);
            $sql22 ="LOAD DATA LOCAL INFILE '$tmpfile' REPLACE  INTO TABLE `cjfeeds` FIELDS TERMINATED BY '$fieldseparator' IGNORE 1 LINES;";

You can use this code. This code is very helpful for you.

Andere Tipps

gzip, which is generally used for single files, is not the same file format as ZIP. Although the same compression algorithm (DEFLATE) is used in both formats, the headers are entirely different, so PHP's Zip functions will not recognize your file.

Instead, you can use the compress.zlib:// wrapper to open gzip-compressed files. You can then use the normal stream functions to read the file.

$handle = fopen("compress.zlib://$filename", 'r');

However, there are some limitations; for example, opening a gzipped file in read-write mode is not possible, and seeking may be slow. If necessary, you can work around these by making a temporary uncompressed copy:

copy("compress.zlib://$filename", $tmpfname);

You keep calling it a zip file. It's not a zip file (.zip). It's a gzip file (.gz). Different format.

You can use gzdecode() to decompress a gzip file.

You can interact with .gz files through the functions of the zlib module.


Responding to your comment:

You won't need to do the while($zip_entry = zip_read($zip)) since gz files don't hold multiple files within them. A .gz file is just a single file that has been compressed. Unfortunately, this also means that there is no equivalent to zip_entry_name either, since there is only one file.

If you're trying to read a tarball - an archive of files which have been concatenated together and gzipped to form a .tar.gz file - then Zlib isn't for you, since it's not designed to handle that. You'll want something like PharData instead:

$phar = new PharData($filename);
foreach ($phar as $phar_stream) {
  $file_data = file_get_contents($phar_stream);
  // process $file_data how you like
}

If these are just single-file gz files, then you can read the files with the gz versions of the usual filesystem functions.

You can use gzread to process chunks of the file the way you're currently doing with zip_entry_read, or you can read all lines into an array with gzfile. There is a readgzfile function which grabs the whole file, but unfortunately it seems like it just dumps the output directly to the client, rather than do a file. You could use output buffering to capture that output, but it seems like too much of a hassle considering your other options.

Try this....

if(isset($_FILES['zipfile'])) 
{

    $filename = $_FILES['zipfile']['name'];
    $source = $_FILES['zipfile']['tmp_name'];
    $type = $_FILES['zipfile']['type'];

    /*$name = explode('.zip', $filename); # $name[0] returns the name of the file. $name[1] returns the extension (zip)

    ; */ # Where the file will be saved. I.E. 'extracted/myFile-02151985/'
    $target = PHYSICAL_PATH."upload/";
    // Ensures that the correct file type was chosen.
    $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;
        } 
    }

    $okay = strtolower($name[1]) == 'zip' ? true : false;

    if(!$okay) 
    {
        $msg="Please choose a zip file, dummy!";
    }
    $saved_file_location = $target.$filename;
    if(move_uploaded_file($source, $target . $filename))
    {
        global $target;
        global $unique_folder;
        $zip = new ZipArchive();
            $x = $zip->open($saved_file_location);
            if ($x === true) 
            {
                $folder=$zip->extractTo($target);
                for ( $i=0; $i < $zip->numFiles; $i++ ) 
                { 
                    echo $entry = $zip->getNameIndex($i); 
                    $filename=explode('/',$entry);
                    print_r($filename);
                    if($filename[1] != '')
                    { 
                        $filename_folder=$filename[0];
                        $filename = $filename[1]; //

                        $name = explode('.zip', $filename_folder); # $name[0] returns the name of the file. $name[1] returns the extension (zip)
                        //echo 'sfkdf'.$name[0];
                        $target = PHYSICAL_PATH."upload/";

                        $sql = "select `id` from `tracks` order by `id` desc";
                            $list = mysql_query($sql);
                            $list_num = mysql_num_rows($list);
                            if($list_num > 0)
                            {

                            $res = mysql_fetch_array($list);
                            $new_id=$res['id'];
                            } else {
                            $new_id=1;
                            }
                        $check_for_jpg = strpos($filename, '.mp3');

                        if ($check_for_jpg === false ){
                            echo 'Check file format.';
                            $source=$target . $name[0].'/'.$filename;
                            unlink($source);
                        } else {
                            $srch = array(' ','--','&quot;','!','@','#','$','%','^','&','*','(',')','_','+','{','}','|',':','"','<','>','?','[',']','\\',';',"'",',','/','*','+','~','`','=');
                            $rep = array('_','_','_','_','_','_','_','_','_','_','_','_','_','_','_','_','_','_','_','_','_','_','_','_','_');
                            $name_song[$i]= str_replace($srch,$rep,$filename);
                            $title_name=explode('.',$filename);

                            $new_id=$new_id+1;
                            $new_filename=$new_id.'-'.$name_song[$i];
                            mysql_query("insert into `tracks` set track='".addslashes(stripslashes($new_filename))."',title='".addslashes(stripslashes($title_name[0]))."',tape_id='".$id_last."',addDate=NOW(),status=1 ");
                            $source=$target . $name[0].'/'.$filename; $target_move=$target.$new_filename;
                            if(rename($source,$target_move)) { unlink($source); } else { echo 'not';}
                            echo 'folder zip';
                            echo '<li>' . $new_filename . '</li>';
                        }
                        rmdir($target . $name[0]);
                    }
                    else { echo $target = PHYSICAL_PATH."upload/";
                        $sql = "select `id` from `test_table` order by `id` desc";

                        $list = mysql_query($sql);
                        $list_num = mysql_num_rows($list);
                        if($list_num > 0) {
                        //and, instead of using "while":
                        $res = mysql_fetch_array($list); // will return the highest "id" number
                        echo $new_id=$res['id'];
                        } else {
                        $new_id=1;
                        }

                        $check_for_jpg = strpos($entry, '.mp3');

                        if ($check_for_jpg === false ){
                            echo 'Check file format.';
                            $source=$target .$entry;
                            unlink($source);
                        } else {
                            $srch = array(' ','--','&quot;','!','@','#','$','%','^','&','*','(',')','_','+','{','}','|',':','"','<','>','?','[',']','\\',';',"'",',','/','*','+','~','`','=');
                            $rep = array('_','_','_','_','_','_','_','_','_','_','_','_','_','_','_','_','_','_','_','_','_','_','_','_','_');
                            $name_song[$i]= str_replace($srch,$rep,$entry);
                            $title_name=explode('.',$entry);
                            $new_id=$new_id+1;
                            $new_filename=$new_id.'-'.$name_song[$i];
                            mysql_query("insert into `tracks` set track='".addslashes(stripslashes($new_filename))."',title='".addslashes(stripslashes($title_name[0]))."',tape_id='".$id_last."',status=1 ");
                            $source=$target .$entry; $target_move=$target.$new_filename;
                            if(rename($source,$target_move)) { unlink($source); } else { echo 'not';}
                            echo 'only zip';
                            echo '<li>' . $new_filename . '</li>';
                        }

                    }
                }
                $zip->close();
                unlink($saved_file_location); #deletes the zip file. We no longer need it.
            } else {
                die("There was a problem. Please try again!");
            }

    } else {
        $msg="There was a problem";
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top