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 | 中文

вступление

Faker Storage - это высокопроизводительный PHP пакет, предназначенный для эффективного создания и хранения больших объемов фальшивых данных файлов. С учетом многопоточности, он использует Swoole или PCNTL для генерации тысяч файлов параллельно, что делает его идеальным для нагрузочного тестирования, разработки и бенчмаркинга систем хранения.

Пакет предоставляет удобный API для генерации различных типов файлов, включая изображения (PNG, JPG, GIF, BMP, WEBP, AVIF), текстовые файлы, CSV файлы, двоичные данные и электронные письма, соответствующие стандарту RFC822. Каждый генератор производит детерминированный вывод при заданном seed, обеспечивая воспроизводимые тестовые данные в различных средах.

Ключевые особенности

Пример

use DefectiveCode\Faker\Faker;
use League\Flysystem\Filesystem;
use DefectiveCode\Faker\Generators\Png;
use League\Flysystem\Local\LocalFilesystemAdapter;
 
// Генерация 1000 PNG изображений с 10 параллельными рабочими
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();
 
// Генерация CSV файлов
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();
 
// Генерация электронных писем с вложениями
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();

Установка

Установите пакет через Composer:

composer require defectivecode/faker-storage

Требования

Необязательные зависимости

Для оптимальной производительности установите расширение Swoole:

pecl install swoole

Пакет будет автоматически использовать Swoole, если он доступен, в противном случае вернется к PCNTL.

Использование

Основной рабочий процесс

Все генераторы следуют одному и тому же шаблону:

  1. Создайте экземпляр Faker с генератором.
  2. Настройте генератор (необязательно).
  3. Установите место хранения.
  4. Настройте многопоточность и количество.
  5. Сгенерируйте файлы.
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) // Конфигурация, специфичная для генератора
->toDisk(new Filesystem(new LocalFilesystemAdapter('/storage')))
->basePath('documents') // Файлы будут в /storage/documents/
->count(100) // Генерация 100 файлов
->concurrency(4) // Используйте 4 рабочих
->seed(123) // Для детерминированного вывода
->generate();

Настройка хранения

Использование Flysystem

Faker Storage использует League Flysystem для абстракции хранения:

use League\Flysystem\Filesystem;
use League\Flysystem\Local\LocalFilesystemAdapter;
 
// Локальное хранилище
$filesystem = new Filesystem(new LocalFilesystemAdapter('/path/to/storage'));
 
Faker::make(Png::class)
->toDisk($filesystem)
->generate();

Хранилище AWS S3

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();

Опции диска

Передайте дополнительные параметры адаптеру файловой системы:

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

Настройка многопоточности

Контролируйте параллельное выполнение с помощью метода concurrency():

// Используйте 10 рабочих потоков/процессов
Faker::make(Png::class)
->concurrency(10)
->generate();
 
// Специфика Swoole: Установите как потоки, так и корутины на поток
Faker::make(Png::class)
->concurrency(threads: 4, coroutines: 8) // 4 рабочих, по 8 корутин каждый
->generate();

Название файлов

Название по умолчанию

По умолчанию файлы называются с использованием UUID v4:

// Генерирует: e7f0a8d3-5c2b-4f9e-8a1d-3b4c5d6e7f8a.png
Faker::make(Png::class)->generate();

Встроенные генераторы имен

use DefectiveCode\Faker\NameGenerator;
 
// На основе UUID (по умолчанию)
NameGenerator::setDefault('uuid'); // Генерирует: e7f0a8d3-5c2b-4f9e-8a1d-3b4c5d6e7f8a.png
 
// Последовательная нумерация
NameGenerator::setDefault('sequence'); // Генерирует: 1.png, 2.png, 3.png, ...

Настраиваемые имена

Предоставьте замыкание для настройки имен файлов:

use DefectiveCode\Faker\NameGenerator;
 
// Пользовательское замыкание
Faker::make(Png::class)
->nameGenerator(function (int $seed, int $completedFiles, $generator) {
return "custom-{$completedFiles}-{$seed}.png";
})
->generate();
 
// Название на основе даты
Faker::make(Png::class)
->nameGenerator(function (int $seed, int $completedFiles, $generator) {
return date('Y/m/d') . "/image-{$completedFiles}.png";
})
->generate();

Установка для воспроизводимости

Установите seed для генерации одних и тех же файлов в разных запусках:

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

Каждый файл получает уникальный детерминированный seed, производный от базового seed и индекса файла.

Генераторы

Генераторы изображений

Все генераторы изображений поддерживают настройку размеров и качества.

PNG

use DefectiveCode\Faker\Generators\Png;
 
Faker::make(Png::class)
->width(800, 1920) // Случайная ширина от 800 до 1920 пикселей
->height(600, 1080) // Случайная высота от 600 до 1080 пикселей
->withAlpha(true) // Включить альфа/прозрачный канал
->grid(5) // Необязательно: Генерировать симметричный узор 5x5
->toDisk($filesystem)
->generate();

JPG

use DefectiveCode\Faker\Generators\Jpg;
 
Faker::make(Jpg::class)
->width(800, 1920) // Случайная ширина от 800 до 1920 пикселей
->height(600, 1080) // Случайная высота от 600 до 1080 пикселей
->grid(5) // Необязательно: Генерировать симметричный узор 5x5
->toDisk($filesystem)
->generate();

GIF

use DefectiveCode\Faker\Generators\Gif;
 
Faker::make(Gif::class)
->width(800, 1920) // Случайная ширина от 800 до 1920 пикселей
->height(600, 1080) // Случайная высота от 600 до 1080 пикселей
->withAlpha(true) // Включить альфа/прозрачный канал
->grid(5) // Необязательно: Генерировать симметричный узор 5x5
->toDisk($filesystem)
->generate();

BMP

use DefectiveCode\Faker\Generators\Bmp;
 
Faker::make(Bmp::class)
->width(800, 1920) // Случайная ширина от 800 до 1920 пикселей
->height(600, 1080) // Случайная высота от 600 до 1080 пикселей
->grid(5) // Необязательно: Генерировать симметричный узор 5x5
->toDisk($filesystem)
->generate();

WEBP

use DefectiveCode\Faker\Generators\Webp;
 
Faker::make(Webp::class)
->width(800, 1920) // Случайная ширина от 800 до 1920 пикселей
->height(600, 1080) // Случайная высота от 600 до 1080 пикселей
->withAlpha(true) // Включить альфа/прозрачный канал
->grid(5) // Необязательно: Генерировать симметричный узор 5x5
->toDisk($filesystem)
->generate();

AVIF

use DefectiveCode\Faker\Generators\Avif;
 
Faker::make(Avif::class)
->width(800, 1920) // Случайная ширина от 800 до 1920 пикселей
->height(600, 1080) // Случайная высота от 600 до 1080 пикселей
->withAlpha(true) // Включить альфа/прозрачный канал
->grid(5) // Необязательно: Генерировать симметричный узор 5x5
->toDisk($filesystem)
->generate();

Случайное изображение

Генерирует изображение случайного формата:

use DefectiveCode\Faker\Generators\RandomImage;
 
Faker::make(RandomImage::class)
->width(800, 1920)
->height(600, 1080)
->withAlpha(false) // Случайно из: AVIF, BMP, GIF, JPEG, PNG, WEBP
->toDisk($filesystem)
->generate();
 
Faker::make(RandomImage::class)
->width(800, 1920)
->height(600, 1080)
->withAlpha(true) // Случайно из: AVIF, GIF, PNG, WEBP
->toDisk($filesystem)
->generate();

Генератор текста

Генерация простых текстовых файлов с абзацами:

use DefectiveCode\Faker\Generators\Text;
 
Faker::make(Text::class)
->paragraphs(5, 10) // 5-10 абзацев на файл
->sentences(3, 6) // 3-6 предложений на абзац
->toDisk($filesystem)
->generate();

Пример вывода:

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

Генерация CSV файлов со случайными данными:

use DefectiveCode\Faker\Generators\Csv;
 
Faker::make(Csv::class)
->columns(5, 10) // 5-10 столбцов
->rows(100, 500) // 100-500 строк
->delimiter(',') // Разделитель столбцов
->enclosure('"') // Ограничитель полей
->escape('\\') // Символ экранирования
->eol("\n") // Конец строки
->toDisk($filesystem)
->generate();

Пример вывода:

"John Doe","john@example.com","555-1234","Нью-Йорк","Инженер"
"Jane Smith","jane@example.com","555-5678","Лос-Анджелес","Дизайнер"
"Bob Johnson","bob@example.com","555-9012","Чикаго","Менеджер"

Генератор двоичных данных

Генерация случайных двоичных данных:

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

Генератор электронных писем

Генерация файлов электронных писем, соответствующих стандарту RFC822:

use DefectiveCode\Faker\Generators\Email;
 
Faker::make(Email::class)
->paragraphs(3, 5) // Абзацы в теле письма
->sentences(2, 4) // Предложения на абзац
->withAttachment(Png::class, 1, 3) // Добавить 1-3 вложения PNG
->toDisk($filesystem)
->generate();

Заголовки электронных писем

Сгенерированные электронные письма включают:

Электронная почта с вложениями

Прикрепляйте файлы, используя названия или экземпляры генераторов:

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
->generate();
 
// Прикрепить, используя экземпляр настроенного генератора
$pngGenerator = new Png(Png::getDefaultConfig());
$pngGenerator->width(400, 800)->height(300, 600);
 
Faker::make(Email::class)
->withAttachment($pngGenerator, 2, 5)
->generate();

Пример вывода:

To: John Doe <john.doe@example.com>
From: Jane Smith <jane.smith@example.com>
Subject: Важная встреча завтра
Date: Пт, 03 Янв 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--

Расширенное использование

Пользовательские генераторы

Создайте свои собственные генераторы, реализуя интерфейс 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
{
// Ваша логика генерации здесь
$data = $this->faker->randomElement(['foo', 'bar', 'baz']);
 
$stream = fopen('php://temp', 'w+');
fwrite($stream, $data);
 
return $stream;
}
}
 
// Используйте ваш пользовательский генератор
Faker::make(MyCustomGenerator::class)
->toDisk($filesystem)
->generate();

Классы конфигурации

Каждый генератор использует класс конфигурации, который наследует Config:

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

Советы по производительности

  1. Используйте Swoole: Установите расширение Swoole для наилучшей производительности.
  2. Настройте многопоточность: Соответствуйте количеству потоков числу ядер ЦП для оптимальной пропускной способности.
  3. Пакетные операции: Генерируйте большие партии, а не несколько небольших запусков.
  4. Место хранения: Используйте быстрое хранилище (SSD, локальный диск) для временных файлов перед загрузкой.
  5. Сетевая I/O: При использовании S3 увеличьте многопоточность для максимизации использования пропускной способности.

Конфигурация

Глобальные методы конфигурации

Эти методы доступны для всех экземпляров Faker:

make(string $generator): Faker

Создайте новый экземпляр Faker с указанным генератором:

Faker::make(Png::class)

toDisk(Filesystem $filesystem): Faker

Установите место хранения (обязательно):

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

basePath(string $basePath): Faker

Установите базовый путь в пределах файловой системы:

Faker::make(Png::class)
->basePath('images/uploads') // Файлы будут храниться в /storage/images/uploads/

count(int $count): Faker

Установите количество файлов для генерации:

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

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

Настройте параллельное выполнение:

// Базовая многопоточность
Faker::make(Png::class)
->concurrency(4)
 
// Специфика Swoole: потоки и корутины
Faker::make(Png::class)
->concurrency(threads: 4, coroutines: 8)

seed(int $seed): Faker

Установите seed для детерминированной генерации:

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

nameGenerator(Closure $generator): Faker

Настройте название файлов:

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

diskOptions(array $diskOptions): Faker

Передайте параметры адаптеру файловой системы:

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

generate(): void

Выполните генерацию файлов:

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

સપોર્ટ માર્ગદર્શિકા

આપણી ઓપન સોર્સ પેકેજ પસંદ કરવા માટે તમારો આભાર! કૃપા કરીને આ સેટેલાઈટ માર્ગદર્શિકાઓને ચકાસવા માટે થોડી મિનિટો પસાર કરો. આ પગલાં તમે અમારી યોજના પરથી વધુ સારી રીતે ઉપયોગી થવામાં મદદ કરશે.

સમુદાય ચલિત સહાયતા

અમારી ઓપન-સોર્સ યોજના અમારી શાનદાર સમુદાય દ્વારા ચલાવવામાં આવે છે. જો તમારી પાસે પ્રશ્નો છે અથવા સહાયતા જરૂર છે, તો સ્ટેકઓવરફ્લો અને અન્ય ઓનલાઈન સાધનો તમારા શ્રેષ્ઠ વિકલ્પ છે.

બગ્સ અને ફીચર પ્રાયોરિટાઈઝેશન

એક ઓપન-સોર્સ યોજના સંચાલિત કરવાનો વાસ્તવિકતાનો અર્થ એ છે કે દરેક નોંધાયેલા બગ અથવા ફીચર વિનંતી તરત ઠીક કરી શકતા નથી. અમે મુદ્દાઓને નીચેના ક્રમમાં પ્રાથમિકતા આપીએ છીએ:

1. અમારા પેઇડ ઉત્પાદનોને અસર કરતી બગ્સ

આપણાં પેઇડ ઉત્પાદનોને અસર કરતી બગ્સ હંમેશા અમારી ટોચની પ્રાથમિકતા રહેશે. કેટલીકવાર, અમે ફક્ત તે બગ્સને addressed કરીશું જે અમારો સીધો અસર કરે છે.

2. સમુદાય પુલ વિનંતીઓ

જો તમે એક બગ ઓળખી લીધો છે અને ત્યાં એક ઉકેલ છે, તો કૃપા કરીને પુલ વિનંતિ રજૂ કરો. અમારી ઉત્પાદનોને અસર કરતી મુદ્દા પછી, અમે આ સમુદાય ચલિત ઉકેલો માટે આગામી ઉંચી પ્રાથમિકતા પ્રદાન કરીએ છીએ. એક વાર સમીક્ષા અને મંજૂરી મેળવ્યા પછી, અમે તમારા ઉકેલને ઉમેરશું અને તમારી મુસદ્દાને માન આપશું.

3. નાણાની સહાયતા

ઉલ્લેખિત શ્રેણીઓની બહારના મુદ્દાઓ માટે, તમે તેમના સમાધાન માટે નાણાની સહાયતા આપવા માટે પસંદ કરી શકો છો. મોટી સમસ્યાઓ દરખાસ્તના ફોર્મ સાથે જોડાયેલી છે જયાં તમે નાણાંકીય રીતે ઇનામ આપી શકો છો. અમે આ મુદ્દાઓને આપવામાં આવેલા નાણાંની રકમના આધારે પ્રાથમિકતા આપીએ છીએ.

સમુદાયના યોગદાન

ઓપન સોર્સ ત્યારે જ જીવંત રહે છે જ્યારે તેની સમુદાય સક્રિય છે. જો તમે બગ્સને ઠીક નથી કરી રહ્યાં, તો કોડના સુધારા, દસ્તાવેજી અપડેટ, ટ્યુટોરિયલ્સ માધ્યમથી યોગદાન આપવાની ચૂકવણી કરો અથવા સમુદાય ચેનલોમાં અન્ય લોકોને મદદ કરે. અમે દરેકને બળાતમ ઉમેદવારી આપવાની ઉદ્બનકતામાં મદદરૃષ માટે ઉત્સાહિત કરીએ છીએ.

ફરીથી પુનરાવર્તન કરીએ, DefectiveCode બગ્સને અમારી પેઇડ ઉત્પાદનો પર કેવી રીતે અસર કરે છે તેના આધારે પ્રાથમિકતા આપશે, સમુદાય પુલ વિનંતીઓને, અને મુદ્દાઓ માટે મળેલ નાણાંકીય સહાયતા.

लायसन्स - MIT लायसन्स

कॉपीराइट © Defective Code, LLC. सर्व हक्क राखीव आहेत

या संगणक प्रोग्रामचा आणि संबंधित दस्तऐवज फाइल्स (या "सॉफ्टवेअर" म्हणून) एक प्रती मिळवणाऱ्या कोणत्याही व्यक्तीला, निर्बंधाशिवाय सॉफ्टवेअरमध्ये व्यवहार करण्याची परवानगी दिली जाते, ज्यात वापरण्याच्या, कॉपी करण्याच्या, सुधारित करण्याच्या, विलीन करण्याच्या, प्रकाशित करण्याच्या, वितरणाच्या, उपलायन करण्याच्या, आणि/किंवा सॉफ्टवेअरच्या प्रतींची विक्री करण्याच्या अधिकारांचा समावेश आहे, आणि ज्यांना सॉफ्टवेअर दिला जातो त्यांना असे करण्याची परवानगी देणे, खालील अटींच्या अधिन जातात:

वर उल्लेखित कॉपीराइट नोटिस आणि ही परवानगी नोटिस सर्व प्रतींमध्ये किंवा सॉफ्टवेअरच्या महत्त्वाच्या भागांमध्ये समाविष्ट केली जावी.

सॉफ्टवेअर "जसे आहे" दिले जाते, कोणत्याही प्रकारच्या वॉरन्टीशिवाय, स्पष्ट किंवा अप्रत्यक्ष, विक्रीसाठी तयार असणे, विशेष उद्देशासाठी योग्य असणे आणि कॉपीराइटचा भंग न करणारे यांचा समावेश, पण यापर्यंत सीमित नाही. लेखक किंवा कॉपीराइट धारक कोणत्याही दाव्यांसाठी, नुकसानांसाठी किंवा इतर जबाबदाऱ्याासाठी उत्तरदायी नाहीत, हे कॉन्ट्रॅक्ट, टॉर्ट किंवा इतर कोणत्याही प्रकारात असो, सॉफ्टवेअरशी संबंधित किंवा सॉफ्टवेअरसह किंवा इतर व्यवहारासंबंधी येणारे.