У меня возникают проблемы с тем, что мой код может открыть 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
ZIPARCHIVE :: ER_NOZIP – 19
Это ошибка im get, однако файл существует, и если я использую zip_open, он возвращает, что он может открыть zip-файл.
Любая помощь будет очень интересной
EDIT1 Если я загружаю zip-файл, который я создаю вручную (используя zip-программу), то загрузка отлично работает. Однако, если я использую ZipArchive созданный zip-файл, тогда он мгновенно ошибки с ошибкой 19.
EDIT2 Теперь я добавил проверку, чтобы убедиться, что файл существует в правильном каталоге, а также помещает печать местоположения также, как совпадение, но все же та же проблема. Ошибка 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 Итак, я думаю, что ive сузило его до этого бита кода или скрипта загрузки, который я использую для загрузки .zip-файла из системы, если я оставлю zip в системе и использую тот же самый бит кода, который он работает хорошо.
Вот мой код загрузки, возможно, ive пропустил что-то на этом, что вызывает проблему.
$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 будет считать недопустимый архив.
Это был файл download.php, который вызывал проблему, вот решение. который должен был сделать OB CLEAN, а не Flush
///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();