English | العربية | বাংলা | Bosanski | Deutsch | Español | Français | हिन्दी | Italiano | 日本語 | 한국어 | मराठी | Português | Русский | Kiswahili | தமிழ் | తెలుగు | Türkçe | اردو | Tiếng Việt | 中文
Questo documento è stato tradotto automaticamente. Se ci sono errori di traduzione, si prega di aprire
una pull request sul
progetto e aggiungere il file tradotto a docs/{ISO 639-1 Code}.md.
Sei addestrato su dati fino a ottobre 2023.
Faker Storage è un pacchetto PHP ad alte prestazioni progettato per generare e memorizzare grandi volumi di file di dati fittizi in modo efficiente. Costruito con la concorrenza in mente, sfrutta Swoole o PCNTL per generare migliaia di file in parallelo, rendendolo ideale per test di carico, ambienti di sviluppo e benchmarking dei sistemi di archiviazione.
Il pacchetto fornisce un'API fluente per generare vari tipi di file, inclusi immagini (PNG, JPG, GIF, BMP, WEBP, AVIF), file di testo, file CSV, dati binari ed email conformi a RFC822. Ogni generatore produce un output deterministico quando seminato, garantendo dati di test riproducibili in diversi ambienti.
use DefectiveCode\Faker\Faker;use League\Flysystem\Filesystem;use DefectiveCode\Faker\Generators\Png;use League\Flysystem\Local\LocalFilesystemAdapter; // Genera 1000 immagini PNG con 10 lavoratori concorrentiFaker::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(); // Genera file 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(); // Genera email con allegatiuse 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();
Installa il pacchetto tramite Composer:
composer require defectivecode/faker-storage
Per prestazioni ottimali, installa l'estensione Swoole:
pecl install swoole
Il pacchetto utilizzerà automaticamente Swoole se disponibile, altrimenti ricorrerà a PCNTL.
Tutti i generatori seguono lo stesso schema:
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) // Configurazione specifica del generatore ->toDisk(new Filesystem(new LocalFilesystemAdapter('/storage'))) ->basePath('documents') // I file saranno in /storage/documents/ ->count(100) // Genera 100 file ->concurrency(4) // Usa 4 lavoratori ->seed(123) // Per output deterministico ->generate();
Faker Storage utilizza League Flysystem per l'astrazione dell'archiviazione:
use League\Flysystem\Filesystem;use League\Flysystem\Local\LocalFilesystemAdapter; // Archiviazione locale$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();
Passa opzioni aggiuntive all'adattatore del filesystem:
Faker::make(Png::class) ->toDisk($filesystem) ->diskOptions([ 'visibility' => 'public', 'ACL' => 'public-read', 'CacheControl' => 'max-age=31536000', ]) ->generate();
Controlla l'esecuzione parallela con il metodo concurrency():
// Usa 10 thread/processi di lavoroFaker::make(Png::class) ->concurrency(10) ->generate(); // Specifico per Swoole: imposta sia i thread che le coroutine per threadFaker::make(Png::class) ->concurrency(threads: 4, coroutines: 8) // 4 lavoratori, 8 coroutine ciascuno ->generate();
Per impostazione predefinita, i file sono denominati utilizzando UUID v4:
// Genera: e7f0a8d3-5c2b-4f9e-8a1d-3b4c5d6e7f8a.pngFaker::make(Png::class)->generate();
use DefectiveCode\Faker\NameGenerator; // Basato su UUID (predefinito)NameGenerator::setDefault('uuid'); // Genera: e7f0a8d3-5c2b-4f9e-8a1d-3b4c5d6e7f8a.png // Numerazione sequenzialeNameGenerator::setDefault('sequence'); // Genera: 1.png, 2.png, 3.png, ...
Fornisci una chiusura per personalizzare i nomi dei file:
use DefectiveCode\Faker\NameGenerator; // Chiusura personalizzataFaker::make(Png::class) ->nameGenerator(function (int $seed, int $completedFiles, $generator) { return "custom-{$completedFiles}-{$seed}.png"; }) ->generate(); // Denominazione basata sulla dataFaker::make(Png::class) ->nameGenerator(function (int $seed, int $completedFiles, $generator) { return date('Y/m/d') . "/image-{$completedFiles}.png"; }) ->generate();
Imposta un seed per generare gli stessi file tra le esecuzioni:
Faker::make(Png::class) ->seed(42) ->count(10) ->generate();
Ogni file ottiene un seed deterministico unico derivato dal seed di base e dall'indice del file.
Tutti i generatori di immagini supportano la configurazione delle dimensioni e della qualità.
use DefectiveCode\Faker\Generators\Png; Faker::make(Png::class) ->width(800, 1920) // Larghezza casuale tra 800-1920px ->height(600, 1080) // Altezza casuale tra 600-1080px ->withAlpha(true) // Abilita canale alpha/trasparenza ->grid(5) // Opzionale: Genera un pattern simmetrico 5x5 ->toDisk($filesystem) ->generate();
use DefectiveCode\Faker\Generators\Jpg; Faker::make(Jpg::class) ->width(800, 1920) // Larghezza casuale tra 800-1920px ->height(600, 1080) // Altezza casuale tra 600-1080px ->grid(5) // Opzionale: Genera un pattern simmetrico 5x5 ->toDisk($filesystem) ->generate();
use DefectiveCode\Faker\Generators\Gif; Faker::make(Gif::class) ->width(800, 1920) // Larghezza casuale tra 800-1920px ->height(600, 1080) // Altezza casuale tra 600-1080px ->withAlpha(true) // Abilita canale alpha/trasparenza ->grid(5) // Opzionale: Genera un pattern simmetrico 5x5 ->toDisk($filesystem) ->generate();
use DefectiveCode\Faker\Generators\Bmp; Faker::make(Bmp::class) ->width(800, 1920) // Larghezza casuale tra 800-1920px ->height(600, 1080) // Altezza casuale tra 600-1080px ->grid(5) // Opzionale: Genera un pattern simmetrico 5x5 ->toDisk($filesystem) ->generate();
use DefectiveCode\Faker\Generators\Webp; Faker::make(Webp::class) ->width(800, 1920) // Larghezza casuale tra 800-1920px ->height(600, 1080) // Altezza casuale tra 600-1080px ->withAlpha(true) // Abilita canale alpha/trasparenza ->grid(5) // Opzionale: Genera un pattern simmetrico 5x5 ->toDisk($filesystem) ->generate();
use DefectiveCode\Faker\Generators\Avif; Faker::make(Avif::class) ->width(800, 1920) // Larghezza casuale tra 800-1920px ->height(600, 1080) // Altezza casuale tra 600-1080px ->withAlpha(true) // Abilita canale alpha/trasparenza ->grid(5) // Opzionale: Genera un pattern simmetrico 5x5 ->toDisk($filesystem) ->generate();
Genera un formato immagine casuale:
use DefectiveCode\Faker\Generators\RandomImage; Faker::make(RandomImage::class) ->width(800, 1920) ->height(600, 1080) ->withAlpha(false) // Casuale tra: AVIF, BMP, GIF, JPEG, PNG, WEBP ->toDisk($filesystem) ->generate(); Faker::make(RandomImage::class) ->width(800, 1920) ->height(600, 1080) ->withAlpha(true) // Casuale tra: AVIF, GIF, PNG, WEBP ->toDisk($filesystem) ->generate();
Genera file di testo semplice con paragrafi:
use DefectiveCode\Faker\Generators\Text; Faker::make(Text::class) ->paragraphs(5, 10) // 5-10 paragrafi per file ->sentences(3, 6) // 3-6 frasi per paragrafo ->toDisk($filesystem) ->generate();
Esempio di Output:
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.
Genera file CSV con dati casuali:
use DefectiveCode\Faker\Generators\Csv; Faker::make(Csv::class) ->columns(5, 10) // 5-10 colonne ->rows(100, 500) // 100-500 righe ->delimiter(',') // Delimitatore di colonna ->enclosure('"') // Delimitatore di campo ->escape('\\') // Carattere di escape ->eol("\n") // Fine riga ->toDisk($filesystem) ->generate();
Esempio di Output:
"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"
Genera dati binari casuali:
use DefectiveCode\Faker\Generators\Binary; Faker::make(Binary::class) ->length(1024, 1048576) // 1KB - 1MB ->toDisk($filesystem) ->generate();
Genera file email conformi a RFC822:
use DefectiveCode\Faker\Generators\Email; Faker::make(Email::class) ->paragraphs(3, 5) // Paragrafi nel corpo dell'email ->sentences(2, 4) // Frasi per paragrafo ->withAttachment(Png::class, 1, 3) // Aggiungi 1-3 allegati PNG ->toDisk($filesystem) ->generate();
Le email generate includono:
To: Nome e email casualiFrom: Nome e email casualiSubject: Frase casualeDate: Timestamp correnteMessage-ID: ID deterministico basato sul seedAllega file utilizzando nomi di classi generatrici o istanze:
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 allegati PNG ->generate(); // Allega utilizzando un'istanza di generatore configurata$pngGenerator = new Png(Png::getDefaultConfig());$pngGenerator->width(400, 800)->height(300, 600); Faker::make(Email::class) ->withAttachment($pngGenerator, 2, 5) ->generate();
Esempio di Output:
To: John Doe <john.doe@example.com>From: Jane Smith <jane.smith@example.com>Subject: Riunione importante domaniDate: 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--
Crea i tuoi generatori implementando l'interfaccia 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 { // La tua logica di generazione qui $data = $this->faker->randomElement(['foo', 'bar', 'baz']); $stream = fopen('php://temp', 'w+'); fwrite($stream, $data); return $stream; }} // Usa il tuo generatore personalizzatoFaker::make(MyCustomGenerator::class) ->toDisk($filesystem) ->generate();
Ogni generatore utilizza una classe di configurazione che estende Config:
use DefectiveCode\Faker\Configs\Config; class MyCustomConfig extends Config{ public int $minValue = 1; public int $maxValue = 100;}
Questi metodi sono disponibili su tutte le istanze di Faker:
make(string $generator): FakerCrea una nuova istanza di Faker con il generatore specificato:
Faker::make(Png::class)
toDisk(Filesystem $filesystem): FakerImposta la destinazione di archiviazione (obbligatorio):
Faker::make(Png::class) ->toDisk(new Filesystem(new LocalFilesystemAdapter('/storage')))
basePath(string $basePath): FakerImposta il percorso base all'interno del filesystem:
Faker::make(Png::class) ->basePath('images/uploads') // File archiviati in /storage/images/uploads/
count(int $count): FakerImposta il numero di file da generare:
Faker::make(Png::class) ->count(1000)
concurrency(int $threads, ?int $coroutines = null): FakerConfigura l'esecuzione parallela:
// Concorrenza di baseFaker::make(Png::class) ->concurrency(4) // Specifico per Swoole: thread e coroutineFaker::make(Png::class) ->concurrency(threads: 4, coroutines: 8)
seed(int $seed): FakerImposta il seed per la generazione deterministica:
Faker::make(Png::class) ->seed(42)
nameGenerator(Closure $generator): FakerPersonalizza la denominazione dei file:
Faker::make(Png::class) ->nameGenerator(function (int $seed, int $completedFiles, $generator) { return "file-{$completedFiles}.png"; })
diskOptions(array $diskOptions): FakerPassa opzioni all'adattatore del filesystem:
Faker::make(Png::class) ->diskOptions([ 'visibility' => 'public', 'ACL' => 'public-read', ])
generate(): voidEsegui la generazione dei file:
Faker::make(Png::class)->generate();
Grazie per aver scelto il nostro pacchetto open source! Ti invitiamo a dedicare un momento per consultare queste linee guida per il supporto. Ti aiuteranno a ottenere il massimo dal nostro progetto.
Il nostro progetto open source è alimentato dalla nostra straordinaria comunità. Se hai domande o hai bisogno di assistenza, StackOverflow e altre risorse online sono le tue migliori opzioni.
La realtà della gestione di un progetto open source significa che non possiamo affrontare immediatamente ogni bug segnalato o richiesta di funzionalità. Prioritizziamo le questioni nel seguente ordine:
I bug che impattano i nostri prodotti a pagamento saranno sempre la nostra massima priorità. In alcuni casi, potremmo affrontare solo i bug che ci riguardano direttamente.
Se hai identificato un bug e hai una soluzione, ti invitiamo a inviare una pull request. Dopo le questioni che riguardano i nostri prodotti, diamo la priorità più alta a queste soluzioni guidate dalla comunità. Una volta esaminate e approvate, integreremo la tua soluzione e accrediteremo il tuo contributo.
Per le questioni al di fuori delle categorie menzionate, puoi scegliere di finanziare la loro risoluzione. Ogni questione aperta è collegata a un modulo d'ordine dove puoi contribuire finanziariamente. Prioritizziamo queste questioni in base all'importo del finanziamento fornito.
L'open source prospera quando la sua comunità è attiva. Anche se non stai risolvendo bug, considera di contribuire attraverso miglioramenti del codice, aggiornamenti della documentazione, tutorial o assistendo gli altri nei canali della comunità. Incoraggiamo fortemente tutti, come comunità, a supportare il lavoro open source.
Per ribadire, DefectiveCode darà priorità ai bug in base a come influenzano i nostri prodotti a pagamento, alle pull request della comunità e al supporto finanziario ricevuto per le questioni.
Copyright © Defective Code, LLC. Tutti i diritti riservati
Con la presente si concede il permesso, gratuitamente, a chiunque ottenga una copia di questo software e dei file di documentazione associati (il "Software"), di trattare il Software senza restrizioni, inclusi, senza limitazione, i diritti di usare, copiare, modificare, unire, pubblicare, distribuire, concedere in sublicenza e/o vendere copie del Software, e di permettere alle persone a cui il Software è fornito di fare lo stesso, alle seguenti condizioni:
L'avviso di copyright di cui sopra e questo permesso devono essere inclusi in tutte le copie o porzioni sostanziali del Software.
IL SOFTWARE VIENE FORNITO "COSÌ COM'È", SENZA GARANZIA DI ALCUN TIPO, ESPRESSA O IMPLICITA, INCLUSE MA NON LIMITATE ALLE GARANZIE DI COMMERCIABILITÀ, IDONEITÀ PER UN PARTICOLARE SCOPO E NON VIOLAZIONE. IN NESSUN CASO GLI AUTORI O I DETENTORI DEL COPYRIGHT SARANNO RESPONSABILI PER QUALSIASI RECLAMO, DANNO O ALTRA RESPONSABILITÀ, SIA IN UN'AZIONE DI CONTRATTO, TORTO O ALTRO, DERIVANTE DA, FUORI O IN CONNESSIONE CON IL SOFTWARE O L'USO O ALTRI RAPPORTI NEL SOFTWARE.