Zip 解压缩 returns 错误代码 19 但我正在解压缩的文件是一个 zip 文件
Zip extract returns error code 19 but the file I am extracting is a zip file
我正在尝试在 PHP 我提供的路径和文件名中提取 zip 文件,所有内容都是 100% 正确的,但是当我 运行 脚本 returns Err_Code 19。文件不是 zip 存档。主要模块是它从 google 驱动器下载 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
但是 none 的解决方案有效。
找到解决方案以防万一将来有人需要帮助真正的问题不在提取代码中问题出在我下载该 zip 文件的代码中真正的原因是我添加了下载的使用 fwrite 将内容添加到 zip 文件中,而 fwrite 没有正确压缩内容,因此如果有人想从 google 驱动器 he/she 下载 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";
我正在尝试在 PHP 我提供的路径和文件名中提取 zip 文件,所有内容都是 100% 正确的,但是当我 运行 脚本 returns Err_Code 19。文件不是 zip 存档。主要模块是它从 google 驱动器下载 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
但是 none 的解决方案有效。
找到解决方案以防万一将来有人需要帮助真正的问题不在提取代码中问题出在我下载该 zip 文件的代码中真正的原因是我添加了下载的使用 fwrite 将内容添加到 zip 文件中,而 fwrite 没有正确压缩内容,因此如果有人想从 google 驱动器 he/she 下载 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";