mustacheMcGee
mustacheMcGee

Reputation: 501

PHP ZipArchive stopped working

I have a script which takes a zipped CSV file, unzips it, and removes duplicate entries. It was mostly working, until I moved the unzip code into a function. Now it fails to unzip the .zip file, but doesn't show an error.

Checked file/folder permissions, everything is 777 on dev machine.

<?php
//
//huge memory limit for large files
$old = ini_set('memory_limit', '8192M');
//
//create a string like the filename
$base_filename = 'csv-zip-file'.date('m').'_'.date('d').'_'.date('Y');
//
//if the file exists ...
//unzip it
//read it to an array
//remove duplicates
//save it as a new csv
if (file_exists($base_filename.'.zip')) {
    $zip_filename = $base_filename.'.zip';
    echo "The file <strong>$zip_filename</strong> exists<br>";
    unzip($zip_filename);
    $csv = csv_to_array();
    $csv = unique_multidim_array($csv,"Project Id");
    var_dump($csv);
} else {
    echo "The file <strong>$base_filename.zip</strong> does not exist";
}


function unzip($file_to_unzip) {
    $zip=new ZipArchive();
    if($zip->open($file_to_unzip)==TRUE) {
        $address=__DIR__;
        $zip->extractTo($address);
        $res=$zip->close();
        echo 'ok';
    }
    else{
        echo 'failed';
    }
}

function unique_multidim_array($array, $key) {
    $temp_array = array();
    $i = 0;
    $key_array = array();
    foreach($array as $val) {
        if (!in_array($val[$key], $key_array)) {
            $key_array[$i] = $val[$key];
            $temp_array[$i] = $val;
        }
        $i++;
    }
    return $temp_array;
}

function csv_to_array () {
//    global $filename;
    global $base_filename;
    $rows = array_map('str_getcsv', file($base_filename.'.csv'));
    //using array_pop to remove the copyright on final row
    array_pop($rows);
    $header = array_shift($rows);
    $csv = array();
    foreach ($rows as $row) {
        $csv[] = array_combine($header, $row);
    }
    return $csv;
}

Upvotes: 0

Views: 132

Answers (1)

David J Eddy
David J Eddy

Reputation: 2037

Interesting problem you have here.

  1. Output $file_to_unzip right inside the function.
  2. Does $zip->* have an last_error or last_response method? See what the ZipArchive class IS returning.
  3. Do you have access to the php error logs? Let's look there for any output.

Upvotes: 1

Related Questions