我的代码遇到问题,无法打开我已上传并移动到文件夹中的zip文件,zip文件上传正常,您可以在任何Zip程序中打开它但是,当我尝试使用ZipArchive打开它以提取它出错的数据时。
$path = "../"; // Upload directory
$count = 0;
foreach ($_FILES['files']['name'] as $f => $name) {
if(move_uploaded_file($_FILES["files"]["tmp_name"][$f], $path . $name))
$count++; // Number of successfully uploaded file
}
$kioskFile = $_FILES['files']['name'][0];
$kioskFile = explode(".", $kioskFile);
$kioskFile = $kioskFile[0];
$zipFile = "../" . $kioskFile . ".zip";
$zip = new ZipArchive;
$res = $zip->open($zipFile);
if ($res === true) {
$zip->extractTo("./");
$zip->close();
} else {
echo "Error Cannot Open Zip File - Error Code: ";
}
当我运行代码时,它向我显示错误代码 19
邮编::ER_NOZIP - 19
这是我得到的错误,但是该文件存在,如果我使用 zip_open,它会返回它可以打开 zip 文件。
任何帮助都会非常大
编辑1如果我上传手动创建的 zip 文件(使用 zip 程序(,那么上传工作正常。但是,如果我使用 ZipArchive 创建的 zip 文件,它会立即出错并显示错误 19。
编辑2我现在添加了一个检查以确保文件存在于正确的目录中,并且还打印了该位置,两者都匹配,但仍然是相同的问题。错误 19
$path = "../"; // Upload directory
$count = 0;
foreach ($_FILES['files']['name'] as $f => $name) {
if(move_uploaded_file($_FILES["files"]["tmp_name"][$f], $path . $name))
$count++; // Number of successfully uploaded file
}
$kioskFile = $_FILES['files']['name'][0];
$kioskFile = explode(".", $kioskFile);
$kioskFile = $kioskFile[0];
$realpath = realpath("../");
$zipFile = $realpath . "\" . $kioskFile . ".zip";
if (file_exists($zipFile)) {
$extract = zip_extract($zipFile, "../");
if ($extract === TRUE) {
} else {
echo "The file " . $zipFile . " cannot be opened";
}
} else {
echo "The file " . $zipFile . " does not exist";
die();
}
UPDATE1所以我认为我将其缩小到这段代码,或者我用来从系统下载.zip文件的下载脚本,如果我将 zip 留在系统上并使用完全相同的代码,它可以正常工作。
这是我的下载代码,也许我错过了一些导致问题的内容。
$fileID = $_GET['id'];
$backupLoc = "backups/";
$sql = "SELECT * FROM backups WHERE id = '" . addslashes($fileID) . "' LIMIT 1";
$res = mysql_query($sql);
$row = mysql_fetch_array($res);
$backupFile = $row['backupFile'];
$zipFile = $backupLoc . "/" . $backupFile . ".zip";
$zipSize = filesize($zipFile);
header('Content-type: application/zip');
header('Content-Disposition: attachment; filename="' . basename($zipFile). '"');
ob_end_flush();
readfile($zipFile);
exit;
die();
使用文本或十六进制编辑器打开存档,并确保文件开头有"PK"签名。如果您在该签名之前有任何 HTML,则表明您的缓冲区未被清理或在不应该被清理时被刷新,这意味着 PHP ZipArchive 将假定存档无效。
是下载.php文件导致了问题,这是解决方案。 这是要做一个 OB 清洁而不是冲洗
///echo "<div style='padding: 50px;'>Please Wait .....</div>";
$fileID = $_GET['id'];
$backupLoc = "backups/";
$sql = "SELECT * FROM backups WHERE id = '" . addslashes($fileID) . "' LIMIT 1";
$res = mysql_query($sql);
$row = mysql_fetch_array($res);
$backupFile = $row['backupFile'];
$zipFile = $backupLoc . "/" . $backupFile . ".zip";
$zipSize = filesize($zipFile);
header('Content-type: application/zip');
header('Content-Disposition: attachment; filename="' . basename($zipFile). '"');
//ob_end_flush();
ob_end_clean();
readfile($zipFile);
exit;
die();