2017-09-27 8 views
0

Ich habe ein Skript, das eine gezippte CSV-Datei entpackt, entpackt und doppelte Einträge entfernt. Es hat größtenteils funktioniert, bis ich den Unzip-Code in eine Funktion verschoben habe. Jetzt kann die ZIP-Datei nicht entpackt werden, aber es wird kein Fehler angezeigt.PHP ZipArchive funktioniert nicht mehr

Überprüfte Datei/Ordner Berechtigungen, alles ist 777 auf dev-Maschine.

<?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; 
} 
+1

Randnotiz: Das ist eine seltsame Speicherzuteilung. –

Antwort

1

Interessantes Problem, das Sie hier haben.

  1. Ausgang $file_to_unzip direkt in der Funktion.
  2. Hat $ zip -> * eine last_error oder last_response Methode? Siehe , was die ZipArchive-Klasse zurückgibt.
  3. Haben Sie Zugriff auf die PHP-Fehlerprotokolle? Lassen Sie uns nach einer Ausgabe suchen.
+0

Für Element 1 nehmen Sie an, Sie meinen "echo $ file_to_unzip;" das sieht richtig aus. Ich habe Methoden für zip, eine „getStatusString“ Methode ist das, wenn ich in den Fehlerprotokollen aussehen sagt: PHP Warning: ZipArchive :: getStatusString(): Ungültige oder nicht initialisierten Zip Objekt – mustacheMcGee

+0

Kurz nach dem ZipArchive Objekt init'ing Gehe Schritt für Schritt, Zeile für Zeile, durch den Prozess, so wie du willst, dass es funktioniert. Finden Sie den Ort, an dem es nicht mehr wie beabsichtigt funktioniert. Dies klingt wie ein Bereich Ausgabe ATM. –