Как я могу удалить ненужную из конца файла почтового индекса при разархивировании и передаче в новый файл? - PullRequest
0 голосов
/ 26 апреля 2011

Когда я беру выходной файл .tsv из Excel на Mac, заархивирую его, отправляю на компьютер linux и разархивирую с помощью команды unzip, я получаю кучу мусора в конце файла.В файле у меня 19 строк данных.Я использую функцию «Сжать» по умолчанию из меню правой кнопки мыши в Finder.Я загружаю файл через PHP.Вот команда, которую я запускаю (вручную или автоматически из сценария) для zip-файла:

unzip -aajp {zipfile} > {newfile}

Когда я открываю {newfile}, я вижу все это в конце файла:

^@^E^V^G^@^B^@^@Mac OS X        ^@^B^@^@^@  ^@^@^@2^@^@^@ ^@^@^@^B^@^@^@R^@^@^@^@TEXTXCEL^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@

Есть ли способ избавиться от мусора в конце файла?

При запуске:

unzip -aaj {zipfile}

Он разархивирует файл, преобразовав его втекст / обычный без мусора просто отлично.Но затем в моем PHP-скрипте мне нужно иметь возможность получить точное имя / местоположение файла.

Я готов сделать это в любом случае.Я просто не могу найти правильное решение.Тем не менее, он должен работать для файла, поступающего из окон, а также.Есть идеи?

ОБНОВЛЕНИЕ:

Вот что я в итоге сделал, но он все еще чувствует себя неряшливо.Я все еще открыт для лучшего решения.

function decompress($filename) {
    // generate a temporary filename
    $tmpfile = '/tmp/'.mt_rand();

    // Here we actually decompress the $working_zip_file file
    $command = "unzip -aao $filename -d $tmpfile/ | egrep \"(inflating:|extracting:)\" | grep -v MACOS ";
    $unzip_output = exec($command, $dummy, $unzipstatus);

    // If things where unzipped properly
    if($unzipstatus[0] == 0) {
        $work_plain_file = preg_match('/\s*(inflating:|extracting:)(.*)$/', $unzip_output, $matches);
        $work_plain_file =  trim($matches[2]);
        $clean_name = str_replace(' ', '_', $work_plain_file);
        if($clean_name != $work_plain_file){
            exec("mv \"$work_plain_file\" $clean_name");
            $work_plain_file = $clean_name;
        }
        rename($work_plain_file, $new_file);
    }
}

1 Ответ

1 голос
/ 26 апреля 2011

unzip тупо, когда дело доходит до ветки ресурса. Вы должны сказать ему игнорировать все, что он находит в .DS_Store.

...