2017-09-27 15 views
0

私は、圧縮されたCSVファイルを取り出し、解凍して重複したエントリを削除するスクリプトを用意しています。私が解凍コードを関数に移動するまで、ほとんどの作業が行われていました。今は.zipファイルの解凍に失敗しますが、エラーは表示されません。PHP ZipArchiveは動作を停止しました

ファイル/フォルダのアクセス許可をチェックしたところ、すべてがdevマシン上の777です。

<?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

サイドノート:これは奇妙なメモリ割り当てです。 –

答えて

1

ここで興味深い問題があります。

  1. 出力$file_to_unzip関数のすぐ内側にあります。
  2. $ zip - > *にはlast_errorまたはlast_responseの方法がありますか? ZipArchiveクラスが返すものを を参照してください。
  3. あなたはPHPエラーログにアクセスできますか?出力を見てみましょう。
+0

項目1の場合、「echo $ file_to_unzip;」とします。それは正しく見える。ただ、ZIPARCHIVEオブジェクトをinit'ing後に無効または初期化されていない郵便物 – mustacheMcGee

+0

: PHPの警告:ZIPARCHIVE :: getStatusString() は、私は、エラーログで見たときに言う「getStatusString」方法があります、ジッパーのための方法を確認しましたあなたがそれが働きたいと思うように、一歩一歩一歩進んで行きます。意図したとおりに動作を停止する場所を探します。これはスコープ発行のATMのように聞こえます。 –

関連する問題