使用PHP从URL读取Zip文件

时间:2011-03-15 10:32:09

标签: php

我正在寻找一个很好的解决方案,用php从网址读取一个zip文件。

我检查了zip_open()函数,但我从未读过有关从其他服务器读取文件的任何内容。

非常感谢

3 个答案:

答案 0 :(得分:7)

最好的方法是将远程文件复制到临时文件中:

$file = 'http://remote/url/file.zip';
$newfile = 'tmp_file.zip';

if (!copy($file, $newfile)) {
    echo "failed to copy $file...\n";
}

然后,您可以使用临时文件执行任何操作:

 $zip = new ZipArchive();
 if ($zip->open($newFile, ZIPARCHIVE::CREATE)!==TRUE) {
    exit("cannot open <$filename>\n");
 }

答案 1 :(得分:2)

下载文件内容(可能使用file_get_contentscopy将其放在您的文件系统上)然后应用解压缩算法。

答案 2 :(得分:0)

这是一个基本示例:

$url = 'https://my.domain.com/some_zip.zip?blah=1&hah=2';
$destination_dir = '/path/to/local/storage/directory/';
if (!is_dir($destination_dir)) {
    mkdir($destination_dir, 0755, true);
}
$local_zip_file = basename(parse_url($url, PHP_URL_PATH)); // Will return only 'some_zip.zip'
if (!copy($url, $destination_dir . $local_zip_file)) {
    die('Failed to copy Zip from ' . $url . ' to ' . ($destination_dir . $local_zip_file));
}
$zip = new ZipArchive();
if ($zip->open($destination_dir . $local_zip_file)) {
    for ($i = 0; $i < $zip->numFiles; $i++) {
        if ($zip->extractTo($destination_dir, array($zip->getNameIndex($i)))) {
            echo 'File extracted to ' . $destination_dir . $zip->getNameIndex($i);
        }
    }
    $zip->close();
    // Clear zip from local storage:
    unlink($destination_dir . $local_zip_file);
}