使用 Php 检查 zip 或 rar 存档是否为空或损坏
Check if zip or rar archive is empty or corrupted with Php
我有一个非常简单的脚本,允许用户仅上传 .zip 或 .rar 文件。我想知道如何知道文件是损坏的还是空的?
这是我的脚本
if(isset($_POST['customerid']) && $_FILES['file']['tmp_name'] && $_POST['requestid']){
//post variables
$customerid = $_POST['customerid'];
$filename = $_FILES['file']['name'];
$requestid = $_POST['requestid'];
//check if the file is .rar or .zip
$fileInfo = new finfo(FILEINFO_MIME_TYPE);
$fileMime = $fileInfo->file($_FILES['file']['tmp_name']);
$validMimes = array(
'zip' => 'application/zip',
'rar' => 'application/x-rar',
);
$fileExt = array_search($fileMime, $validMimes, true);
if($fileExt != 'zip' && $fileExt != 'rar'){
echo 'Not a zip or rar.';
}
//check if the file is corrupted or empty
//if all OK insert file name and path to database
$uservalida_stmt = $conn->prepare("INSERT INTO user_project_files (dateCreated,userid,projectFile,serviceRequestId) VALUES (?,?,?,?)");
$uservalida_stmt ->bind_param('siss',$currentdate,$customerid,$filename,$requestid);
$uservalida_stmt ->execute();
$uservalida_stmt ->close();
//move upload and EXTRACT file to directory
move_uploaded_file($_FILES['file']['tmp_name'], '../user/project/' . $_FILES['file']['name']);
}
PHP 手册中有 zip 的示例。 http://php.net/manual/en/zip.examples.php
<?php
$za = new ZipArchive();
$za->open('test_with_comment.zip');
print_r($za);
var_dump($za);
echo "numFiles: " . $za->numFiles . "\n";
echo "status: " . $za->status . "\n";
echo "statusSys: " . $za->statusSys . "\n";
echo "filename: " . $za->filename . "\n";
echo "comment: " . $za->comment . "\n";
echo "numFile:" . $za->numFiles . "\n";
?>
或者简单地在 open
函数 (http://php.net/manual/en/ziparchive.open.php)
上检查错误代码
您也可以对 RAR 文件执行类似操作 (http://php.net/manual/en/rararchive.open.php) but will need to install it first (http://php.net/manual/en/rar.installation.php)。
我有一个非常简单的脚本,允许用户仅上传 .zip 或 .rar 文件。我想知道如何知道文件是损坏的还是空的?
这是我的脚本
if(isset($_POST['customerid']) && $_FILES['file']['tmp_name'] && $_POST['requestid']){
//post variables
$customerid = $_POST['customerid'];
$filename = $_FILES['file']['name'];
$requestid = $_POST['requestid'];
//check if the file is .rar or .zip
$fileInfo = new finfo(FILEINFO_MIME_TYPE);
$fileMime = $fileInfo->file($_FILES['file']['tmp_name']);
$validMimes = array(
'zip' => 'application/zip',
'rar' => 'application/x-rar',
);
$fileExt = array_search($fileMime, $validMimes, true);
if($fileExt != 'zip' && $fileExt != 'rar'){
echo 'Not a zip or rar.';
}
//check if the file is corrupted or empty
//if all OK insert file name and path to database
$uservalida_stmt = $conn->prepare("INSERT INTO user_project_files (dateCreated,userid,projectFile,serviceRequestId) VALUES (?,?,?,?)");
$uservalida_stmt ->bind_param('siss',$currentdate,$customerid,$filename,$requestid);
$uservalida_stmt ->execute();
$uservalida_stmt ->close();
//move upload and EXTRACT file to directory
move_uploaded_file($_FILES['file']['tmp_name'], '../user/project/' . $_FILES['file']['name']);
}
PHP 手册中有 zip 的示例。 http://php.net/manual/en/zip.examples.php
<?php
$za = new ZipArchive();
$za->open('test_with_comment.zip');
print_r($za);
var_dump($za);
echo "numFiles: " . $za->numFiles . "\n";
echo "status: " . $za->status . "\n";
echo "statusSys: " . $za->statusSys . "\n";
echo "filename: " . $za->filename . "\n";
echo "comment: " . $za->comment . "\n";
echo "numFile:" . $za->numFiles . "\n";
?>
或者简单地在 open
函数 (http://php.net/manual/en/ziparchive.open.php)
您也可以对 RAR 文件执行类似操作 (http://php.net/manual/en/rararchive.open.php) but will need to install it first (http://php.net/manual/en/rar.installation.php)。