English | العربية | বাংলা | Bosanski | Deutsch | Español | Français | हिन्दी | Italiano | 日本語 | 한국어 | मराठी | Português | Русский | Kiswahili | தமிழ் | తెలుగు | Türkçe | اردو | Tiếng Việt | 中文
- Giới thiệu
- Cài đặt
- Sử dụng
- Các trình tạo
- Sử dụng Nâng cao
- Cấu hình
- Hướng Dẫn Hỗ Trợ
- Giấy phép - Giấy phép MIT
Giới thiệu
Faker Storage là một gói PHP hiệu suất cao được thiết kế để tạo ra và lưu trữ một lượng lớn tệp dữ liệu giả một cách hiệu quả. Được xây dựng với ý tưởng về tính đồng thời, nó tận dụng Swoole hoặc PCNTL để tạo ra hàng nghìn tệp song song, làm cho nó lý tưởng cho việc kiểm tra tải, môi trường phát triển và đánh giá hệ thống lưu trữ.
Gói này cung cấp một API trôi chảy để tạo ra nhiều loại tệp khác nhau bao gồm hình ảnh (PNG, JPG, GIF, BMP, WEBP, AVIF), tệp văn bản, tệp CSV, dữ liệu nhị phân và email tuân thủ RFC822. Mỗi trình tạo sản xuất đầu ra có thể xác định được khi được hạt giống, đảm bảo dữ liệu kiểm tra có thể tái tạo trên các môi trường khác nhau.
Tính năng chính
- Tính đồng thời hiệu suất cao: Tự động chọn giữa Swoole (coroutines) và PCNTL (tách quá trình) để tạo tệp song song
- Nhiều trình tạo tệp: Hỗ trợ tích hợp cho hình ảnh, văn bản, CSV, nhị phân và tệp email
- Đầu ra có thể xác định: Tạo ra dữ liệu dựa trên hạt giống giúp đảm bảo kết quả có thể tái tạo
- Lưu trữ linh hoạt: Hoạt động với bất kỳ bộ điều hợp League Flysystem nào (cục bộ, S3, v.v.)
- Đặt tên tệp tùy chỉnh: Tạo tên dựa trên closure với quyền kiểm soát hoàn toàn
- Hỗ trợ hình ảnh: Nhiều định dạng với kích thước và nén có thể cấu hình
- Tạo email: Email tuân thủ RFC822 với tệp đính kèm và hỗ trợ MIME
Ví dụ
use DefectiveCode\Faker\Faker;use League\Flysystem\Filesystem;use DefectiveCode\Faker\Generators\Png;use League\Flysystem\Local\LocalFilesystemAdapter; // Tạo 1000 hình ảnh PNG với 10 worker song songFaker::make(Png::class) ->width(800, 1920) ->height(600, 1080) ->toDisk(new Filesystem(new LocalFilesystemAdapter('/path/to/storage'))) ->basePath('images') ->count(1000) ->concurrency(10) ->seed(42) ->generate(); // Tạo tệp CSVuse DefectiveCode\Faker\Generators\Csv; Faker::make(Csv::class) ->columns(5, 10) ->rows(100, 500) ->delimiter(',') ->toDisk(new Filesystem(new LocalFilesystemAdapter('/path/to/storage'))) ->count(50) ->generate(); // Tạo email với tệp đính kèmuse DefectiveCode\Faker\Generators\Email; Faker::make(Email::class) ->paragraphs(3, 5) ->sentences(2, 4) ->withAttachment(Png::class, 1, 3) ->toDisk(new Filesystem(new LocalFilesystemAdapter('/path/to/storage'))) ->count(100) ->generate();
Cài đặt
Cài đặt gói qua Composer:
composer require defectivecode/faker-storage
Yêu cầu
- PHP >= 8.4
- ext-gd (để tạo hình ảnh)
- ext-swoole (tùy chọn, để có hiệu suất tốt hơn)
- ext-pcntl (sử dụng làm dự phòng cho tính đồng thời)
Phụ thuộc tùy chọn
Để có hiệu suất tối ưu, cài đặt phần mở rộng Swoole:
pecl install swoole
Gói sẽ tự động sử dụng Swoole nếu có sẵn, nếu không sẽ quay lại PCNTL.
Sử dụng
Quy trình làm việc cơ bản
Tất cả các trình tạo đều theo cùng một mẫu:
- Tạo một thể hiện Faker với một trình tạo
- Cấu hình trình tạo (tùy chọn)
- Đặt điểm đến lưu trữ
- Cấu hình tính đồng thời và số lượng
- Tạo tệp
use DefectiveCode\Faker\Faker;use League\Flysystem\Filesystem;use DefectiveCode\Faker\Generators\Text;use League\Flysystem\Local\LocalFilesystemAdapter; Faker::make(Text::class) ->paragraphs(5, 10) // Cấu hình riêng cho trình tạo ->toDisk(new Filesystem(new LocalFilesystemAdapter('/storage'))) ->basePath('documents') // Tệp sẽ nằm trong /storage/documents/ ->count(100) // Tạo 100 tệp ->concurrency(4) // Sử dụng 4 worker ->seed(123) // Để có đầu ra có thể xác định ->generate();
Cấu hình Lưu trữ
Sử dụng Flysystem
Faker Storage sử dụng League Flysystem để trừu tượng hóa lưu trữ:
use League\Flysystem\Filesystem;use League\Flysystem\Local\LocalFilesystemAdapter; // Lưu trữ cục bộ$filesystem = new Filesystem(new LocalFilesystemAdapter('/path/to/storage')); Faker::make(Png::class) ->toDisk($filesystem) ->generate();
Lưu trữ AWS S3
use Aws\S3\S3Client;use League\Flysystem\Filesystem;use League\Flysystem\AwsS3V3\AwsS3V3Adapter; $client = new S3Client([ 'credentials' => [ 'key' => 'your-key', 'secret' => 'your-secret', ], 'region' => 'us-east-1', 'version' => 'latest',]); $adapter = new AwsS3V3Adapter($client, 'your-bucket-name');$filesystem = new Filesystem($adapter); Faker::make(Png::class) ->toDisk($filesystem) ->basePath('uploads/images') ->generate();
Tùy chọn Đĩa
Truyền các tùy chọn bổ sung cho bộ điều hợp hệ thống tệp:
Faker::make(Png::class) ->toDisk($filesystem) ->diskOptions([ 'visibility' => 'public', 'ACL' => 'public-read', 'CacheControl' => 'max-age=31536000', ]) ->generate();
Cấu hình Tính đồng thời
Kiểm soát việc thực thi song song với phương thức concurrency():
// Sử dụng 10 luồng/tiến trình workerFaker::make(Png::class) ->concurrency(10) ->generate(); // Cụ thể cho Swoole: Đặt cả luồng và coroutine cho mỗi luồngFaker::make(Png::class) ->concurrency(threads: 4, coroutines: 8) // 4 worker, 8 coroutine mỗi cái ->generate();
Đặt tên tệp
Đặt tên Mặc định
Theo mặc định, các tệp được đặt tên bằng UUID v4:
// Sinh ra: e7f0a8d3-5c2b-4f9e-8a1d-3b4c5d6e7f8a.pngFaker::make(Png::class)->generate();
Các Trình Tạo Tên Tích Hợp
use DefectiveCode\Faker\NameGenerator; // Dựa trên UUID (mặc định)NameGenerator::setDefault('uuid'); // Sinh ra: e7f0a8d3-5c2b-4f9e-8a1d-3b4c5d6e7f8a.png // Đánh số tuần tựNameGenerator::setDefault('sequence'); // Sinh ra: 1.png, 2.png, 3.png, ...
Đặt tên Tùy Chỉnh
Cung cấp một closure để tùy biến tên tệp:
use DefectiveCode\Faker\NameGenerator; // Closure tùy chỉnhFaker::make(Png::class) ->nameGenerator(function (int $seed, int $completedFiles, $generator) { return "custom-{$completedFiles}-{$seed}.png"; }) ->generate(); // Đặt tên dựa trên ngày thángFaker::make(Png::class) ->nameGenerator(function (int $seed, int $completedFiles, $generator) { return date('Y/m/d') . "/image-{$completedFiles}.png"; }) ->generate();
Hạt giống để Tái tạo
Đặt hạt giống để tạo ra cùng một tệp giữa các lần chạy:
Faker::make(Png::class) ->seed(42) ->count(10) ->generate();
Mỗi tệp sẽ nhận một hạt giống có thể xác định độc nhất được phát sinh từ hạt giống cơ sở và chỉ số tệp.
Các trình tạo
Trình tạo Hình ảnh
Tất cả các trình tạo hình ảnh đều hỗ trợ cấu hình kích thước và chất lượng.
PNG
use DefectiveCode\Faker\Generators\Png; Faker::make(Png::class) ->width(800, 1920) // Chiều rộng ngẫu nhiên giữa 800-1920px ->height(600, 1080) // Chiều cao ngẫu nhiên giữa 600-1080px ->withAlpha(true) // Bật kênh alpha/độ trong suốt ->grid(5) // Tùy chọn: Tạo mẫu đối xứng 5x5 ->toDisk($filesystem) ->generate();
JPG
use DefectiveCode\Faker\Generators\Jpg; Faker::make(Jpg::class) ->width(800, 1920) // Chiều rộng ngẫu nhiên giữa 800-1920px ->height(600, 1080) // Chiều cao ngẫu nhiên giữa 600-1080px ->grid(5) // Tùy chọn: Tạo mẫu đối xứng 5x5 ->toDisk($filesystem) ->generate();
GIF
use DefectiveCode\Faker\Generators\Gif; Faker::make(Gif::class) ->width(800, 1920) // Chiều rộng ngẫu nhiên giữa 800-1920px ->height(600, 1080) // Chiều cao ngẫu nhiên giữa 600-1080px ->withAlpha(true) // Bật kênh alpha/độ trong suốt ->grid(5) // Tùy chọn: Tạo mẫu đối xứng 5x5 ->toDisk($filesystem) ->generate();
BMP
use DefectiveCode\Faker\Generators\Bmp; Faker::make(Bmp::class) ->width(800, 1920) // Chiều rộng ngẫu nhiên giữa 800-1920px ->height(600, 1080) // Chiều cao ngẫu nhiên giữa 600-1080px ->grid(5) // Tùy chọn: Tạo mẫu đối xứng 5x5 ->toDisk($filesystem) ->generate();
WEBP
use DefectiveCode\Faker\Generators\Webp; Faker::make(Webp::class) ->width(800, 1920) // Chiều rộng ngẫu nhiên giữa 800-1920px ->height(600, 1080) // Chiều cao ngẫu nhiên giữa 600-1080px ->withAlpha(true) // Bật kênh alpha/độ trong suốt ->grid(5) // Tùy chọn: Tạo mẫu đối xứng 5x5 ->toDisk($filesystem) ->generate();
AVIF
use DefectiveCode\Faker\Generators\Avif; Faker::make(Avif::class) ->width(800, 1920) // Chiều rộng ngẫu nhiên giữa 800-1920px ->height(600, 1080) // Chiều cao ngẫu nhiên giữa 600-1080px ->withAlpha(true) // Bật kênh alpha/độ trong suốt ->grid(5) // Tùy chọn: Tạo mẫu đối xứng 5x5 ->toDisk($filesystem) ->generate();
Hình ảnh Ngẫu nhiên
Sinh ra một định dạng hình ảnh ngẫu nhiên:
use DefectiveCode\Faker\Generators\RandomImage; Faker::make(RandomImage::class) ->width(800, 1920) ->height(600, 1080) ->withAlpha(false) // Ngẫu nhiên từ: AVIF, BMP, GIF, JPEG, PNG, WEBP ->toDisk($filesystem) ->generate(); Faker::make(RandomImage::class) ->width(800, 1920) ->height(600, 1080) ->withAlpha(true) // Ngẫu nhiên từ: AVIF, GIF, PNG, WEBP ->toDisk($filesystem) ->generate();
Trình tạo Văn bản
Tạo các tệp văn bản đơn giản với các đoạn văn:
use DefectiveCode\Faker\Generators\Text; Faker::make(Text::class) ->paragraphs(5, 10) // 5-10 đoạn văn mỗi tệp ->sentences(3, 6) // 3-6 câu mỗi đoạn văn ->toDisk($filesystem) ->generate();
Ví dụ đầu ra:
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.
Trình tạo CSV
Tạo các tệp CSV với dữ liệu ngẫu nhiên:
use DefectiveCode\Faker\Generators\Csv; Faker::make(Csv::class) ->columns(5, 10) // 5-10 cột ->rows(100, 500) // 100-500 hàng ->delimiter(',') // Ký tự phân cách cột ->enclosure('"') // Ký tự bao kín trường dữ liệu ->escape('\\') // Ký tự thoát ->eol("\n") // Ký tự kết thúc dòng ->toDisk($filesystem) ->generate();
Ví dụ đầu ra:
"John Doe","john@example.com","555-1234","New York","Engineer""Jane Smith","jane@example.com","555-5678","Los Angeles","Designer""Bob Johnson","bob@example.com","555-9012","Chicago","Manager"
Trình tạo Nhị phân
Tạo dữ liệu nhị phân ngẫu nhiên:
use DefectiveCode\Faker\Generators\Binary; Faker::make(Binary::class) ->length(1024, 1048576) // 1KB - 1MB ->toDisk($filesystem) ->generate();
Trình tạo Email
Tạo các tệp email tuân thủ RFC822:
use DefectiveCode\Faker\Generators\Email; Faker::make(Email::class) ->paragraphs(3, 5) // Các đoạn trong thân email ->sentences(2, 4) // Câu mỗi đoạn ->withAttachment(Png::class, 1, 3) // Thêm 1-3 tệp đính kèm PNG ->toDisk($filesystem) ->generate();
Tiêu đề Email
Các email được tạo bao gồm:
To: Tên và email ngẫu nhiênFrom: Tên và email ngẫu nhiênSubject: Câu ngẫu nhiênDate: Dấu thời gian hiện tạiMessage-ID: ID có thể xác định dựa trên hạt giống
Email với Tệp Đính kèm
Đính kèm các tệp bằng cách sử dụng tên lớp hoặc thể hiện của trình tạo:
use DefectiveCode\Faker\Generators\Email;use DefectiveCode\Faker\Generators\Png;use DefectiveCode\Faker\Generators\Pdf; Faker::make(Email::class) ->withAttachment(Png::class, 1, 3) // 1-3 tệp đính kèm PNG ->generate(); // Đính kèm bằng cách sử dụng thể hiện của trình tạo đã được cấu hình$pngGenerator = new Png(Png::getDefaultConfig());$pngGenerator->width(400, 800)->height(300, 600); Faker::make(Email::class) ->withAttachment($pngGenerator, 2, 5) ->generate();
Ví dụ đầu ra:
To: John Doe <john.doe@example.com>From: Jane Smith <jane.smith@example.com>Subject: Cuộc họp quan trọng vào ngày maiDate: Fri, 03 Jan 2026 10:30:00 +0000Message-ID: <3e92e5c2b0d632b3a36fbbb17484b7fe@example.com>Content-Type: multipart/mixed; boundary="----=_Part_123" ------=_Part_123Content-Type: text/plain; charset=utf-8Content-Transfer-Encoding: quoted-printable Lorem ipsum dolor sit amet, consectetur adipiscing elit... ------=_Part_123Content-Type: image/png; name="attachment.png"Content-Disposition: attachment; filename="attachment.png"Content-Transfer-Encoding: base64 iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+M9QDwADhgGAWjR9awAAAABJRU5ErkJggg==------=_Part_123--
Sử dụng Nâng cao
Trình tạo Tùy chỉnh
Tạo trình tạo riêng của bạn bằng cách triển khai giao diện Generator:
use DefectiveCode\Faker\Configs\Config;use DefectiveCode\Faker\Concerns\SetsSeed;use DefectiveCode\Faker\Generators\Generator;use DefectiveCode\Faker\Concerns\PreparesFaker; class MyCustomGenerator implements Generator{ use PreparesFaker; use SetsSeed; public function __construct(public Config $config) {} public static function getDefaultConfig(): Config { return new MyCustomConfig([ 'contentType' => 'application/x-custom', 'nameGenerator' => NameGenerator::default('extension'), ]); } public function generate(): mixed { // Logic tạo của bạn ở đây $data = $this->faker->randomElement(['foo', 'bar', 'baz']); $stream = fopen('php://temp', 'w+'); fwrite($stream, $data); return $stream; }} // Sử dụng trình tạo tùy chỉnh của bạnFaker::make(MyCustomGenerator::class) ->toDisk($filesystem) ->generate();
Lớp Cấu hình
Mỗi trình tạo sử dụng một lớp cấu hình mở rộng từ Config:
use DefectiveCode\Faker\Configs\Config; class MyCustomConfig extends Config{ public int $minValue = 1; public int $maxValue = 100;}
Mẹo Hiệu suất
- Sử dụng Swoole: Cài đặt phần mở rộng Swoole để có hiệu suất tốt nhất
- Tinh chỉnh Tính đồng thời: Khớp số lượng luồng với số nhân CPU để có thông lượng tối ưu
- Hoạt động theo Lô: Tạo ra các lô lớn thay vì nhiều lần chạy nhỏ
- Địa điểm Lưu trữ: Sử dụng lưu trữ nhanh (SSD, đĩa cục bộ) cho các tệp tạm thời trước khi tải lên
- I/O Mạng: Khi sử dụng S3, tăng tính đồng thời để tối đa hóa việc sử dụng băng thông
Cấu hình
Các Phương thức Cấu hình Toàn cầu
Các phương thức này có sẵn trên tất cả các thể hiện Faker:
make(string $generator): Faker
Tạo một thể hiện Faker mới với trình tạo được chỉ định:
Faker::make(Png::class)
toDisk(Filesystem $filesystem): Faker
Đặt điểm đến lưu trữ (cần thiết):
Faker::make(Png::class) ->toDisk(new Filesystem(new LocalFilesystemAdapter('/storage')))
basePath(string $basePath): Faker
Đặt đường dẫn cơ sở trong hệ thống tệp:
Faker::make(Png::class) ->basePath('images/uploads') // Các tệp được lưu trữ trong /storage/images/uploads/
count(int $count): Faker
Đặt số lượng tệp sẽ được tạo:
Faker::make(Png::class) ->count(1000)
concurrency(int $threads, ?int $coroutines = null): Faker
Cấu hình việc thực thi song song:
// Tính đồng thời cơ bảnFaker::make(Png::class) ->concurrency(4) // Cụ thể cho Swoole: luồng và coroutineFaker::make(Png::class) ->concurrency(threads: 4, coroutines: 8)
seed(int $seed): Faker
Đặt hạt giống để tạo ra một cách có thể xác định:
Faker::make(Png::class) ->seed(42)
nameGenerator(Closure $generator): Faker
Tùy chỉnh việc đặt tên tệp:
Faker::make(Png::class) ->nameGenerator(function (int $seed, int $completedFiles, $generator) { return "file-{$completedFiles}.png"; })
diskOptions(array $diskOptions): Faker
Truyền các tùy chọn cho bộ điều hợp hệ thống tệp:
Faker::make(Png::class) ->diskOptions([ 'visibility' => 'public', 'ACL' => 'public-read', ])
generate(): void
Thực thi việc tạo tệp:
Faker::make(Png::class)->generate();
Hướng Dẫn Hỗ Trợ
Cảm ơn bạn đã chọn gói mã nguồn mở của chúng tôi! Vui lòng dành chút thời gian để xem qua các hướng dẫn hỗ trợ này. Chúng sẽ giúp bạn tận dụng tối đa dự án của chúng tôi.
Hỗ Trợ Được Điều Hành Bởi Cộng Đồng
Dự án mã nguồn mở của chúng tôi được thúc đẩy bởi cộng đồng tuyệt vời của chúng tôi. Nếu bạn có câu hỏi hoặc cần trợ giúp, StackOverflow và các tài nguyên trực tuyến khác là lựa chọn tốt nhất của bạn.
Lỗi và Ưu Tiên Tính Năng
Thực tế khi quản lý một dự án mã nguồn mở có nghĩa là chúng tôi không thể giải quyết ngay lập tức mọi lỗi hoặc yêu cầu tính năng được báo cáo. Chúng tôi ưu tiên các vấn đề theo thứ tự sau:
1. Lỗi Ảnh Hưởng Đến Sản Phẩm Trả Phí Của Chúng Tôi
Các lỗi ảnh hưởng đến sản phẩm trả phí của chúng tôi luôn là ưu tiên hàng đầu. Trong một số trường hợp, chúng tôi có thể chỉ giải quyết các lỗi ảnh hưởng trực tiếp đến chúng tôi.
2. Yêu Cầu Kéo Của Cộng Đồng
Nếu bạn đã xác định một lỗi và có giải pháp, vui lòng gửi yêu cầu kéo. Sau các vấn đề ảnh hưởng đến sản phẩm của chúng tôi, chúng tôi dành ưu tiên cao nhất tiếp theo cho các sửa lỗi do cộng đồng thực hiện. Sau khi được xem xét và phê duyệt, chúng tôi sẽ hợp nhất giải pháp của bạn và ghi nhận đóng góp của bạn.
3. Hỗ Trợ Tài Chính
Đối với các vấn đề ngoài các danh mục đã nêu, bạn có thể chọn tài trợ cho việc giải quyết của chúng. Mỗi vấn đề mở đều liên kết với một mẫu đơn đặt hàng nơi bạn có thể đóng góp tài chính. Chúng tôi ưu tiên các vấn đề này dựa trên số tiền tài trợ được cung cấp.
Đóng Góp Của Cộng Đồng
Mã nguồn mở phát triển mạnh khi cộng đồng của nó hoạt động tích cực. Ngay cả khi bạn không sửa lỗi, hãy cân nhắc đóng góp thông qua cải tiến mã, cập nhật tài liệu, hướng dẫn, hoặc bằng cách hỗ trợ những người khác trong các kênh cộng đồng. Chúng tôi rất khuyến khích mọi người, với tư cách là một cộng đồng, giúp đỡ trong công việc mã nguồn mở.
Nhấn mạnh lại, DefectiveCode sẽ ưu tiên các lỗi dựa trên cách chúng ảnh hưởng đến các sản phẩm trả phí của chúng tôi, yêu cầu kéo của cộng đồng và sự hỗ trợ tài chính nhận được cho các vấn đề.
Giấy phép - Giấy phép MIT
Bản quyền © Defective Code, LLC. Tất cả các quyền được bảo lưu
Permission là được cấp miễn phí, cho bất kỳ người nào nhận được một bản sao của phần mềm này và các tài liệu liên quan (gọi là "Phần mềm"), được phép sử dụng Phần mềm mà không có hạn chế, bao gồm nhưng không giới hạn các quyền sử dụng, sao chép, chỉnh sửa, hợp nhất, công bố, phân phối, cấp phép lại, và/hoặc bán các bản sao của Phần mềm, và cho phép những người mà Phần mềm được cung cấp có thể làm như vậy, với điều kiện là:
Thông báo bản quyền ở trên và thông báo phép này sẽ được bao gồm trong tất cả các bản sao hoặc phần đáng kể của Phần mềm.
PHẦN MỀM ĐƯỢC CUNG CẤP "NHƯ THẾ", KHÔNG CÓ BẢO ĐẢM DƯỚI BẤT KỲ HÌNH THỨC NÀO, RÕ RÀNG HAY NGỤ Ý, BAO GỒM NHƯNG KHÔNG GIỚI HẠN ĐẾN CÁC BẢO ĐẢM VỀ THƯƠNG MẠI, PHÙ HỢP CHO MỘT MỤC ĐÍCH CỤ THỂ VÀ KHÔNG XÂM PHẠM. TRONG BẤT KỲ TRƯỜNG HỢP NÀO, CÁC TÁC GIẢ HOẶC CÁC CHỦ SỞ HỮU BẢN QUYỀN KHÔNG CHỊU TRÁCH NHIỆM VỀ BẤT KỲ KHIẾU NẠI, THIỆT HẠI HOẶC TRÁCH NHIỆM KHÁC, DÙ TRONG MỘT HÀNH ĐỘNG HỢP ĐỒNG, LỖI HOẶC CÁC HÌNH THỨC KHÁC, PHÁT SINH TỪ, RA HOẶC LIÊN QUAN ĐẾN PHẦN MỀM HOẶC VIỆC SỬ DỤNG HAY CÁC GIAO DỊCH KHÁC LIÊN QUAN ĐẾN PHẦN MỀM.