English | العربية | বাংলা | Bosanski | Deutsch | Español | Français | हिन्दी | Italiano | 日本語 | 한국어 | मराठी | Português | Русский | Kiswahili | தமிழ் | తెలుగు | Türkçe | اردو | Tiếng Việt | 中文
Dieses Dokument wurde automatisch übersetzt. Wenn es Übersetzungsfehler gibt, öffnen Sie bitte
einen Pull-Request im
Projekt und fügen Sie die übersetzte Datei zu docs/{ISO 639-1 Code}.md hinzu.
Sie sind auf Daten bis Oktober 2023 trainiert.
Faker Storage ist ein leistungsstarkes PHP-Paket, das entwickelt wurde, um große Mengen an gefälschten Datendateien effizient zu generieren und zu speichern. Mit Blick auf Parallelität konzipiert, nutzt es Swoole oder PCNTL, um Tausende von Dateien parallel zu erzeugen, was es ideal für Lasttests, Entwicklungsumgebungen und Benchmarking von Speichersystemen macht.
Das Paket bietet eine flüssige API zur Generierung verschiedener Dateitypen, einschließlich Bilder (PNG, JPG, GIF, BMP, WEBP, AVIF), Textdateien, CSV-Dateien, Binärdaten und RFC822-konforme E-Mails. Jeder Generator erzeugt deterministische Ausgaben, wenn er gesät wird, was reproduzierbare Testdaten über verschiedene Umgebungen hinweg sicherstellt.
use DefectiveCode\Faker\Faker;use League\Flysystem\Filesystem;use DefectiveCode\Faker\Generators\Png;use League\Flysystem\Local\LocalFilesystemAdapter; // Erzeuge 1000 PNG-Bilder mit 10 gleichzeitigen ArbeiternFaker::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(); // Erzeuge CSV-Dateienuse 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(); // Erzeuge E-Mails mit Anhängenuse 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();
Installieren Sie das Paket über Composer:
composer require defectivecode/faker-storage
Für optimale Leistung installieren Sie die Swoole-Erweiterung:
pecl install swoole
Das Paket verwendet automatisch Swoole, falls verfügbar, und fällt andernfalls auf PCNTL zurück.
Alle Generatoren folgen demselben Muster:
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) // Generatorspezifische Konfiguration ->toDisk(new Filesystem(new LocalFilesystemAdapter('/storage'))) ->basePath('documents') // Dateien werden in /storage/documents/ sein ->count(100) // 100 Dateien generieren ->concurrency(4) // 4 Arbeiter verwenden ->seed(123) // Für deterministische Ausgabe ->generate();
Faker Storage verwendet League Flysystem für Speicherabstraktion:
use League\Flysystem\Filesystem;use League\Flysystem\Local\LocalFilesystemAdapter; // Lokaler Speicher$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();
Übergeben Sie zusätzliche Optionen an den Filesystem-Adapter:
Faker::make(Png::class) ->toDisk($filesystem) ->diskOptions([ 'visibility' => 'public', 'ACL' => 'public-read', 'CacheControl' => 'max-age=31536000', ]) ->generate();
Steuern Sie die parallele Ausführung mit der Methode concurrency():
// Verwenden Sie 10 Arbeiter-Threads/ProzesseFaker::make(Png::class) ->concurrency(10) ->generate(); // Swoole-spezifisch: Setzen Sie sowohl Threads als auch Koroutinen pro ThreadFaker::make(Png::class) ->concurrency(threads: 4, coroutines: 8) // 4 Arbeiter, 8 Koroutinen jeweils ->generate();
Standardmäßig werden Dateien mit UUID v4 benannt:
// Generiert: e7f0a8d3-5c2b-4f9e-8a1d-3b4c5d6e7f8a.pngFaker::make(Png::class)->generate();
use DefectiveCode\Faker\NameGenerator; // UUID-basiert (Standard)NameGenerator::setDefault('uuid'); // Generiert: e7f0a8d3-5c2b-4f9e-8a1d-3b4c5d6e7f8a.png // Sequenzielle NummerierungNameGenerator::setDefault('sequence'); // Generiert: 1.png, 2.png, 3.png, ...
Stellen Sie eine Closure bereit, um Dateinamen anzupassen:
use DefectiveCode\Faker\NameGenerator; // Benutzerdefinierte ClosureFaker::make(Png::class) ->nameGenerator(function (int $seed, int $completedFiles, $generator) { return "custom-{$completedFiles}-{$seed}.png"; }) ->generate(); // Datumsbasierte BenennungFaker::make(Png::class) ->nameGenerator(function (int $seed, int $completedFiles, $generator) { return date('Y/m/d') . "/image-{$completedFiles}.png"; }) ->generate();
Setzen Sie einen Seed, um dieselben Dateien über mehrere Läufe hinweg zu generieren:
Faker::make(Png::class) ->seed(42) ->count(10) ->generate();
Jede Datei erhält einen einzigartigen deterministischen Seed, der aus dem Basis-Seed und dem Dateiindex abgeleitet wird.
Alle Bildgeneratoren unterstützen Dimensionen- und Qualitätskonfiguration.
use DefectiveCode\Faker\Generators\Png; Faker::make(Png::class) ->width(800, 1920) // Zufällige Breite zwischen 800-1920px ->height(600, 1080) // Zufällige Höhe zwischen 600-1080px ->withAlpha(true) // Alpha-/Transparenzkanal aktivieren ->grid(5) // Optional: Erzeuge 5x5 symmetrisches Muster ->toDisk($filesystem) ->generate();
use DefectiveCode\Faker\Generators\Jpg; Faker::make(Jpg::class) ->width(800, 1920) // Zufällige Breite zwischen 800-1920px ->height(600, 1080) // Zufällige Höhe zwischen 600-1080px ->grid(5) // Optional: Erzeuge 5x5 symmetrisches Muster ->toDisk($filesystem) ->generate();
use DefectiveCode\Faker\Generators\Gif; Faker::make(Gif::class) ->width(800, 1920) // Zufällige Breite zwischen 800-1920px ->height(600, 1080) // Zufällige Höhe zwischen 600-1080px ->withAlpha(true) // Alpha-/Transparenzkanal aktivieren ->grid(5) // Optional: Erzeuge 5x5 symmetrisches Muster ->toDisk($filesystem) ->generate();
use DefectiveCode\Faker\Generators\Bmp; Faker::make(Bmp::class) ->width(800, 1920) // Zufällige Breite zwischen 800-1920px ->height(600, 1080) // Zufällige Höhe zwischen 600-1080px ->grid(5) // Optional: Erzeuge 5x5 symmetrisches Muster ->toDisk($filesystem) ->generate();
use DefectiveCode\Faker\Generators\Webp; Faker::make(Webp::class) ->width(800, 1920) // Zufällige Breite zwischen 800-1920px ->height(600, 1080) // Zufällige Höhe zwischen 600-1080px ->withAlpha(true) // Alpha-/Transparenzkanal aktivieren ->grid(5) // Optional: Erzeuge 5x5 symmetrisches Muster ->toDisk($filesystem) ->generate();
use DefectiveCode\Faker\Generators\Avif; Faker::make(Avif::class) ->width(800, 1920) // Zufällige Breite zwischen 800-1920px ->height(600, 1080) // Zufällige Höhe zwischen 600-1080px ->withAlpha(true) // Alpha-/Transparenzkanal aktivieren ->grid(5) // Optional: Erzeuge 5x5 symmetrisches Muster ->toDisk($filesystem) ->generate();
Erzeugt ein zufälliges Bildformat:
use DefectiveCode\Faker\Generators\RandomImage; Faker::make(RandomImage::class) ->width(800, 1920) ->height(600, 1080) ->withAlpha(false) // Zufällig aus: AVIF, BMP, GIF, JPEG, PNG, WEBP ->toDisk($filesystem) ->generate(); Faker::make(RandomImage::class) ->width(800, 1920) ->height(600, 1080) ->withAlpha(true) // Zufällig aus: AVIF, GIF, PNG, WEBP ->toDisk($filesystem) ->generate();
Erzeugt einfache Textdateien mit Absätzen:
use DefectiveCode\Faker\Generators\Text; Faker::make(Text::class) ->paragraphs(5, 10) // 5-10 Absätze pro Datei ->sentences(3, 6) // 3-6 Sätze pro Absatz ->toDisk($filesystem) ->generate();
Beispielausgabe:
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.
Erzeugt CSV-Dateien mit zufälligen Daten:
use DefectiveCode\Faker\Generators\Csv; Faker::make(Csv::class) ->columns(5, 10) // 5-10 Spalten ->rows(100, 500) // 100-500 Zeilen ->delimiter(',') // Spaltentrennzeichen ->enclosure('"') // Feldbegrenzung ->escape('\\') // Escape-Zeichen ->eol("\n") // Zeilenende ->toDisk($filesystem) ->generate();
Beispielausgabe:
"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"
Erzeugt zufällige Binärdaten:
use DefectiveCode\Faker\Generators\Binary; Faker::make(Binary::class) ->length(1024, 1048576) // 1KB - 1MB ->toDisk($filesystem) ->generate();
Erzeugt RFC822-konforme E-Mail-Dateien:
use DefectiveCode\Faker\Generators\Email; Faker::make(Email::class) ->paragraphs(3, 5) // Absätze im E-Mail-Text ->sentences(2, 4) // Sätze pro Absatz ->withAttachment(Png::class, 1, 3) // 1-3 PNG-Anhänge hinzufügen ->toDisk($filesystem) ->generate();
Generierte E-Mails enthalten:
To: Zufälliger Name und E-MailFrom: Zufälliger Name und E-MailSubject: Zufälliger SatzDate: Aktueller ZeitstempelMessage-ID: Deterministische ID basierend auf SeedDateien mit Generator-Klassennamen oder Instanzen anhängen:
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-Anhänge ->generate(); // Anhang mit konfigurierter Generator-Instanz$pngGenerator = new Png(Png::getDefaultConfig());$pngGenerator->width(400, 800)->height(300, 600); Faker::make(Email::class) ->withAttachment($pngGenerator, 2, 5) ->generate();
Beispielausgabe:
To: John Doe <john.doe@example.com>From: Jane Smith <jane.smith@example.com>Subject: Wichtiges Treffen morgenDate: 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--
Erstellen Sie Ihre eigenen Generatoren, indem Sie das Generator-Interface implementieren:
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 { // Ihre Generierungslogik hier $data = $this->faker->randomElement(['foo', 'bar', 'baz']); $stream = fopen('php://temp', 'w+'); fwrite($stream, $data); return $stream; }} // Verwenden Sie Ihren benutzerdefinierten GeneratorFaker::make(MyCustomGenerator::class) ->toDisk($filesystem) ->generate();
Jeder Generator verwendet eine Konfigurationsklasse, die Config erweitert:
use DefectiveCode\Faker\Configs\Config; class MyCustomConfig extends Config{ public int $minValue = 1; public int $maxValue = 100;}
Sie sind auf Daten bis Oktober 2023 trainiert.
Diese Methoden sind auf allen Faker-Instanzen verfügbar:
make(string $generator): FakerErstellen Sie eine neue Faker-Instanz mit dem angegebenen Generator:
Faker::make(Png::class)
toDisk(Filesystem $filesystem): FakerLegen Sie das Speicherziel fest (erforderlich):
Faker::make(Png::class) ->toDisk(new Filesystem(new LocalFilesystemAdapter('/storage')))
basePath(string $basePath): FakerLegen Sie den Basis-Pfad im Dateisystem fest:
Faker::make(Png::class) ->basePath('images/uploads') // Dateien werden in /storage/images/uploads/ gespeichert
count(int $count): FakerLegen Sie die Anzahl der zu generierenden Dateien fest:
Faker::make(Png::class) ->count(1000)
concurrency(int $threads, ?int $coroutines = null): FakerKonfigurieren Sie die parallele Ausführung:
// Grundlegende ParallelitätFaker::make(Png::class) ->concurrency(4) // Swoole-spezifisch: Threads und CoroutinenFaker::make(Png::class) ->concurrency(threads: 4, coroutines: 8)
seed(int $seed): FakerLegen Sie den Seed für deterministische Generierung fest:
Faker::make(Png::class) ->seed(42)
nameGenerator(Closure $generator): FakerPassen Sie die Dateibenennung an:
Faker::make(Png::class) ->nameGenerator(function (int $seed, int $completedFiles, $generator) { return "file-{$completedFiles}.png"; })
diskOptions(array $diskOptions): FakerÜbergeben Sie Optionen an den Dateisystem-Adapter:
Faker::make(Png::class) ->diskOptions([ 'visibility' => 'public', 'ACL' => 'public-read', ])
generate(): voidFühren Sie die Dateigenerierung aus:
Faker::make(Png::class)->generate();
Danke, dass Sie sich für unser Open-Source-Paket entschieden haben! Bitte nehmen Sie sich einen Moment Zeit, um diese Unterstützungsrichtlinien zu lesen. Sie helfen Ihnen, das Beste aus unserem Projekt herauszuholen.
Unser Open-Source-Projekt wird von unserer großartigen Community angetrieben. Wenn Sie Fragen haben oder Unterstützung benötigen, sind StackOverflow und andere Online-Ressourcen Ihre besten Anlaufstellen.
Die Realität der Verwaltung eines Open-Source-Projekts bedeutet, dass wir nicht jeden gemeldeten Fehler oder Funktionswunsch sofort bearbeiten können. Wir priorisieren Probleme in folgender Reihenfolge:
Fehler, die unsere kostenpflichtigen Produkte betreffen, haben immer oberste Priorität. In einigen Fällen beheben wir möglicherweise nur Fehler, die uns direkt betreffen.
Wenn Sie einen Fehler identifiziert haben und eine Lösung haben, reichen Sie bitte einen Pull-Request ein. Nach den Problemen, die unsere Produkte betreffen, geben wir diesen community-getriebenen Lösungen die nächsthöchste Priorität. Nach Überprüfung und Genehmigung werden wir Ihre Lösung zusammenführen und Ihren Beitrag würdigen.
Für Probleme außerhalb der genannten Kategorien können Sie deren Lösung finanziell unterstützen. Jedes offene Problem ist mit einem Bestellformular verknüpft, über das Sie finanziell beitragen können. Wir priorisieren diese Probleme basierend auf dem bereitgestellten Finanzierungsbetrag.
Open Source gedeiht, wenn seine Community aktiv ist. Auch wenn Sie keine Fehler beheben, sollten Sie in Betracht ziehen, durch Code-Verbesserungen, Dokumentationsaktualisierungen, Tutorials oder durch Unterstützung anderer in Community-Kanälen beizutragen. Wir ermutigen alle, als Gemeinschaft, die Unterstützung von Open-Source-Arbeit zu fördern.
Um es noch einmal zu betonen, DefectiveCode wird Fehler basierend darauf priorisieren, wie sie unsere kostenpflichtigen Produkte, Community-Pull-Requests und die finanzielle Unterstützung für Probleme beeinflussen.
Copyright © Defective Code, LLC. Alle Rechte vorbehalten
Hiermit wird unentgeltlich die Erlaubnis erteilt, jeder Person, die eine Kopie dieser Software und der zugehörigen Dokumentationsdateien (die "Software") erhält, mit der Software uneingeschränkt zu verfahren, einschließlich und ohne Einschränkung der Rechte zur Nutzung, Vervielfältigung, Änderung, Zusammenführung, Veröffentlichung, Verbreitung, Unterlizenzierung und/oder zum Verkauf von Kopien der Software, und Personen, denen die Software zur Verfügung gestellt wird, dies zu gestatten, unter den folgenden Bedingungen:
Der obige Urheberrechtshinweis und dieser Erlaubnishinweis sind in allen Kopien oder wesentlichen Teilen der Software beizufügen.
DIE SOFTWARE WIRD OHNE JEGLICHE GEWÄHRLEISTUNG BEREITGESTELLT, AUSDRÜCKLICH ODER IMPLIZIT, EINSCHLIESSLICH, ABER NICHT BESCHRÄNKT AUF DIE GEWÄHRLEISTUNGEN DER MARKTGÄNGIGKEIT, DER EIGNUNG FÜR EINEN BESTIMMTEN ZWECK UND DER NICHTVERLETZUNG. IN KEINEM FALL SIND DIE AUTOREN ODER URHEBERRECHTSINHABER FÜR JEGLICHE ANSPRÜCHE, SCHÄDEN ODER ANDERE HAFTUNGEN VERANTWORTLICH, SEI ES AUS VERTRAG, UNERLAUBTER HANDLUNG ODER ANDERWEITIG, DIE SICH AUS, AUS ODER IM ZUSAMMENHANG MIT DER SOFTWARE ODER DER VERWENDUNG ODER ANDEREN GESCHÄFTEN IN DER SOFTWARE ERGEBEN.