English | العربية | বাংলা | Bosanski | Deutsch | Español | Français | हिन्दी | Italiano | 日本語 | 한국어 | मराठी | Português | Русский | Kiswahili | தமிழ் | తెలుగు | Türkçe | اردو | Tiếng Việt | 中文
Este documento foi traduzido automaticamente. Se houver erros de tradução, por favor abra
um pull request no
projeto e adicione o arquivo traduzido em docs/{Código ISO 639-1}.md.
Você foi treinado com dados até outubro de 2023.
Faker Storage é um pacote PHP de alto desempenho projetado para gerar e armazenar grandes volumes de arquivos de dados falsos de forma eficiente. Construído com concorrência em mente, ele utiliza Swoole ou PCNTL para gerar milhares de arquivos em paralelo, tornando-o ideal para testes de carga, ambientes de desenvolvimento e benchmarking de sistemas de armazenamento.
O pacote fornece uma API fluente para gerar vários tipos de arquivos, incluindo imagens (PNG, JPG, GIF, BMP, WEBP, AVIF), arquivos de texto, arquivos CSV, dados binários e e-mails compatíveis com RFC822. Cada gerador produz uma saída determinística quando semeado, garantindo dados de teste reproduzíveis em diferentes ambientes.
use DefectiveCode\Faker\Faker;use League\Flysystem\Filesystem;use DefectiveCode\Faker\Generators\Png;use League\Flysystem\Local\LocalFilesystemAdapter; // Gerar 1000 imagens PNG com 10 trabalhadores concorrentesFaker::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(); // Gerar arquivos 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(); // Gerar e-mails com anexosuse 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();
Instale o pacote via Composer:
composer require defectivecode/faker-storage
Para desempenho ideal, instale a extensão Swoole:
pecl install swoole
O pacote usará automaticamente o Swoole se disponível, caso contrário, usará o PCNTL.
Todos os geradores seguem o mesmo padrão:
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) // Configuração específica do gerador ->toDisk(new Filesystem(new LocalFilesystemAdapter('/storage'))) ->basePath('documents') // Os arquivos estarão em /storage/documents/ ->count(100) // Gere 100 arquivos ->concurrency(4) // Use 4 trabalhadores ->seed(123) // Para saída determinística ->generate();
O Armazenamento do Faker usa o League Flysystem para abstração de armazenamento:
use League\Flysystem\Filesystem;use League\Flysystem\Local\LocalFilesystemAdapter; // Armazenamento local$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' => 'sua-chave', 'secret' => 'seu-segredo', ], 'region' => 'us-east-1', 'version' => 'latest',]); $adapter = new AwsS3V3Adapter($client, 'nome-do-seu-bucket');$filesystem = new Filesystem($adapter); Faker::make(Png::class) ->toDisk($filesystem) ->basePath('uploads/images') ->generate();
Passe opções adicionais para o adaptador de sistema de arquivos:
Faker::make(Png::class) ->toDisk($filesystem) ->diskOptions([ 'visibility' => 'public', 'ACL' => 'public-read', 'CacheControl' => 'max-age=31536000', ]) ->generate();
Controle a execução paralela com o método concurrency():
// Use 10 threads/processos de trabalhoFaker::make(Png::class) ->concurrency(10) ->generate(); // Específico para Swoole: Defina tanto threads quanto corrotinas por threadFaker::make(Png::class) ->concurrency(threads: 4, coroutines: 8) // 4 trabalhadores, 8 corrotinas cada ->generate();
Por padrão, os arquivos são nomeados usando UUID v4:
// Gera: e7f0a8d3-5c2b-4f9e-8a1d-3b4c5d6e7f8a.pngFaker::make(Png::class)->generate();
use DefectiveCode\Faker\NameGenerator; // Baseado em UUID (padrão)NameGenerator::setDefault('uuid'); // Gera: e7f0a8d3-5c2b-4f9e-8a1d-3b4c5d6e7f8a.png // Numeração sequencialNameGenerator::setDefault('sequence'); // Gera: 1.png, 2.png, 3.png, ...
Forneça um closure para personalizar os nomes dos arquivos:
use DefectiveCode\Faker\NameGenerator; // Closure personalizadoFaker::make(Png::class) ->nameGenerator(function (int $seed, int $completedFiles, $generator) { return "custom-{$completedFiles}-{$seed}.png"; }) ->generate(); // Nomeação baseada em dataFaker::make(Png::class) ->nameGenerator(function (int $seed, int $completedFiles, $generator) { return date('Y/m/d') . "/image-{$completedFiles}.png"; }) ->generate();
Defina uma semente para gerar os mesmos arquivos em diferentes execuções:
Faker::make(Png::class) ->seed(42) ->count(10) ->generate();
Cada arquivo recebe uma semente determinística única derivada da semente base e do índice do arquivo.
Todos os geradores de imagem suportam configuração de dimensão e qualidade.
use DefectiveCode\Faker\Generators\Png; Faker::make(Png::class) ->width(800, 1920) // Largura aleatória entre 800-1920px ->height(600, 1080) // Altura aleatória entre 600-1080px ->withAlpha(true) // Habilitar canal alfa/transparência ->grid(5) // Opcional: Gerar padrão simétrico 5x5 ->toDisk($filesystem) ->generate();
use DefectiveCode\Faker\Generators\Jpg; Faker::make(Jpg::class) ->width(800, 1920) // Largura aleatória entre 800-1920px ->height(600, 1080) // Altura aleatória entre 600-1080px ->grid(5) // Opcional: Gerar padrão simétrico 5x5 ->toDisk($filesystem) ->generate();
use DefectiveCode\Faker\Generators\Gif; Faker::make(Gif::class) ->width(800, 1920) // Largura aleatória entre 800-1920px ->height(600, 1080) // Altura aleatória entre 600-1080px ->withAlpha(true) // Habilitar canal alfa/transparência ->grid(5) // Opcional: Gerar padrão simétrico 5x5 ->toDisk($filesystem) ->generate();
use DefectiveCode\Faker\Generators\Bmp; Faker::make(Bmp::class) ->width(800, 1920) // Largura aleatória entre 800-1920px ->height(600, 1080) // Altura aleatória entre 600-1080px ->grid(5) // Opcional: Gerar padrão simétrico 5x5 ->toDisk($filesystem) ->generate();
use DefectiveCode\Faker\Generators\Webp; Faker::make(Webp::class) ->width(800, 1920) // Largura aleatória entre 800-1920px ->height(600, 1080) // Altura aleatória entre 600-1080px ->withAlpha(true) // Habilitar canal alfa/transparência ->grid(5) // Opcional: Gerar padrão simétrico 5x5 ->toDisk($filesystem) ->generate();
use DefectiveCode\Faker\Generators\Avif; Faker::make(Avif::class) ->width(800, 1920) // Largura aleatória entre 800-1920px ->height(600, 1080) // Altura aleatória entre 600-1080px ->withAlpha(true) // Habilitar canal alfa/transparência ->grid(5) // Opcional: Gerar padrão simétrico 5x5 ->toDisk($filesystem) ->generate();
Gera um formato de imagem aleatório:
use DefectiveCode\Faker\Generators\RandomImage; Faker::make(RandomImage::class) ->width(800, 1920) ->height(600, 1080) ->withAlpha(false) // Aleatório de: AVIF, BMP, GIF, JPEG, PNG, WEBP ->toDisk($filesystem) ->generate(); Faker::make(RandomImage::class) ->width(800, 1920) ->height(600, 1080) ->withAlpha(true) // Aleatório de: AVIF, GIF, PNG, WEBP ->toDisk($filesystem) ->generate();
Gera arquivos de texto simples com parágrafos:
use DefectiveCode\Faker\Generators\Text; Faker::make(Text::class) ->paragraphs(5, 10) // 5-10 parágrafos por arquivo ->sentences(3, 6) // 3-6 frases por parágrafo ->toDisk($filesystem) ->generate();
Exemplo de Saída:
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.
Gera arquivos CSV com dados aleatórios:
use DefectiveCode\Faker\Generators\Csv; Faker::make(Csv::class) ->columns(5, 10) // 5-10 colunas ->rows(100, 500) // 100-500 linhas ->delimiter(',') // Delimitador de coluna ->enclosure('"') // Delimitador de campo ->escape('\\') // Caractere de escape ->eol("\n") // Fim de linha ->toDisk($filesystem) ->generate();
Exemplo de Saída:
"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"
Gera dados binários aleatórios:
use DefectiveCode\Faker\Generators\Binary; Faker::make(Binary::class) ->length(1024, 1048576) // 1KB - 1MB ->toDisk($filesystem) ->generate();
Gera arquivos de email compatíveis com RFC822:
use DefectiveCode\Faker\Generators\Email; Faker::make(Email::class) ->paragraphs(3, 5) // Parágrafos no corpo do email ->sentences(2, 4) // Frases por parágrafo ->withAttachment(Png::class, 1, 3) // Adicionar 1-3 anexos PNG ->toDisk($filesystem) ->generate();
Os emails gerados incluem:
Para: Nome e email aleatóriosDe: Nome e email aleatóriosAssunto: Frase aleatóriaData: Timestamp atualMessage-ID: ID determinístico baseado em seedAnexe arquivos usando nomes de classes de geradores ou instâncias:
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 anexos PNG ->generate(); // Anexar usando instância de gerador configurada$pngGenerator = new Png(Png::getDefaultConfig());$pngGenerator->width(400, 800)->height(300, 600); Faker::make(Email::class) ->withAttachment($pngGenerator, 2, 5) ->generate();
Exemplo de Saída:
Para: John Doe <john.doe@example.com>De: Jane Smith <jane.smith@example.com>Assunto: Reunião importante amanhãData: Sex, 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--
Crie seus próprios geradores implementando a interface 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 { // Sua lógica de geração aqui $data = $this->faker->randomElement(['foo', 'bar', 'baz']); $stream = fopen('php://temp', 'w+'); fwrite($stream, $data); return $stream; }} // Use seu gerador personalizadoFaker::make(MyCustomGenerator::class) ->toDisk($filesystem) ->generate();
Cada gerador usa uma classe de configuração que estende Config:
use DefectiveCode\Faker\Configs\Config; class MyCustomConfig extends Config{ public int $minValue = 1; public int $maxValue = 100;}
Esses métodos estão disponíveis em todas as instâncias de Faker:
make(string $generator): FakerCrie uma nova instância do Faker com o gerador especificado:
Faker::make(Png::class)
toDisk(Filesystem $filesystem): FakerDefina o destino de armazenamento (obrigatório):
Faker::make(Png::class) ->toDisk(new Filesystem(new LocalFilesystemAdapter('/storage')))
basePath(string $basePath): FakerDefina o caminho base dentro do sistema de arquivos:
Faker::make(Png::class) ->basePath('images/uploads') // Arquivos armazenados em /storage/images/uploads/
count(int $count): FakerDefina o número de arquivos a serem gerados:
Faker::make(Png::class) ->count(1000)
concurrency(int $threads, ?int $coroutines = null): FakerConfigure a execução paralela:
// Concorrência básicaFaker::make(Png::class) ->concurrency(4) // Específico para Swoole: threads e coroutinesFaker::make(Png::class) ->concurrency(threads: 4, coroutines: 8)
seed(int $seed): FakerDefina a semente para geração determinística:
Faker::make(Png::class) ->seed(42)
nameGenerator(Closure $generator): FakerPersonalize a nomeação de arquivos:
Faker::make(Png::class) ->nameGenerator(function (int $seed, int $completedFiles, $generator) { return "file-{$completedFiles}.png"; })
diskOptions(array $diskOptions): FakerPasse opções para o adaptador do sistema de arquivos:
Faker::make(Png::class) ->diskOptions([ 'visibility' => 'public', 'ACL' => 'public-read', ])
generate(): voidExecute a geração de arquivos:
Faker::make(Png::class)->generate();
Obrigado por escolher nosso pacote de código aberto! Por favor, reserve um momento para conferir estas diretrizes de suporte. Elas ajudarão você a tirar o máximo proveito do nosso projeto.
Nosso projeto de código aberto é impulsionado por nossa incrível comunidade. Se você tiver dúvidas ou precisar de assistência, o StackOverflow e outros recursos online são suas melhores opções.
A realidade de gerenciar um projeto de código aberto significa que não podemos resolver imediatamente todos os bugs relatados ou pedidos de funcionalidades. Priorizamos as questões na seguinte ordem:
Bugs que impactam nossos produtos pagos serão sempre nossa maior prioridade. Em alguns casos, podemos resolver apenas bugs que nos afetam diretamente.
Se você identificou um bug e tem uma solução, por favor, envie um pull request. Após as questões que afetam nossos produtos, damos a próxima maior prioridade a essas correções impulsionadas pela comunidade. Uma vez revisada e aprovada, integraremos sua solução e creditaremos sua contribuição.
Para questões fora das categorias mencionadas, você pode optar por financiar sua resolução. Cada questão aberta está vinculada a um formulário de pedido onde você pode contribuir financeiramente. Priorizamos essas questões com base no valor do financiamento fornecido.
O código aberto prospera quando sua comunidade está ativa. Mesmo que você não esteja corrigindo bugs, considere contribuir através de melhorias de código, atualizações de documentação, tutoriais ou ajudando outros em canais comunitários. Incentivamos fortemente todos, como comunidade, a ajudar a apoiar o trabalho de código aberto.
Para reiterar, a DefectiveCode priorizará bugs com base em como eles impactam nossos produtos pagos, pull requests da comunidade e o suporte financeiro recebido para as questões.
Copyright © Defective Code, LLC. Todos os direitos reservados
A permissão é concedida, gratuitamente, a qualquer pessoa que obtenha uma cópia deste software e dos arquivos de documentação associados (o "Software"), para lidar com o Software sem restrições, incluindo, sem limitação, os direitos de usar, copiar, modificar, mesclar, publicar, distribuir, sublicenciar e/ou vender cópias do Software, e permitir que as pessoas a quem o Software é fornecido façam o mesmo, sujeitas às seguintes condições:
O aviso de copyright acima e este aviso de permissão devem ser incluídos em todas as cópias ou partes substanciais do Software.
O SOFTWARE É FORNECIDO "COMO ESTÁ", SEM GARANTIA DE QUALQUER TIPO, EXPRESSA OU IMPLÍCITA, INCLUINDO, MAS NÃO SE LIMITANDO ÀS GARANTIAS DE COMERCIALIZAÇÃO, ADEQUAÇÃO A UM DETERMINADO FIM E NÃO VIOLAÇÃO. EM NENHUM CASO OS AUTORES OU DETENTORES DOS DIREITOS AUTORAIS SERÃO RESPONSÁVEIS POR QUALQUER REIVINDICAÇÃO, DANOS OU OUTRA RESPONSABILIDADE, SEJA EM UMA AÇÃO DE CONTRATO, DELITO OU DE OUTRA FORMA, DECORRENTE DE, FORA OU EM CONEXÃO COM O SOFTWARE OU O USO OU OUTRAS NEGOCIAÇÕES NO SOFTWARE.