English | العربية | বাংলা | Bosanski | Deutsch | Español | Français | हिन्दी | Italiano | 日本語 | 한국어 | मराठी | Português | Русский | Kiswahili | தமிழ் | తెలుగు | Türkçe | اردو | Tiếng Việt | 中文
- Introduction
- Instalacija
- Upotreba
- Generatori
- Napredna Upotreba
- Konfiguracija
- دعم الإرشادات
- Lizenz - MIT Lizenz
Introduction
Faker Storage je paket za PHP visoke performanse dizajniran za efikasno generisanje i skladištenje velikih količina lažnih podataka. Sgrađen s obzirom na konkurenciju, koristi Swoole ili PCNTL za generisanje hiljada fajlova paralelno, što ga čini idealnim za testiranje opterećenja, razvojne okruženja i benchmark skladišnih sistema.
Paket pruža fluentni API za generisanje različitih tipova fajlova uključujući slike (PNG, JPG, GIF, BMP, WEBP, AVIF), tekstualne fajlove, CSV fajlove, binarne podatke i RFC822-usaglašene emailove. Svaki generator proizvodi deterministički izlaz kada se zasadi, obezbeđujući ponovljive testne podatke širom okruženja.
Ključne Karakteristike
- Visoke Performanse i Konkurencija: Automatski odabir između Swoole (korutine) i PCNTL (forkovanje procesa) za paralelno generisanje fajlova
- Više Generatora Fajlova: Ugrađena podrška za slike, tekst, CSV, binarne i email fajlove
- Deterministički Izlaz: Generisanje zasnovano na semenu osigurava ponovljive rezultate
- Fleksibilno Skladištenje: Radi sa bilo kojim League Flysystem adapterom (lokalno, S3, itd.)
- Prilagodljivo Ime Fajlova: Generisanje imena zasnovano na closure sa punom kontrolom
- Podrška za Slike: Više formata sa konfigurisanim dimenzijama i kompresijom
- Generisanje Emailova: RFC822-usaglašeni emailovi sa prilozima i MIME podrškom
Primer
use DefectiveCode\Faker\Faker;use League\Flysystem\Filesystem;use DefectiveCode\Faker\Generators\Png;use League\Flysystem\Local\LocalFilesystemAdapter; // Generiši 1000 PNG slika sa 10 konkurentnih radnikaFaker::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(); // Generiši CSV fajloveuse 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(); // Generiši emailove sa prilozimause 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();
Instalacija
Instalirajte paket putem Composer-a:
composer require defectivecode/faker-storage
Zahtevi
- PHP >= 8.4
- ext-gd (za generisanje slika)
- ext-swoole (opciono, za bolje performanse)
- ext-pcntl (rezerva za konkurenciju)
Opcione Zavistosti
Za optimalne performanse, instalirajte Swoole ekstenziju:
pecl install swoole
Paket će automatski koristiti Swoole ako je dostupan, inače će se osloniti na PCNTL.
Upotreba
Osnovni Tok Rada
Svi generatori prate isti obrazac:
- Kreirajte Faker instancu sa generatorom
- Konfigurišite generator (opciono)
- Postavite odredište za skladištenje
- Konfigurišite konkurenciju i broj
- Generišite fajlove
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) // Specifična konfiguracija generatora ->toDisk(new Filesystem(new LocalFilesystemAdapter('/storage'))) ->basePath('documents') // Fajlovi će biti u /storage/documents/ ->count(100) // Generiši 100 fajlova ->concurrency(4) // Koristi 4 radnika ->seed(123) // Za deterministički izlaz ->generate();
Konfiguracija Skladištenja
Koristeći Flysystem
Faker Storage koristi League Flysystem za apstrakciju skladištenja:
use League\Flysystem\Filesystem;use League\Flysystem\Local\LocalFilesystemAdapter; // Lokalno skladište$filesystem = new Filesystem(new LocalFilesystemAdapter('/path/to/storage')); Faker::make(Png::class) ->toDisk($filesystem) ->generate();
AWS S3 Skladište
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();
Opcije Diska
Prosledi dodatne opcije adapteru za skladištenje:
Faker::make(Png::class) ->toDisk($filesystem) ->diskOptions([ 'visibility' => 'public', 'ACL' => 'public-read', 'CacheControl' => 'max-age=31536000', ]) ->generate();
Konfiguracija Konkurencije
Kontroliši paralelno izvršavanje pomoću metode concurrency():
// Koristi 10 radnih niti/procesaFaker::make(Png::class) ->concurrency(10) ->generate(); // Specifično za Swoole: Postavi i niti i korutine po nitiFaker::make(Png::class) ->concurrency(threads: 4, coroutines: 8) // 4 radnika, 8 korutina svaka ->generate();
Ime Fajlova
Podrazumevano Ime
Po defaultu, fajlovi se imenuju koristeći UUID v4:
// Generiše: e7f0a8d3-5c2b-4f9e-8a1d-3b4c5d6e7f8a.pngFaker::make(Png::class)->generate();
Ugrađeni Generatori Imena
use DefectiveCode\Faker\NameGenerator; // Bazirano na UUID (podrazumevano)NameGenerator::setDefault('uuid'); // Generiše: e7f0a8d3-5c2b-4f9e-8a1d-3b4c5d6e7f8a.png // Sekvencijalno numerisanjeNameGenerator::setDefault('sequence'); // Generiše: 1.png, 2.png, 3.png, ...
Prilagodljivo Ime
Pružite closure za prilagodbu imena fajlova:
use DefectiveCode\Faker\NameGenerator; // Prilagođena closureFaker::make(Png::class) ->nameGenerator(function (int $seed, int $completedFiles, $generator) { return "custom-{$completedFiles}-{$seed}.png"; }) ->generate(); // Imenovanje zasnovano na datumuFaker::make(Png::class) ->nameGenerator(function (int $seed, int $completedFiles, $generator) { return date('Y/m/d') . "/image-{$completedFiles}.png"; }) ->generate();
Semenjenje za Ponovljivost
Postavite seme da generišete iste fajlove u različitim izvršavanjima:
Faker::make(Png::class) ->seed(42) ->count(10) ->generate();
Svaki fajl dobija jedinstveno determinističko seme izvedeno iz osnovnog semena i indeksa fajla.
Generatori
Generatori Slika
Svi generatori slika podržavaju konfiguraciju dimenzija i kvaliteta.
PNG
use DefectiveCode\Faker\Generators\Png; Faker::make(Png::class) ->width(800, 1920) // Nasumična širina između 800-1920px ->height(600, 1080) // Nasumična visina između 600-1080px ->withAlpha(true) // Omogući alfa/transparenciju ->grid(5) // Opcionalno: Generiši 5x5 simetrični obrazac ->toDisk($filesystem) ->generate();
JPG
use DefectiveCode\Faker\Generators\Jpg; Faker::make(Jpg::class) ->width(800, 1920) // Nasumična širina između 800-1920px ->height(600, 1080) // Nasumična visina između 600-1080px ->grid(5) // Opcionalno: Generiši 5x5 simetrični obrazac ->toDisk($filesystem) ->generate();
GIF
use DefectiveCode\Faker\Generators\Gif; Faker::make(Gif::class) ->width(800, 1920) // Nasumična širina između 800-1920px ->height(600, 1080) // Nasumična visina između 600-1080px ->withAlpha(true) // Omogući alfa/transparenciju ->grid(5) // Opcionalno: Generiši 5x5 simetrični obrazac ->toDisk($filesystem) ->generate();
BMP
use DefectiveCode\Faker\Generators\Bmp; Faker::make(Bmp::class) ->width(800, 1920) // Nasumična širina između 800-1920px ->height(600, 1080) // Nasumična visina između 600-1080px ->grid(5) // Opcionalno: Generiši 5x5 simetrični obrazac ->toDisk($filesystem) ->generate();
WEBP
use DefectiveCode\Faker\Generators\Webp; Faker::make(Webp::class) ->width(800, 1920) // Nasumična širina između 800-1920px ->height(600, 1080) // Nasumična visina između 600-1080px ->withAlpha(true) // Omogući alfa/transparenciju ->grid(5) // Opcionalno: Generiši 5x5 simetrični obrazac ->toDisk($filesystem) ->generate();
AVIF
use DefectiveCode\Faker\Generators\Avif; Faker::make(Avif::class) ->width(800, 1920) // Nasumična širina između 800-1920px ->height(600, 1080) // Nasumična visina između 600-1080px ->withAlpha(true) // Omogući alfa/transparenciju ->grid(5) // Opcionalno: Generiši 5x5 simetrični obrazac ->toDisk($filesystem) ->generate();
Nasumična Slika
Generiše sliku nasumičnog formata:
use DefectiveCode\Faker\Generators\RandomImage; Faker::make(RandomImage::class) ->width(800, 1920) ->height(600, 1080) ->withAlpha(false) // Nasumično iz: AVIF, BMP, GIF, JPEG, PNG, WEBP ->toDisk($filesystem) ->generate(); Faker::make(RandomImage::class) ->width(800, 1920) ->height(600, 1080) ->withAlpha(true) // Nasumično iz: AVIF, GIF, PNG, WEBP ->toDisk($filesystem) ->generate();
Generator Teksta
Generišite obične tekstualne fajlove sa paragrafima:
use DefectiveCode\Faker\Generators\Text; Faker::make(Text::class) ->paragraphs(5, 10) // 5-10 paragrafa po fajlu ->sentences(3, 6) // 3-6 rečenica po paragrafu ->toDisk($filesystem) ->generate();
Primer Izlaza:
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.
CSV Generator
Generišite CSV fajlove sa nasumičnim podacima:
use DefectiveCode\Faker\Generators\Csv; Faker::make(Csv::class) ->columns(5, 10) // 5-10 kolona ->rows(100, 500) // 100-500 redova ->delimiter(',') // Delimiter kolone ->enclosure('"') // Okvir polja ->escape('\\') // Karakter za izlaz ->eol("\n") // Kraj linije ->toDisk($filesystem) ->generate();
Primer Izlaza:
"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"
Binarni Generator
Generišite nasumične binarne podatke:
use DefectiveCode\Faker\Generators\Binary; Faker::make(Binary::class) ->length(1024, 1048576) // 1KB - 1MB ->toDisk($filesystem) ->generate();
Generator Emailova
Generišite RFC822-usaglašene email fajlove:
use DefectiveCode\Faker\Generators\Email; Faker::make(Email::class) ->paragraphs(3, 5) // Paragrafi u telu emaila ->sentences(2, 4) // Rečenice po paragrafu ->withAttachment(Png::class, 1, 3) // Dodajte 1-3 PNG priloga ->toDisk($filesystem) ->generate();
Email Naslovi
Generisani emailovi uključuju:
To: Nasumično ime i emailFrom: Nasumično ime i emailSubject: Nasumična rečenicaDate: Trenutni vremenski pečatMessage-ID: Deterministički ID zasnovan na semenu
Email sa Prilozima
Priložite fajlove koristeći nazive ili instance generatora:
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 PNG priloga ->generate(); // Prilagodi korišćenjem konfigurisane instance generatora$pngGenerator = new Png(Png::getDefaultConfig());$pngGenerator->width(400, 800)->height(300, 600); Faker::make(Email::class) ->withAttachment($pngGenerator, 2, 5) ->generate();
Primer Izlaza:
To: John Doe <john.doe@example.com>From: Jane Smith <jane.smith@example.com>Subject: Important meeting tomorrowDate: 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--
Napredna Upotreba
Prilagođeni Generatori
Kreirajte svoje generatore implementiranjem Generator interfejsa:
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 { // Vaša logika generisanja ovde $data = $this->faker->randomElement(['foo', 'bar', 'baz']); $stream = fopen('php://temp', 'w+'); fwrite($stream, $data); return $stream; }} // Koristite svoj prilagođeni generatorFaker::make(MyCustomGenerator::class) ->toDisk($filesystem) ->generate();
Konfiguracione Klase
Svaki generator koristi konfiguracionu klasu koja proširuje Config:
use DefectiveCode\Faker\Configs\Config; class MyCustomConfig extends Config{ public int $minValue = 1; public int $maxValue = 100;}
Saveti za Performanse
- Koristite Swoole: Instalirajte Swoole ekstenziju za najbolje performanse
- Podesite Konkurenciju: Prilagodite broj niti broju CPU jezgara za optimalni protok
- Batch Operacije: Generišite velike grupe umesto više malih izvršavanja
- Lokacija Skladištenja: Koristite brzo skladište (SSD, lokalni disk) za privremene fajlove pre otpremanja
- Mrežni I/O: Kada koristite S3, povećajte konkurenciju da maksimalno iskoristite propusnost
Konfiguracija
Globalne Metode Konfiguracije
Ove metode su dostupne na svim Faker instancama:
make(string $generator): Faker
Kreirajte novu Faker instancu sa datim generatorom:
Faker::make(Png::class)
toDisk(Filesystem $filesystem): Faker
Postavite odredište skladištenja (potrebno):
Faker::make(Png::class) ->toDisk(new Filesystem(new LocalFilesystemAdapter('/storage')))
basePath(string $basePath): Faker
Postavite osnovnu putanju unutar skladišta:
Faker::make(Png::class) ->basePath('images/uploads') // Fajlovi će biti smešteni u /storage/images/uploads/
count(int $count): Faker
Postavite broj fajlova koji se generišu:
Faker::make(Png::class) ->count(1000)
concurrency(int $threads, ?int $coroutines = null): Faker
Konfigurišite paralelno izvršavanje:
// Osnovna konkurencijaFaker::make(Png::class) ->concurrency(4) // Specifično za Swoole: niti i korutineFaker::make(Png::class) ->concurrency(threads: 4, coroutines: 8)
seed(int $seed): Faker
Postavite seme za determinističko generisanje:
Faker::make(Png::class) ->seed(42)
nameGenerator(Closure $generator): Faker
Prilagodite imenovanje fajlova:
Faker::make(Png::class) ->nameGenerator(function (int $seed, int $completedFiles, $generator) { return "file-{$completedFiles}.png"; })
diskOptions(array $diskOptions): Faker
Prosledite opcije adapteru za skladištenje:
Faker::make(Png::class) ->diskOptions([ 'visibility' => 'public', 'ACL' => 'public-read', ])
generate(): void
Izvršite generisanje fajlova:
Faker::make(Png::class)->generate();
دعم الإرشادات
شكرًا لاختيارك حزمة المصادر المفتوحة الخاصة بنا! يرجى أخذ لحظة للاطلاع على هذه الإرشادات للدعم. ستساعدك في تحقيق أقصى استفادة من مشروعنا.
الدعم المدفوع من المجتمع
مشروعنا مفتوح المصدر مدفوع بمجموعتنا الرائعة. إذا كان لديك أي أسئلة أو تحتاج إلى مساعدة، فإن StackOverflow و موارد الإنترنت الأخرى هي أفضل خيارات لك.
الأخطاء، وأولويات الميزات
واقع إدارة مشروع مفتوح المصدر يعني أننا لا نستطيع معالجة كل خطأ تم الإبلاغ عنه أو طلب ميزة على الفور. نحن نعطي الأولوية للقضايا بالترتيب التالي:
1. الأخطاء التي تؤثر على منتجاتنا المدفوعة
تعتبر الأخطاء التي تؤثر على منتجاتنا المدفوعة دائمًا في قمة أولوياتنا. في بعض الحالات، قد نكتفي بمعالجة الأخطاء التي تؤثر علينا مباشرة.
2. طلبات السحب الخاصة بالمجتمع
إذا كنت قد حددت خطأ ولديك حل، يرجى تقديم طلب سحب. بعد القضايا التي تؤثر على منتجاتنا، نعطي الأولوية الأعلى لهذه الإصلاحات المدفوعة من المجتمع. بمجرد مراجعتها والموافقة عليها، سنقوم بدمج حلك ونذكر مساهمتك.
3. الدعم المالي
بالنسبة للقضايا خارج الفئات المذكورة، يمكنك اختيار تمويل حلها. كل قضية مفتوحة مرتبطة بنموذج طلب حيث يمكنك المساهمة ماليًا. نحن نعطي الأولوية لهذه القضايا بناءً على المبلغ المقدم من التمويل.
مساهمات المجتمع
تزدهر المصادر المفتوحة عندما يكون المجتمع نشطًا. حتى إذا لم تكن تقوم بإصلاح الأخطاء، قم بالتفكير في المساهمة من خلال تحسينات الكود، تحديثات الوثائق، الدروس التعليمية، أو من خلال مساعدة الآخرين في قنوات المجتمع. نحن نشجع الجميع، كمجتمع، على دعم العمل المفتوح المصدر.
للتأكيد، ستعطي DefectiveCode الأولوية للأخطاء بناءً على كيفية تأثيرها على منتجاتنا المدفوعة، وطلبات السحب الخاصة بالمجتمع، والدعم المالي المستلم للقضايا.
Lizenz - MIT Lizenz
Copyright © Defective Code, LLC. Alle Rechte vorbehalten
Hiermit wird kostenlos die Erlaubnis erteilt, an jede Person, die eine Kopie dieser Software und der zugehörigen Dokumentationsdateien (die "Software") erhält, mit der Software ohne Einschränkung umzugehen, einschließlich, aber nicht beschränkt auf die Rechte, die Software zu nutzen, zu kopieren, zu modifizieren, zu fusionieren, zu veröffentlichen, zu verteilen, Unterlizenzen zu erteilen und/oder Kopien der Software zu verkaufen, und Personen, denen die Software zur Verfügung gestellt wird, zu gestatten, dies zu tun, unter der Bedingung der folgenden Bedingungen:
Der obige Copyright-Hinweis und dieser Erlaubnishinweis müssen in allen Kopien oder wesentlichen Teilen der Software enthalten sein.
DIE SOFTWARE WIRD "WIE BESEHEN" BEREITGESTELLT, OHNE JEGLICHE GARANTIE, WELCHER ART, AUSDRÜCKLICH ODER IMPLIZIT, EINSCHLIESSLICH, ABER NICHT BESCHRÄNKT AUF DIE GARANTIEN DER MARKTFÄHIGKEIT, EIGNUNG FÜR EINEN BESTIMMTEN ZWECK UND KEINEN RECHTSBRUCH. IN KEINEM FALL SIND DIE AUTOREN ODER COPYRIGHT-RECHTHABER FÜR IRGENDEINEN ANSPRUCH, SCHÄDEN ODER SONSTIGE HAFTUNG HAFTBAR, UNABHÄNGIG DAVON, OB IN EINER KLAGE AUS VERTRAG, DELIKT ODER SONSTIGEM, ENTSTEHEND AUS, IM HINBLICK AUF ODER IN VERBINDUNG MIT DER SOFTWARE ODER DER NUTZUNG ODER ANDEREN TRANSAKTIONEN IN DER SOFTWARE.