어떻게 Laravel 에서 zip 의 파일 을 검증 합 니까?
만약 에 사용자 가 ZIP 파일 을 업로드 하 기 를 원한 다 면 우 리 는 규칙 과 결합 하여 다음 과 같은 내용 으로 사용 할 수 있 습 니 다.
return [
'file' => 'required|file|mimes:zip|size:3072'
];
그러나 그림,텍스트 또는 pdf 파일 과 달리 ZIP 은 압축 파일 로 여러 개의 다른 파일 을 저장 할 수 있 습 니 다.사용자 가 ZIP 파일 을 업로드 하 기 를 원 하지만 특정한 필수 파일 과 폴 더 구 조 를 가지 고 있다 고 가정 합 니 다.예 를 들 어 워드 프레스 를 사용 하고 ZIP 파일 로 테 마 를 설치 한 적 이 있다 면 워드 프레스 는 테마 ZIP 파일 에 특정한 파일 을 요구 합 니 다.예 를 들 어 style.css 나 post.php.Laravel 에서 필요 한 모든 파일 이 포함 되 어 있 는 지 확인 하기 위해 서 올 린 ZIP 파일 을 어떻게 검증 합 니까?PHP 의 libzip 확장
php 의 libzip 확장 지원 이 필요 합 니 다.이 확장 기능 의 사용 및 구체 적 인 용법 은 문서 official documentation 페이지 를 보십시오.
ZIP 파일 을 어떻게 조작 합 니까?
첫 번 째,ZipArchive 류 를 예화 합 니 다.
$zip = new \ZipArchive();
그런 후에 우 리 는 open()방법 을 통 해 ZIP 문 서 를 풀 수 있다.
$zip->open('/absolute/path/to/file.zip');
방법의 공식 문서 에 따 르 면 ZIP 파일 을 성공 적 으로 열 면'true'로 돌아 갑 니 다.그렇지 않 으 면 정수 오류 코드 를 되 돌려 줍 니 다.우 리 는 이렇게 모든 내용 을 검사 할 수 있다.
$zipStatus = $zip->open('/absolute/path/to/file.zip');
if (zipStatus !== true) {
threw new \Exception('Could not open ZIP file. Error code: ' . zipStatus);
}
// , …
ZipArchive 류 는 ZIP 파일 의 내용 을 읽 을 수 있 도록 다양한 방법 을 제공 합 니 다.그 중 일 부 는?
$filesInside = [];
for ($i = 0; $i < $zip->count(); $i++) {
array_push($filesInside, $zip->getNameIndex($i));
}
$zip->close();
하나의 ZipArchive 인 스 턴 스 가 ZIP 파일 을 동시에 처리 할 수 있 기 때문에 이 파일 을 처리 한 후에 close()방법 을 사용 해 야 합 니 다.여러 개의 ZIP 파일 을 반복 적 으로 탐색 하거나 새 ZIP 파일 을 만 들 때 특히 중요 합 니 다.ZipArchive 를 사용 할 때 주의해 야 할 것 이 있 습 니 다."enity"의 개념 은 파일 뿐만 아니 라 모든 폴 더 와 하위 폴 더 도 포함 되 어 있 습 니 다.이 말 을 어떻게 이해 하지?만약 에 우리 가 다음 과 같은 디 렉 터 리 구 조 를 가 진 문서 가 있다 면:
- invoice.pdf
- profile_picture.jpg
- documents/
- homework.doc
- bills/
- january/
- payment.pdf
현재 문서 에 count()작업 을 실행 하면 현재 파일 의 수 를 얻 을 수 있 습 니 다.비록 4 개의 파일 만 있 지만 count()방법 은 7 을 되 돌려 줍 니 다.왜 일 까요?$files Inside 를 인쇄 해서 그 안에 무엇이 포함 되 어 있 는 지 봅 시다.
$files = [
'invoice.pdf',
'profile_picture.jpg',
'documents/',
'documents/homework.doc',
'bills/',
'bills/january/',
'bills/january/payment.pdf'
];
인쇄 결과 에 파일 뿐만 아니 라 해당 폴 더 도 있 는 것 을 볼 수 있 습 니 다.getNameIndex()방법 으로 전체 파일 경 로 를 가 져 올 수 있 습 니 다.Laravel 프로그램 에 통합
이제 우 리 는 PHP 를 사용 하여 ZIP 파일 목록 을 가 져 오 는 방법 을 알 게 되 었 습 니 다.모든 내용 을 Laravel 에 통합 시 키 고 업로드 한 ZIP 파일 에 필요 한 파일 이 포함 되 어 있 는 지 검증 합 니 다.
사용자 가 ZIP 파일 을 업로드 해 야 하고 파일 의 assets 디 렉 터 리 에 thumbnail.jpg 와 style.css 파일 이 포함 되 어야 한다 고 가정 합 니 다.
- thumbnail.jpg
- assets/
- style.css
이것 은 우리 의 컨트롤 러 입 니 다.이 컨트롤 러 는 zip 라 는 이름 을 가지 고 있 습 니 다.file 파일 업로드:
namespace App\Controllers;
use Illuminate\Http\Request;
class UploadController
{
const REQUIRED_FILES = [
'thumbnail.jpg',
'assets/style.css',
];
public function upload(Request $request)
{
$zip = new \ZipArchive();
$file = $request->file('zip_file');
}
}
Illuminate\Http\Request 에서 데 이 터 를 검색 할 때 모든 파일 은 Illuminate\Http\UploadedFile 인 스 턴 스 를 되 돌려 줍 니 다.업로드 한 임시 파일 의 절대 경 로 를 path()방법 으로 되 돌려 줄 수 있 습 니 다.이것 은 우리 가 ZIP 파일 을 열 고 ZipArchive 류 를 사용 하여 모든 파일 을 표시 하 는 방법 입 니 다.
public function upload(Request $request)
{
$zip = new \ZipArchive();
$file = $request->file('zip_file');
$zip->open($file->path());
$filesInside = [];
for ($i = 0; $i < $zip->count(); $i++) {
array_push($filesInside, $zip->getNameIndex($i));
}
}
이제 우 리 는 array 와 같은 것 을 사용 할 수 있다.intersect()같은 방법 으로 REQUIREDFILES 와$files Inside 를 비교 합 니 다.만약 교 집합 원소 의 수량 이 REQUIRED 와 같 지 않다 면FILES 의 요소 수 는 업 로드 된 ZIP 파일 에 필요 한 모든 파일 이 존재 하지 않 음 을 의미 하기 때문에 인증 오 류 를 중단 하거나 되 돌 릴 수 있 습 니 다.
$intersection = array_intersect(self::REQUIRED_FILES, $filesInside);
if (count($intersection) !== count(self::REQUIRED_FILES)) {
abort(422);
}
이것 은 우리 의 컨트롤 러 입 니 다.모든 것 이 준비 되 었 습 니 다.
namespace App\Controllers;
use Illuminate\Http\Request;
class UploadController
{
const REQUIRED_FILES = [
'thumbnail.jpg',
'assets/style.css',
];
public function upload(Request $request)
{
$zip = new \ZipArchive();
$file = $request->file('zip_file');
$zip->open($file->path());
$filesInside = [];
for ($i = 0; $i < $zip->count(); $i++) {
array_push($filesInside, $zip->getNameIndex($i));
}
$intersection = array_intersect(self::REQUIRED_FILES, $filesInside);
if (count($intersection) !== count(self:: REQUIRED_FILES)) {
abort(422);
}
// ZIP contains all required files, continue
}
}
최선 의 실천Laravel 응용 프로그램 에서 가장 좋 은 실천 은 검증 과 관련 된 내용 을 컨트롤 러 에서 옮 기 는 것 이다.일반적인 옵션 은 다음 과 같 습 니 다:
사용자 정의 인증 규칙 클래스 만 들 기
이상 은 Laravel 에서 zip 에 있 는 파일 의 상세 한 내용 을 검증 하 는 방법 입 니 다.Laravel 에서 zip 에 있 는 파일 을 검증 하 는 데 관 한 자 료 는 다른 관련 글 에 주목 하 십시오!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
단순 Laravel+Vue.js에서 VueUI를 사용하여 로그인 및 등록Laravel에는 웹 팩과 같은 Laravel-Mix가 있는데, 이를 이용해서 Laravel에 Vue.js를 실현할 수 있다. 이번에는 몇 가지 명령을 통해 간단하게 VueUI로 로그인하여 로그인을 할 수 있습니다....
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.