Разархивируйте файл с помощью php (сворачивает ZIP-файл в одну папку) - PullRequest
0 голосов
/ 10 марта 2011
    $file_name = 'New Folder.zip'
    $zip = new ZipArchive;
    $result = $zip->open($target_path.$file_name);
    if ($result === TRUE) {
        for($i = 0; $i < $zip->numFiles; $i++) {
        $filename = $zip->getNameIndex($i);
        $fileinfo = pathinfo($filename);
        copy("zip://".$file_name."#".$filename, $target_path.$fileinfo['basename']);
        }
    }

Когда я запускаю этот код, я получаю эту ошибку Warning: copy(zip://New Folder.zip#New Folder/icon_android.png) [function.copy]: failed to open stream: operation failed in...

Как я могу решить это ...

Ответы [ 5 ]

2 голосов
/ 06 апреля 2012
copy("zip://".$file_name."#".$filename, $target_path.$fileinfo['basename']);}

правильный

copy("zip://".dirname(__FILE__).'/'.$file_name."#".$filename, $target_path.$fileinfo['basename']);}

Полный путь должен использовать zip: // stream

2 голосов
/ 10 марта 2011

С Документ PHP

$zip = new ZipArchive;
if ($zip->open('test.zip') === TRUE) {
    $zip->extractTo($your_desired_dir);
    $zip->close();
    foreach (glob($your_desired_dir . DIRECTORY_SEPARATOR . 'New Folder') as $file) {
        $finfo = pathinfo($file);
        rename($file, $your_desired_dir . DIRECTORY_SEPARATOR . $finfo['basename']);
    }
    unlink($your_desired_dir . DIRECTORY_SEPARATOR . 'New Folder');
    echo 'ok';
} else {
    echo 'failed';
}

Не знаю, почему вы используете поток.

1 голос
/ 10 марта 2011

см. Руководство http://php.net/manual/en/book.zip.php

unzip.php (sample code)

// the first argument is the zip file
$in_file = $_SERVER['argv'][1];

// any other arguments are specific files in the archive to unzip
if ($_SERVER['argc'] > 2) {
    $all_files = 0;
    for ($i = 2; $i < $_SERVER['argc']; $i++) {
        $out_files[$_SERVER['argv'][$i]] = true;
    }
} else {
    // if no other files are specified, unzip all files
    $all_files = true;
}

$z = zip_open($in_file) or die("can't open $in_file: $php_errormsg");
while ($entry = zip_read($z)) {

    $entry_name = zip_entry_name($entry);

    // check if all files should be unzipped, or the name of
    // this file is on the list of specific files to unzip
    if ($all_files || $out_files[$entry_name]) {

        // only proceed if the file is not 0 bytes long
        if (zip_entry_filesize($entry)) {
            $dir = dirname($entry_name);

            // make all necessary directories in the file's path
            if (! is_dir($dir)) { pc_mkdir_parents($dir); }

            $file = basename($entry_name);

            if (zip_entry_open($z,$entry)) {
                if ($fh = fopen($dir.'/'.$file,'w')) {
                    // write the entire file
                    fwrite($fh,
                           zip_entry_read($entry,zip_entry_filesize($entry)))
                        or error_log("can't write: $php_errormsg");
                    fclose($fh) or error_log("can't close: $php_errormsg");
                } else {
                    error_log("can't open $dir/$file: $php_errormsg");
                }
                zip_entry_close($entry);
            } else {
                error_log("can't open entry $entry_name: $php_errormsg");
            }
        }
    }
}

из http://www.java -samples.com / showtutorial.php? Tutorialid = 985

0 голосов
/ 06 апреля 2015

Я использовал очень простой метод, чтобы сделать это

system('unzip assets_04_02_2015.zip'); 
0 голосов
/ 10 марта 2011

Первое, что я хотел бы сделать, это:

echo "FROM - zip://".$file_name."#".$filename;
echo "<BR>TO - " .  $target_path.$fileinfo['basename'];

и посмотри, что получишь

...