Defective Code Logo

Total Downloads Latest Stable Version Latest Stable Version

English | العربية | বাংলা | Bosanski | Deutsch | Español | Français | हिन्दी | Italiano | 日本語 | 한국어 | मराठी | Português | Русский | Kiswahili | தமிழ் | తెలుగు | Türkçe | اردو | Tiếng Việt | 中文

Upozorenje o Prevodu

Ovaj dokument je automatski preveden. Ako postoje greške u prevodu, molimo vas da otvorite pull request na projektu i dodate prevedeni fajl u docs/{ISO 639-1 Code}.md.

Obučeni ste na podacima do oktobra 2023. godine.

Uvod

Faker Storage je visokoperformansni PHP paket dizajniran za generisanje i skladištenje velikih količina lažnih podataka efikasno. Izgrađen sa konkurentnošću na umu, koristi Swoole ili PCNTL za generisanje hiljada fajlova paralelno, što ga čini idealnim za testiranje opterećenja, razvojna okruženja i merenje performansi 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-kompatibilne emailove. Svaki generator proizvodi deterministički izlaz kada je postavljen, osiguravajući reproduktivne test podatke kroz okruženja.

Ključne karakteristike

Primjer

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 radnika
Faker::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 fajlove
use 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 prilozima
use 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 Composera:

composer require defectivecode/faker-storage

Zahtjevi

Opcionalne Ovisnosti

Za optimalne performanse, instalirajte Swoole ekstenziju:

pecl install swoole

Paket će automatski koristiti Swoole ako je dostupan, inače će se vratiti na PCNTL.

Upotreba

Osnovni Tok

Svi generatori slijede isti obrazac:

  1. Kreirajte Faker instancu s generatorom
  2. Konfigurišite generator (opcionalno)
  3. Postavite odredište za pohranu
  4. Konfigurišite konkurentnost i broj
  5. Generišite datoteke
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) // Konfiguracija specifična za generator
->toDisk(new Filesystem(new LocalFilesystemAdapter('/storage')))
->basePath('documents') // Datoteke će biti u /storage/documents/
->count(100) // Generiši 100 datoteka
->concurrency(4) // Koristi 4 radnika
->seed(123) // Za deterministički izlaz
->generate();

Konfiguracija Pohrane

Korištenje Flysystem-a

Faker Pohrana koristi League Flysystem za apstrakciju pohrane:

use League\Flysystem\Filesystem;
use League\Flysystem\Local\LocalFilesystemAdapter;
 
// Lokalna pohrana
$filesystem = new Filesystem(new LocalFilesystemAdapter('/path/to/storage'));
 
Faker::make(Png::class)
->toDisk($filesystem)
->generate();

AWS S3 Pohrana

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

Proslijedite dodatne opcije adapteru za datotečni sistem:

Faker::make(Png::class)
->toDisk($filesystem)
->diskOptions([
'visibility' => 'public',
'ACL' => 'public-read',
'CacheControl' => 'max-age=31536000',
])
->generate();

Konfiguracija Konkurentnosti

Kontrolišite paralelno izvršavanje metodom concurrency():

// Koristi 10 radnih niti/procesa
Faker::make(Png::class)
->concurrency(10)
->generate();
 
// Specifično za Swoole: Postavite i niti i korutine po niti
Faker::make(Png::class)
->concurrency(threads: 4, coroutines: 8) // 4 radnika, 8 korutina svaki
->generate();

Imenovanje Datoteka

Zadano Imenovanje

Po defaultu, datoteke se imenuju koristeći UUID v4:

// Generiše: e7f0a8d3-5c2b-4f9e-8a1d-3b4c5d6e7f8a.png
Faker::make(Png::class)->generate();

Ugrađeni Generator Imena

use DefectiveCode\Faker\NameGenerator;
 
// Bazirano na UUID (default)
NameGenerator::setDefault('uuid'); // Generiše: e7f0a8d3-5c2b-4f9e-8a1d-3b4c5d6e7f8a.png
 
// Sekvencijalno numerisanje
NameGenerator::setDefault('sequence'); // Generiše: 1.png, 2.png, 3.png, ...

Prilagođeno Imenovanje

Pružite zatvaranje za prilagođavanje imena datoteka:

use DefectiveCode\Faker\NameGenerator;
 
// Prilagođeno zatvaranje
Faker::make(Png::class)
->nameGenerator(function (int $seed, int $completedFiles, $generator) {
return "custom-{$completedFiles}-{$seed}.png";
})
->generate();
 
// Imenovanje bazirano na datumu
Faker::make(Png::class)
->nameGenerator(function (int $seed, int $completedFiles, $generator) {
return date('Y/m/d') . "/image-{$completedFiles}.png";
})
->generate();

Sjeme za Reproducibilnost

Postavite sjeme da generišete iste datoteke kroz pokretanja:

Faker::make(Png::class)
->seed(42)
->count(10)
->generate();

Svaka datoteka dobija jedinstveno determinističko sjeme izvedeno iz osnovnog sjemena i indeksa datoteke.

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/transparentni kanal
->grid(5) // Opcionalno: Generiši simetrični uzorak 5x5
->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 simetrični uzorak 5x5
->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/transparentni kanal
->grid(5) // Opcionalno: Generiši simetrični uzorak 5x5
->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 simetrični uzorak 5x5
->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/transparentni kanal
->grid(5) // Opcionalno: Generiši simetrični uzorak 5x5
->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/transparentni kanal
->grid(5) // Opcionalno: Generiši simetrični uzorak 5x5
->toDisk($filesystem)
->generate();

Nasumična slika

Generiše nasumični format slike:

use DefectiveCode\Faker\Generators\RandomImage;
 
Faker::make(RandomImage::class)
->width(800, 1920)
->height(600, 1080)
->withAlpha(false) // Nasumično od: AVIF, BMP, GIF, JPEG, PNG, WEBP
->toDisk($filesystem)
->generate();
 
Faker::make(RandomImage::class)
->width(800, 1920)
->height(600, 1080)
->withAlpha(true) // Nasumično od: AVIF, GIF, PNG, WEBP
->toDisk($filesystem)
->generate();

Generator teksta

Generiši obične tekstualne datoteke s paragrafima:

use DefectiveCode\Faker\Generators\Text;
 
Faker::make(Text::class)
->paragraphs(5, 10) // 5-10 paragrafa po datoteci
->sentences(3, 6) // 3-6 rečenica po paragrafu
->toDisk($filesystem)
->generate();

Primjer 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ši CSV datoteke s 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(',') // Razdjelnik kolona
->enclosure('"') // Ograda polja
->escape('\\') // Znak za bijeg
->eol("\n") // Kraj linije
->toDisk($filesystem)
->generate();

Primjer 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"

Generator binarnih podataka

Generiši nasumične binarne podatke:

use DefectiveCode\Faker\Generators\Binary;
 
Faker::make(Binary::class)
->length(1024, 1048576) // 1KB - 1MB
->toDisk($filesystem)
->generate();

Generator emailova

Generiši RFC822-kompatibilne email datoteke:

use DefectiveCode\Faker\Generators\Email;
 
Faker::make(Email::class)
->paragraphs(3, 5) // Paragrafi u tijelu emaila
->sentences(2, 4) // Rečenice po paragrafu
->withAttachment(Png::class, 1, 3) // Dodaj 1-3 PNG privitka
->toDisk($filesystem)
->generate();

Zaglavlja emaila

Generisani emailovi uključuju:

Email s privicima

Priloži datoteke 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 privitka
->generate();
 
// Priloži koristeći konfiguriranu instancu generatora
$pngGenerator = new Png(Png::getDefaultConfig());
$pngGenerator->width(400, 800)->height(300, 600);
 
Faker::make(Email::class)
->withAttachment($pngGenerator, 2, 5)
->generate();

Primjer izlaza:

To: John Doe <john.doe@example.com>
From: Jane Smith <jane.smith@example.com>
Subject: Važan sastanak sutra
Date: Fri, 03 Jan 2026 10:30:00 +0000
Message-ID: <3e92e5c2b0d632b3a36fbbb17484b7fe@example.com>
Content-Type: multipart/mixed; boundary="----=_Part_123"
 
------=_Part_123
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
 
Lorem ipsum dolor sit amet, consectetur adipiscing elit...
 
------=_Part_123
Content-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 vlastite generatore implementirajući Generator interfejs:

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 ovdje
$data = $this->faker->randomElement(['foo', 'bar', 'baz']);
 
$stream = fopen('php://temp', 'w+');
fwrite($stream, $data);
 
return $stream;
}
}
 
// Koristite vaš prilagođeni generator
Faker::make(MyCustomGenerator::class)
->toDisk($filesystem)
->generate();

Konfiguracijske Klase

Svaki generator koristi konfiguracijsku klasu koja proširuje Config:

use DefectiveCode\Faker\Configs\Config;
 
class MyCustomConfig extends Config
{
public int $minValue = 1;
public int $maxValue = 100;
}

Savjeti za Performanse

  1. Koristite Swoole: Instalirajte Swoole ekstenziju za najbolje performanse
  2. Podešavanje Konkurentnosti: Uskladite broj niti sa CPU jezgrama za optimalan protok
  3. Grupne Operacije: Generišite velike grupe umjesto više malih pokretanja
  4. Lokacija Skladištenja: Koristite brzu pohranu (SSD, lokalni disk) za privremene datoteke prije učitavanja
  5. Mrežni I/O: Kada koristite S3, povećajte konkurentnost da maksimizirate korištenje propusnosti

Obučeni ste na podacima do oktobra 2023.

Konfiguracija

Metode globalne konfiguracije

Ove metode su dostupne na svim Faker instancama:

make(string $generator): Faker

Kreirajte novu Faker instancu sa specificiranim generatorom:

Faker::make(Png::class)

toDisk(Filesystem $filesystem): Faker

Postavite odredište za pohranu (obavezno):

Faker::make(Png::class)
->toDisk(new Filesystem(new LocalFilesystemAdapter('/storage')))

basePath(string $basePath): Faker

Postavite osnovnu putanju unutar datotečnog sistema:

Faker::make(Png::class)
->basePath('images/uploads') // Datoteke pohranjene u /storage/images/uploads/

count(int $count): Faker

Postavite broj datoteka za generisanje:

Faker::make(Png::class)
->count(1000)

concurrency(int $threads, ?int $coroutines = null): Faker

Konfigurišite paralelno izvršavanje:

// Osnovna konkurentnost
Faker::make(Png::class)
->concurrency(4)
 
// Swoole-specifično: niti i korutine
Faker::make(Png::class)
->concurrency(threads: 4, coroutines: 8)

seed(int $seed): Faker

Postavite sjeme za determinističko generisanje:

Faker::make(Png::class)
->seed(42)

nameGenerator(Closure $generator): Faker

Prilagodite imenovanje datoteka:

Faker::make(Png::class)
->nameGenerator(function (int $seed, int $completedFiles, $generator) {
return "file-{$completedFiles}.png";
})

diskOptions(array $diskOptions): Faker

Proslijedite opcije adapteru datotečnog sistema:

Faker::make(Png::class)
->diskOptions([
'visibility' => 'public',
'ACL' => 'public-read',
])

generate(): void

Izvršite generisanje datoteka:

Faker::make(Png::class)->generate();

Smjernice za podršku

Hvala što ste odabrali naš paket otvorenog koda! Molimo vas da odvojite trenutak da pregledate ove smjernice za podršku. One će vam pomoći da izvučete maksimum iz našeg projekta.

Podrška vođena zajednicom

Naš projekt otvorenog koda pokreće naša sjajna zajednica. Ako imate pitanja ili trebate pomoć, StackOverflow i drugi online resursi su vaša najbolja opcija.

Greške i prioritizacija funkcionalnosti

Realnost upravljanja projektom otvorenog koda znači da ne možemo odmah riješiti svaku prijavljenu grešku ili zahtjev za funkcionalnost. Prioritet dajemo problemima u sljedećem redoslijedu:

1. Greške koje utiču na naše plaćene proizvode

Greške koje utiču na naše plaćene proizvode uvijek će biti naš glavni prioritet. U nekim slučajevima, možda ćemo riješiti samo greške koje direktno utiču na nas.

2. Pull zahtjevi zajednice

Ako ste identificirali grešku i imate rješenje, molimo vas da podnesete pull zahtjev. Nakon problema koji utiču na naše proizvode, sljedeći najviši prioritet dajemo ovim rješenjima vođenim zajednicom. Nakon pregleda i odobrenja, spojit ćemo vaše rješenje i priznati vaš doprinos.

3. Financijska podrška

Za probleme izvan navedenih kategorija, možete se odlučiti za financiranje njihovog rješavanja. Svako otvoreno pitanje je povezano s narudžbenicom gdje možete financijski doprinijeti. Prioritet dajemo ovim problemima na osnovu iznosa financiranja.

Doprinosi zajednice

Otvoreni kod napreduje kada je njegova zajednica aktivna. Čak i ako ne popravljate greške, razmislite o doprinosu kroz poboljšanja koda, ažuriranja dokumentacije, tutorijale ili pomažući drugima u kanalima zajednice. Toplo ohrabrujemo sve, kao zajednicu, da pomognu podržati rad otvorenog koda.

Da ponovimo, DefectiveCode će prioritizirati greške na osnovu toga kako utiču na naše plaćene proizvode, pull zahtjeve zajednice i financijsku podršku primljenu za probleme.

Licenca - MIT Licenca

Autorska prava © Defective Code, LLC. Sva prava zadržana

Dozvola se ovim putem daje, besplatno, svakoj osobi koja dobije kopiju ovog softvera i pratećih dokumentacijskih datoteka (u daljem tekstu "Softver"), da koristi Softver bez ograničenja, uključujući bez ograničenja prava na korištenje, kopiranje, modifikaciju, spajanje, objavljivanje, distribuciju, podlicenciranje i/ili prodaju kopija Softvera, i da dozvoli osobama kojima je Softver dostavljen da to učine, pod sljedećim uvjetima:

Gore navedena obavijest o autorskim pravima i ova dozvola moraju biti uključeni u sve kopije ili značajne dijelove Softvera.

SOFTVER SE PRUŽA "KAKAV JEST", BEZ JAMSTVA BILO KOJE VRSTE, IZRIČITOG ILI PODRAZUMIJEVANOG, UKLJUČUJUĆI ALI NE OGRANIČAVAJUĆI SE NA JAMSTVA PRODAJNOSTI, PODOBNOSTI ZA ODREĐENU SVRHU I NEKRŠENJA. NI U KOJEM SLUČAJU AUTORI ILI NOSITELJI AUTORSKIH PRAVA NEĆE BITI ODGOVORNI ZA BILO KOJI ZAHTJEV, ŠTETU ILI DRUGU ODGOVORNOST, BILO U UGOVORU, DELIKTU ILI NA DRUGI NAČIN, KOJI PROIZLAZI IZ, IZ ILI U VEZI SA SOFTVEROM ILI KORIŠTENJEM ILI DRUGIM POSLOVANJEM U SOFTVERU.