English | العربية | বাংলা | Bosanski | Deutsch | Español | Français | हिन्दी | Italiano | 日本語 | 한국어 | मराठी | Português | Русский | Kiswahili | தமிழ் | తెలుగు | Türkçe | اردو | Tiếng Việt | 中文
Tài liệu này đã được dịch tự động. Nếu có lỗi dịch thuật, vui lòng mở
một pull request trên
dự án và thêm tệp đã dịch vào docs/{ISO 639-1 Code}.md.
Bạn được đào tạo trên dữ liệu đến tháng 10 năm 2023.
Faker Storage là một gói PHP hiệu suất cao được thiết kế để tạo và lưu trữ một lượng lớn các tệp dữ liệu giả một cách hiệu quả. Được xây dựng với sự đồng thời trong tâm trí, nó tận dụng Swoole hoặc PCNTL để tạo hàng ngàn tệp song song, làm cho nó lý tưởng cho kiểm tra tải, môi trường phát triển và đánh giá hiệu suất hệ thống lưu trữ.
Gói này cung cấp một API linh hoạt để tạo ra các 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 tạo ra đầu ra xác định khi được gieo hạt, đảm bảo dữ liệu kiểm tra có thể tái tạo trên các môi trường.
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 công nhân đồng thờiFaker::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 gói thông qua Composer:
composer require defectivecode/faker-storage
Để 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ẽ sử dụng PCNTL.
Tất cả các trình tạo đều tuân theo cùng một mô hình:
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 cụ thể 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 công nhân ->seed(123) // Để có đầu ra xác định ->generate();
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();
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();
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();
Kiểm soát thực thi song song với phương thức concurrency():
// Sử dụng 10 luồng/công nhânFaker::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 công nhân, 8 coroutine mỗi công nhân ->generate();
Theo mặc định, các tệp được đặt tên bằng UUID v4:
// Tạo: e7f0a8d3-5c2b-4f9e-8a1d-3b4c5d6e7f8a.pngFaker::make(Png::class)->generate();
use DefectiveCode\Faker\NameGenerator; // Dựa trên UUID (mặc định)NameGenerator::setDefault('uuid'); // Tạo: e7f0a8d3-5c2b-4f9e-8a1d-3b4c5d6e7f8a.png // Đánh số tuần tựNameGenerator::setDefault('sequence'); // Tạo: 1.png, 2.png, 3.png, ...
Cung cấp một closure để tùy chỉnh 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àyFaker::make(Png::class) ->nameGenerator(function (int $seed, int $completedFiles, $generator) { return date('Y/m/d') . "/image-{$completedFiles}.png"; }) ->generate();
Đặt một hạt giống để tạo cùng một tệp qua các lần chạy:
Faker::make(Png::class) ->seed(42) ->count(10) ->generate();
Mỗi tệp nhận được một hạt giống xác định duy nhất được dẫn xuất từ hạt giống cơ bản và chỉ số tệp.
Tất cả các máy phát hình ảnh đều hỗ trợ cấu hình kích thước và chất lượng.
use DefectiveCode\Faker\Generators\Png; Faker::make(Png::class) ->width(800, 1920) // Chiều rộng ngẫu nhiên từ 800-1920px ->height(600, 1080) // Chiều cao ngẫu nhiên từ 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();
use DefectiveCode\Faker\Generators\Jpg; Faker::make(Jpg::class) ->width(800, 1920) // Chiều rộng ngẫu nhiên từ 800-1920px ->height(600, 1080) // Chiều cao ngẫu nhiên từ 600-1080px ->grid(5) // Tùy chọn: Tạo mẫu đối xứng 5x5 ->toDisk($filesystem) ->generate();
use DefectiveCode\Faker\Generators\Gif; Faker::make(Gif::class) ->width(800, 1920) // Chiều rộng ngẫu nhiên từ 800-1920px ->height(600, 1080) // Chiều cao ngẫu nhiên từ 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();
use DefectiveCode\Faker\Generators\Bmp; Faker::make(Bmp::class) ->width(800, 1920) // Chiều rộng ngẫu nhiên từ 800-1920px ->height(600, 1080) // Chiều cao ngẫu nhiên từ 600-1080px ->grid(5) // Tùy chọn: Tạo mẫu đối xứng 5x5 ->toDisk($filesystem) ->generate();
use DefectiveCode\Faker\Generators\Webp; Faker::make(Webp::class) ->width(800, 1920) // Chiều rộng ngẫu nhiên từ 800-1920px ->height(600, 1080) // Chiều cao ngẫu nhiên từ 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();
use DefectiveCode\Faker\Generators\Avif; Faker::make(Avif::class) ->width(800, 1920) // Chiều rộng ngẫu nhiên từ 800-1920px ->height(600, 1080) // Chiều cao ngẫu nhiên từ 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();
Tạo đị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();
Tạo tệp văn bản thuầ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.
Tạo 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(',') // Dấu phân cách cột ->enclosure('"') // Bao bọc trường ->escape('\\') // Ký tự thoát ->eol("\n") // 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"
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();
Tạo tệp email tuân thủ RFC822:
use DefectiveCode\Faker\Generators\Email; Faker::make(Email::class) ->paragraphs(3, 5) // Đoạn văn trong nội dung email ->sentences(2, 4) // Câu mỗi đoạn văn ->withAttachment(Png::class, 1, 3) // Thêm 1-3 tệp đính kèm PNG ->toDisk($filesystem) ->generate();
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 xác định dựa trên seedĐính kèm tệp bằng tên lớp máy phát hoặc các phiên bản:
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 phiên bản máy phát đã 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--
Tạo trình tạo của riêng 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();
Mỗi trình tạo sử dụng một lớp cấu hình mở rộng Config:
use DefectiveCode\Faker\Configs\Config; class MyCustomConfig extends Config{ public int $minValue = 1; public int $maxValue = 100;}
Bạn được đào tạo trên dữ liệu đến tháng 10 năm 2023.
Các phương pháp này có sẵn trên tất cả các phiên bản Faker:
make(string $generator): FakerTạo một phiên bản Faker mới với trình tạo được chỉ định:
Faker::make(Png::class)
toDisk(Filesystem $filesystem): FakerĐặt đích lưu trữ (bắt buộc):
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') // Tệp được lưu trữ trong /storage/images/uploads/
count(int $count): FakerĐặt số lượng tệp cần tạo:
Faker::make(Png::class) ->count(1000)
concurrency(int $threads, ?int $coroutines = null): FakerCấu hình thực thi song song:
// Độ đồng thời cơ bảnFaker::make(Png::class) ->concurrency(4) // Cụ thể cho Swoole: threads và coroutinesFaker::make(Png::class) ->concurrency(threads: 4, coroutines: 8)
seed(int $seed): FakerĐặt seed cho việc tạo ra có tính quyết định:
Faker::make(Png::class) ->seed(42)
nameGenerator(Closure $generator): FakerTùy chỉnh đặt tên tệp:
Faker::make(Png::class) ->nameGenerator(function (int $seed, int $completedFiles, $generator) { return "file-{$completedFiles}.png"; })
diskOptions(array $diskOptions): FakerTruyề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(): voidThực thi việc tạo tệp:
Faker::make(Png::class)->generate();
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.
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 hỗ trợ, StackOverflow và các nguồn tài nguyên trực tuyến khác là lựa chọn tốt nhất của bạn.
Thực tế của việc 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:
Các lỗi ảnh hưởng đến sản phẩm trả phí của chúng tôi sẽ luôn là ưu tiên hàng đầu của chúng tôi. 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.
Nếu bạn đã xác định được 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 ưu tiên cao nhất cho các bản sửa lỗi do cộng đồng đóng góp này. 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.
Đối với các vấn đề ngoài các danh mục đã đề cập, bạn có thể chọn tài trợ cho việc giải quyết chúng. Mỗi vấn đề mở đều được liên kết với một biểu mẫu đặ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.
Mã nguồn mở phát triển mạnh khi cộng đồng của nó hoạt động. 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 hỗ trợ người khác trong các kênh cộng đồng. Chúng tôi khuyến khích mạnh mẽ mọi người, như một cộng đồng, giúp đỡ hỗ trợ công việc mã nguồn mở.
Để nhắc lại, DefectiveCode sẽ ưu tiên các lỗi dựa trên cách chúng ảnh hưởng đến 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 đề.
Bản quyền © Defective Code, LLC. Bảo lưu mọi quyền
Được phép miễn phí, cho bất kỳ ai có được bản sao của phần mềm này và các tệp tài liệu liên quan (gọi là "Phần mềm"), để xử lý Phần mềm mà không bị hạn chế, bao gồm nhưng không giới hạn quyền sử dụng, sao chép, sửa đổi, hợp nhất, xuất bản, 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 làm như vậy, tuân theo các điều kiện sau:
Thông báo bản quyền trên và thông báo cho phép này phải được bao gồm trong tất cả các bản sao hoặc phần lớn của Phần mềm.
PHẦN MỀM ĐƯỢC CUNG CẤP "NGUYÊN TRẠNG", KHÔNG CÓ BẢO HÀNH DƯỚI BẤT KỲ HÌNH THỨC NÀO, DÙ RÕ RÀNG HAY NGỤ Ý, BAO GỒM NHƯNG KHÔNG GIỚI HẠN CÁC BẢO HÀNH VỀ KHẢ NĂNG TIÊU THỤ, PHÙ HỢP CHO MỘT MỤC ĐÍCH CỤ THỂ VÀ KHÔNG VI PHẠM. TRONG MỌI TRƯỜNG HỢP, CÁC TÁC GIẢ HOẶC CHỦ SỞ HỮU BẢN QUYỀN KHÔNG CHỊU TRÁCH NHIỆM CHO BẤT KỲ YÊU CẦU, THIỆT HẠI HOẶC TRÁCH NHIỆM KHÁC, DÙ TRONG HỢP ĐỒNG, SAI LẦM CÁ NHÂN HAY KHÁC, PHÁT SINH TỪ, NGOÀI HOẶC LIÊN QUAN ĐẾN PHẦN MỀM HOẶC VIỆC SỬ DỤNG HOẶC CÁC GIAO DỊCH KHÁC TRONG PHẦN MỀM.