【问题标题】:Zip extract returns error code 19 but the file I am extracting is a zip fileZip 提取返回错误代码 19,但我提取的文件是 zip 文件
【发布时间】:2018-08-03 09:11:01
【问题描述】:

我正在尝试在 PHP 中提取我提供的路径以及文件名的 zip 文件,所有内容都是 100% 正确的,但是当我运行脚本时它仍然返回 Err_Code 19 。文件不是 zip 存档。主要模块是它从谷歌驱动器下载 zip 文件,然后提取它并恢复整个站点,当我运行相同的模块并从 FTP 或 Dropbox 或 S3 下载文件时它工作得非常好,但是当从驱动器下载它时它开始给出我这个错误这是我正在尝试的代码。

$extractTo = wp_upload_dir()['basedir'];

        $zip = new ZipArchive;
        $res = $zip->open($zipFile);
        if (is_resource($res)) {
            echo 'HERE'; exit;
            $zip->extractTo($extractTo);
            $zip->close();

            $dirs = array_filter(glob($extractTo . '/*'), 'is_dir');
            foreach ($dirs as $dir) {
                $fileName = basename($dir);

                if ($fileName == 'themes') {
                    $pathFrom = $extractTo . '/themes';
                    $pathTo = get_home_path() . 'wp-content\themes';
                    Helper::moveDirectories($pathFrom, $pathTo);
                    Helper::removeDirectories($pathFrom);
                } else if ($fileName == 'files') {
                    $pathFrom = $extractTo . '/files';
                    $pathTo = get_home_path() . 'wp-content\uploads';
                    Helper::moveDirectories($pathFrom, $pathTo);
                    Helper::removeDirectories($pathFrom);
                } else if ($fileName == 'plugins') {
                    $pathFrom = $extractTo . '/plugins';
                    $pathTo = get_home_path() . 'wp-content\plugins';
                    Helper::moveDirectories($pathFrom, $pathTo);
                    Helper::removeDirectories($pathFrom);
                } else if ($fileName == 'database') {
                    $pathFrom = $extractTo . '/database';
                    $filename = array_filter(glob($pathFrom . '/*'));
                    Helper::DelDatabse();
                    Helper::importDatabase($filename[0]);
                    Helper::removeDirectories($pathFrom);
                }
            }
            echo 'Done!';
        } else {
            echo $res;
        }

不知道是什么问题或可能导致这个奇怪问题的任何帮助将不胜感激。谢谢。

可能重复

Unzip The Zip Archive With PHP

ZipArchive not opening file - Error Code: 19

但没有一个解决方案有效。

【问题讨论】:

  • 显示您用于下载 zip 的 vi6ce。另外,您确认文件的大小和校验和了吗?
  • 是的,文件大小目前不超过 1MB

标签: php wordpress google-drive-api ziparchive


【解决方案1】:

找到解决方案以防万一将来有人需要帮助真正的问题不在于提取代码问题在于我下载该 zip 文件的代码中真正的原因是我将下载的内容添加到带有 fwrite 和 fwrite 的 zip 文件没有正确压缩内容,所以如果有人想从谷歌驱动器下载 zip 文件,他/她可以使用此代码。

$client = new Google_Client();
    $client->setClientId('CLIENT_ID');
    $client->setClientSecret('CLIENT_SECRET');
    $client->setScopes(array('https://www.googleapis.com/auth/drive'));

    $client->setAccessToken($AccessToken);

    $service = new Google_Service_Drive($client);

    $fileId = $dir['drive_dir'];
    $storeIn = wp_upload_dir()['basedir'] . '/' . $fileName . '.zip';

    $content = $service->files->get($fileId, array('alt' => 'media'));

    $headers = $content->getHeaders();
    foreach ($headers as $name => $values) {
        header($name . ': ' . implode(', ', $values));
    }
    header('Content-Disposition: attachment; filename="' . $fileName . '"');

    $body = $content->getBody();

    while (!$body->eof()) {
        file_put_contents($storeIn, $body);
    }

    echo "Done.\n";

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-16
    • 2017-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多